GNU/Screen: differenze tra le versioni

almost done
(yay!)
(almost done)
Riga 155: Riga 155:
Mentre per lo split verticale:
Mentre per lo split verticale:
  Ctrl-a |
  Ctrl-a |


A questo punto la regione in focus è trattata come una finestra, perché questo è lo scopo degli split: avere più finestre a vista contemporaneamente. Le scorciatoie per cambiare finestra sono le stesse ma valgono solo per quella regione, per muoversi invece tra una regione e l'altra useremo la combinazione:
A questo punto la regione in focus è trattata come una finestra, perché questo è lo scopo degli split: avere più finestre a vista contemporaneamente. Le scorciatoie per cambiare finestra sono le stesse ma valgono solo per quella regione, per muoversi invece tra una regione e l'altra useremo la combinazione:
Riga 163: Riga 164:
Da parecchio ormai esiste questo tipico confronto tra applicazioni simili per scoprire quale sia meglio o peggio, la verità è che una non sostituisce l'altra o se lo fa dipende dalle esigenze del singolo; in particolare sto parlando di "screen vs tmux" e "irssi vs weechat". Visto che sono programmi che necessitano di impegno nel capirne il funzionanemto, ciò che salta subito all'occhio in tmux e weechat è la ricchezza di feature abilitate in modo predefinito, questo non è necessariamente un pregio ma nemmeno un difetto, provateli entrambi e valutate.
Da parecchio ormai esiste questo tipico confronto tra applicazioni simili per scoprire quale sia meglio o peggio, la verità è che una non sostituisce l'altra o se lo fa dipende dalle esigenze del singolo; in particolare sto parlando di "screen vs tmux" e "irssi vs weechat". Visto che sono programmi che necessitano di impegno nel capirne il funzionanemto, ciò che salta subito all'occhio in tmux e weechat è la ricchezza di feature abilitate in modo predefinito, questo non è necessariamente un pregio ma nemmeno un difetto, provateli entrambi e valutate.


Notare che lo split prende il focus ma non crea o sceglie alcuna finestra, solo lo spazio dove contenere qualcosa.


In caso volessimo rimuovere la regione in focus useremo:
In caso volessimo rimuovere la regione in focus useremo:
Riga 227: Riga 229:
  C-a :bufferfile
  C-a :bufferfile


L'ultima riga è '''davvero importante''' perché riattiviamo il file predefinito per lo scambio <code>/tmp/screen-exchange</code>, altrimenti utilizzando successivamente <code>Ctrl-a ></code> verrà usato <code>/etc/screenrc</code> e, sebbene non avremo i permessi per scriverci, di certo non lo vogliamo; se il file fosse un altro e ne avessimo accesso in scrittura, questo verrebbe sovrascritto. Usate questo sistema con prudenza.
L'ultima riga è '''davvero importante''' perché riattiviamo il file predefinito per lo scambio <code>/tmp/screen-exchange</code>, altrimenti utilizzando successivamente <code>Ctrl-a ></code> verrà usato <code>/etc/screenrc</code> e, sebbene non avremo i permessi per scriverci, di certo non lo vogliamo; se il file fosse un altro e ne avessimo accesso in scrittura, questo verrebbe sovrascritto. Usate questo sistema con cautela.




Oltre a questo possiamo fare un dump di ciò che è contenuto nello schermo (la parte visibile del buffer) senza bisogno di scroll:
Ctrl-a h
Apparirà il messaggio "Screen image written to hardcopy.n"", dove '''n''' sarà il numero della finestra; il file è creato in PWD, il path da dove è stato avviato screen. Se l'opzione '''hardcopy_append on''' non è specificata, il file viene sovrascritto ad ogni utilizzo.




== Configurazione ==
== Configurazione ==
La configurazione avviene tramite il file <code>~/.screenrc</code> o altro percorso se specificato con l'opzione '''-c'''. <br>
Di seguito riporto il mio di esempio con i relativi commenti, come vedete sono state sfruttate combinazioni esistenti e non per rendere piacevole e veloce l'uso quotidiano.
<pre>
# utilizzando alcune applicazioni, come ad esempio Vim, otterremo nuovamente la visualizzazione di ciò che c'era prima
# come accade normalmente in un emulatore di terminale, senza questa opzione si tornerà al prompt ma Vim o chi per lui
# rimarrà nello schermo, come invece accade normalmente in una tty
altscreen on
# imposto la variabile d'ambiente TERM, necessario se si usa un terminale con 256 colori, se non specificato TERM sarà
# uguale a ''screen'' e si avranno problemi vari; d'altro canto se usato in tty causerà altri problemi, in questo caso
# uso un file di configurazione apposito
term screen-256color
# disabilito il flow control
# nella maggior parte delle occasioni l'uso del prefisso ''def'' applica un certo comando in modo globale
# controllare la manpage per i dettagli
defflow off
# gestisce i login degli utenti in ogni pseudo terminale attraverso il file /run/utmp
deflogin on
# abilito il monitoraggio di attività delle finestre
(i messaggi di attività spiegati in [http://guide.debianizzati.org/index.php?title=GNU/Screen#Scorciatoie_e_messaggi])
defmonitor on
# la quantità di righe salvate nel buffer
defscrollback 7777
# UTF-8 everywhere!
defutf8 on
# normalmente quando un processo si blocca, screen attende che questo resusciti e nel frattempo non accetta più alcun input
# pensate ad una connessione SSH che cade e il terminale non accetta più comandi, è decisamente noioso; questa opzione fa
# sì che la tal finestra venga considerata bloccata dopo un secondo e si possa continuare ad usare la sessione
defnonblock on
# il tempo di visualizzazione dei messaggi di attività è impostato a un secondo
msgwait 1
# disabilito il noioso messaggio di benvenuto in apertura
startup_message off
# disabilito quegli orribili flash in reverse color della visual bell
vbell off
# quando si usa <code>Ctrl-a h</code> appende nuovo testo al file hardcopy.n anziché sovrascriverlo
hardcopy_append on
# salvo la disposizione degli split per la sessione
layout save fugu
# se si utilizza un emulatore di terminale con falsa trasparenza, la applica alle finestre e ai programmi contenuti
# (opportunatamente configurati)
#defbce on
# e di conseguenza la variabile d'ambiente TERM adatta
#term screen-256color-bce
# blocco l'accesso a screen dopo 15 minuti di inattività, equivale a <code>Ctrl-a x</code>
# l'unico output visibile sarà
# Screen used by skizzHG <skizzhg> on jackinthebox.
# Password:
idle 900 lockscreen
# messaggio di attività personalizzato
activity "someone is squeaking in  #%n %t"
# voglio che i colori del testo nel prompt, i messaggi di attività, la selezione del testo in copy mode e la barra
# verticale dello split (quest'ultima solo per quanto riguarda il background, quindi nero) siano blu su campo nero
sorendition Bk
# l'aspetto delle barre che appaiono con uno o più split: nera, con testo blu per la finestra in focus e bianco
# per quella non in focus, testo centrato
caption splitonly "%{= kw}%47=%?%F%{= kB}%?%t"
# l'aspetto della statusbar: nera con testo blu per la finestra in focus, racchiuso tra parentesi quadre verdi,
# e foreground del terminale per le altre, ora e data
# spiegarlo è troppo complicato, la sezione STRING ESCAPES del manuale spiega tutto
# questo non significa sia comprensibile o semplice ma ci sono un sacco di esempi in rete dai quali prendere spunti
hardstatus alwayslastline "%{= kB}%{= 9}%?%-w%?%{G}[%{B}%n %t%?(%u)%?%{G}]%{d}%+w%?%?%= %{g}%c %D %d-%m-%y"
# le scorciatoie che non hanno un argomento vengono eliminate, disfiamoci di roba fastidiosa che potrebbe
# chiudere, staccare, sospendere o uccidere per sbaglio
bind \\
bind d
bind k
bind K
bind ^k
bind z
bind ^z
# voglio il focus delle regioni in senso antiorario
bind ^I focus up
# uso i tasti solitamente associati al flow control per muovermi tra le regioni
bind q focus top
bind s focus bottom
# avendo per esempio tre regioni, una grossa in basso e due affiancate in alto, con queste tre combinazioni
# posso muovermi in due sensi; con <code>Ctrl-a TAB</code> vado in quello in alto a destra, mentre con
# <code>Ctrl-a q</code> e <code>Ctrl-a s</code> mi sposto tra quello in alto a sinistra e quello in basso
# ridimensionamento delle regioni
bind + resize +3
bind - resize -3
bind = resize =
bind * resize max
bind / resize 79%
# oltre ad appendere al file, come specificato prima "hardcopy_append on", voglio salvare in un file diverso
# con '''-h''' salvo l'intero buffer invece del solo schermo
# c'è da notare che screen calcola come buffer l'intero ammontare di righe definite con "defscrollback"
# per cui se questo non è pieno si avrà un tot di spazio vuoto all'inizio
bind h hardcopy -h $HOME/Desktop/screenbuffa
# se si usa <code>Ctrl-a numero</code> per spostarsi tra le finestre, di default ce ne sono solo dieci (da 0 a 9)
# in questo modo creo un attivatore aggiuntivo, il punto, e aggiungo altre dieci finestre
# quindi con <code>Ctrl-a . 1</code> andrò alla finestra 11
bind -c xwin 0 select 10
bind -c xwin 1 select 11
bind -c xwin 2 select 12
bind -c xwin 3 select 13
bind -c xwin 4 select 14
bind -c xwin 5 select 15
bind -c xwin 6 select 16
bind -c xwin 7 select 17
bind -c xwin 8 select 18
bind -c xwin 9 select 19
bind . command -c xwin
# i programmi che uso più spesso sono associati a comode scorciatoie
# la sintassi è la stessa usabile al prompt bash, con ''screen'' dico di aprire una finestra contenente una shell
# il numero indica che voglio aprirla con quel dato ordine (questione di muscle memory :)
# ''-t'' e la parola che segue assegnano un titolo alla finestra, dove non c'è viene usato il nome del processo
bind E screen 4 mutt -F $HOME/.config/mailman/mutt/muttrc
bind H screen htop
bind I screen 3 irssi
bind M screen -t muzik 6 mplayer -slave -input file=$HOME/.mplayer/muzikfifo -shuffle -playlist $HOME/allmuzik
bind T screen -t rTorr 7 rtorrent
bind V screen 5 vim
bind W screen w3m http://it.search.yahoo.com
# automatizzo certe operazioni all'apertura di screen, consideratelo come il file di startup di un DE/WM
# apro due shell e il file manager
screen 0 bash
screen 1 bash
screen 2 mc -x
# divido lo schermo in due regioni, quella superiore prende il focus e in essa ci apro un'altra shell
split
screen -t l10n 9
# mi sposto nella regione in basso, la ridimensiono e in essa vi seleziono la finestra zero
focus bottom
resize 79%
select 0
</pre>
Dopo aver fatto modifiche al file di configurazione possiamo ricaricarlo senza chiudere la sessione:
Ctrl-a :source .screenrc
== Uso avanzato e riga di comando ==
Come si è visto all'inizio, ci sono alcune opzioni usabili da riga di comando per controllare la sessione e inviare istruzioni anche dall'esterno, sia comandi di screen sia altri programmi. Vediamo qualche esempio.
Seleziona una finestra (accetta sia numero che nome):
$ screen -X select 1
Rinumera finestra (-p accetta sia numero che nome):
~$ screen -p 9 -X number 11
Rinomina finestra:
$ screen -p 9 -X title zut
Il comando '''stuff''' invia una stringa come input e ci permette di eseguire comandi esterni.
Esegue il comando '''ls''' (^M si ottiene con <code>ctrl-v Return</code>):
$ screen -p 0 -X stuff 'ls ^M'
Alternativa (utile per script o altre situazioni in cui ''^M'' non è applicabile):
$ screen -p 0 -X stuff $'ls\n'
Il comando '''at''' esegue un comando su più finestre.
Esegue il comando '''ls''' a tutte le finestre chiamate bash:
$ screen -X at bash# stuff 'ls ^M'
Esegue il comando '''ls''' a tutte le finestre chiamate bash e alla finestra l10n:
$ screen -X eval 'at bash# stuff "ls ^M"' 'at l10n# stuff "ls ^M"'


Esegue il comando '''ls''' alle finestre zero e nove:
$ screen -X eval 'at 0# stuff "ls ^M"' 'at 9# stuff "ls ^M"'


<code></code>
Esegue il comando '''ls''' a tutte le finestre:
$ screen -X at \# stuff 'ls ^M'




== Risorse ==
* http://dotfiles.org/.screenrc
* http://aperiodic.net/screen/




271

contributi