Al meu ordinador habitual sempre tinc oberta una sessió d’Screen amb unes
poques finestres fixes, cadascuna amb un programa d’ús freqüent corrent de
forma permanent (Mutt amb el correu, Gnus amb els canals de notícies…). Així,
quan canvie puntualment d’equip, puc connectar‐me al primer via SSH,
adjuntar‐hi l’anterior sessió d’Screen i continuar usant els programes on
m’havia quedat (sense haver de recórrer a serveis web o sincronització entre
equips). Fins i tot he muntat algun truc per a poder editar fitxers i
visualitzar pàgines web des de la sessió d’Screen sobre la pantalla X o sessió
de Firefox locals, però això és una altra història que contaré en el seu
moment. ;)
L’assumpte és que cada volta que iniciava una sessió nova a l’ordinador habitual havia de llançar una nova sessió d’Screen, crear les finestres, posar‐los nom (a voltes tinc fins a set finestres obertes) i llançar cada programa en la finestra adequada. No era una operació freqüent però feia que em donara peresa reiniciar l’ordinador per a provar alguna cosa, i estava segur de que Screen permetria automatitzar el procés. Efectivament podia i damunt era molt senzill, ací teniu com ho vaig fer.
En primer lloc, tenia clar que volia llançar els programes com si els haguera iniciat manualment a cada intèrpret d’ordres perquè a voltes he de reiniciar‐los (per talls de connexió o canvis externs de configuració). Havia de trobar com fer automàticament que Screen:
- Creara una nova finestra.
- Li posara un nom determinat.
- Hi executara un intèrpret d’ordres.
- Injectara a l’intèrpret l’ordre corresponent a un programa a executar.
Mirant el manual vaig trobar que tot es podia automatitzar amb ordres d’Screen
en un fitxer de configuració… visca! Els tres primers punts amb l’ordre
screen
, que crea una nova finestra amb un títol i el programa donat (o un
intèrpret si no se n’indica cap). El quart amb l’ordre stuff
, que injecta una
cadena en l’entrada del programa corrent en la finestra actual. Per a anar
directament a l’última finestra (un intèrpret d’ordres) es pot indicar amb
l’ordre at
que stuff
s’execute en una finestra diferent de l’actual.
Així va néixer meinscreen
, que no és més que un script trivial i un fitxer de
configuració d’Screen, ~/.meinscreenrc
:
# Configuració per a la sessió principal d’Screen. # S’inclou la configuració de sistema o d’usuari. # source /etc/screenrc source ~/.screenrc # Es creen algunes finestres per defecte. screen -t mutt screen -t gnus # … més finestres … # Finalment, un intèrpret d’ordres (finestra activa). screen # S’inicien tasques com si s’hagueren llançat manualment. at mutt stuff "mutt -f imaps://ivan@servidor.de.correu/INBOX\012" at gnus stuff "emacs -nw -f gnus\012" # … més programes …
L’script meinscreen
només conté:
#!/bin/sh exec screen -c ~/.meinscreenrc -S mein
Només cal llançar meinscreen
en un terminal i… voilà! Una sessió d’Screen amb
tots els programes en funcionament com si hagueren estat llançats a mà,
cadascun en la seua finestra amb títol, i de cap a un intèrpret d’ordres. Per
a adjuntar aquesta sessió d’Screen des d’una sessió d’SSH només cal executar:
$ screen -dr mein
El nom original de l’script era myscreen
, però com que totes les sessions
d’Screen són igualment meues i aquesta n’és la principal, el vaig reanomenar
mainscreen
. Al final es quedà en meinscreen
com a solució de compromís. :D
Main screen turn on.