GNU/Screen: differenze tra le versioni

nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
{{Stub}}
== Introduzione ==
== Introduzione ==
<code>GNU/Screen</code> è un multiplatore di terminale che esegue tanti "schermi" separati su un unico terminale, per questa ragione è paragonabile all'uso delle aree di lavoro (workspace) di un ambiente grafico e quindi possiamo considerarlo in un certo qual modo un Window Manager per applicazioni testuali e ncurses.<BR>
<code>GNU/Screen</code> è un multiplatore di terminale che esegue tanti "schermi" separati su un unico terminale, per questa ragione è paragonabile all'uso delle aree di lavoro (workspace) di un ambiente grafico e quindi possiamo considerarlo in un certo qual modo un Window Manager per applicazioni testuali e ncurses.
 
Risulta dunque lampante la sua utilità in sistemi privi di ambiente grafico, dove non è appunto possibile avviare N finestre di terminale per eseguire N differenti applicativi/comandi.
Risulta dunque lampante la sua utilità in sistemi privi di ambiente grafico, dove non è appunto possibile avviare N finestre di terminale per eseguire N differenti applicativi/comandi.


Riga 72: Riga 72:
seguito da uno spazio e il nuovo numero.
seguito da uno spazio e il nuovo numero.


Per chiudere un singolo schermo è possibile digitare
Per chiudere una singola finestra è possibile digitare
<pre>$ exit</pre>
<pre>$ exit</pre>
oppure '''solo''' in caso di problemi quali congelamento dello schermo o altro è possibile forzarne la chiusura (e uccidere il processo) con:
oppure '''solo''' in caso di problemi quali congelamento dello schermo o altro è possibile forzarne la chiusura (e uccidere il processo) con:
Riga 106: Riga 106:
  Ctrl-a d
  Ctrl-a d


Per ricollegarsi ("riattaccarsi") allo specifico schermo di una certa sessione da cui ci si è precedentemente staccati è sufficiente digitare  
Per ricollegarsi ("riattaccarsi") alla specifica finestra di una certa sessione da cui ci si è precedentemente staccati è sufficiente digitare  
  $ screen -r nome_sessione -p nome_schermo
  $ screen -r nome_sessione -p nome_finestra
dove <code>nome_sessione</code> è appunto il nome della nostra sessione e <code>nome_schermo</code> quello dello schermo desiderato (al posto del nome è anche possibile utilizzare il numero dello schermo, ricordando a tal proposito che la numerazione parte dal valore 0). Qualora sia presente un unica sessione ed un unico schermo è possibile omettere sia <code>nome_sessione</code> sia <code>-p nome_schermo</code>. In caso contrario l'omissione di tali parametri innesca la stampa a video delle sessioni disponibili, per esempio:
dove <code>nome_sessione</code> è appunto il nome della nostra sessione e <code>nome_finestra</code> quello della finestra desiderata (al posto del nome è anche possibile utilizzare il numero della finestra, ricordando a tal proposito che la numerazione parte dal valore 0). Qualora sia presente un unica sessione ed un'unica finestra è possibile omettere sia <code>nome_sessione</code> sia <code>-p nome_finestra</code>. In caso contrario l'omissione di tali parametri innesca la stampa a video delle sessioni disponibili, per esempio:
<pre>
<pre>
$ screen -r
$ screen -r
Riga 121: Riga 121:
<pre>numero.pts-numero.hostname</pre>
<pre>numero.pts-numero.hostname</pre>
L'ultimo nome è frutto invece della scelta dell'utente, almeno per quanto riguarda la parte successiva al punto.
L'ultimo nome è frutto invece della scelta dell'utente, almeno per quanto riguarda la parte successiva al punto.
Si noti che l'omissione del parametro <code>-p</code>, ovvero del nome schermo, viene interpretato da GNU/Screen come una richiesta di collegarsi all'ultimo schermo utilizzato.
Si noti che l'omissione del parametro <code>-p</code>, ovvero del nome finestra, viene interpretato da GNU/Screen come una richiesta di collegarsi all'ultima finestra utilizzata.
Supponendo dunque di voler richiamare la prima sessione è possibile digitare uno tra i seguenti tre comandi:
Supponendo dunque di voler richiamare la prima sessione è possibile digitare uno tra i seguenti tre comandi:
  $ screen -r 4322.pts-17.jackinthebox
  $ screen -r 4322.pts-17.jackinthebox
Riga 234: Riga 234:
=== Modalità riga di Comando ===
=== Modalità riga di Comando ===
Come inizialmente anticipato è possibile sia inviare comandi sia eseguire applicativi in ciascuno dei vari schermi di <code>GNU/Screen</code> precedentemente creati senza per questo essere obbligati a riportare in primo piano ciascuno di essi.
Come inizialmente anticipato è possibile sia inviare comandi sia eseguire applicativi in ciascuno dei vari schermi di <code>GNU/Screen</code> precedentemente creati senza per questo essere obbligati a riportare in primo piano ciascuno di essi.
Si noti che terminata l'esecuzione del comando ci si ritroverà ancora davanti al proprio terminale "base" oppure in uno schermo <code>GNU/Screen</code> appartenente ad una differente sessione.
Si noti che terminata l'esecuzione del comando ci si ritroverà ancora davanti al proprio terminale "base" oppure in una finestra <code>GNU/Screen</code> appartenente ad una differente sessione.
<br>
<br>


Riga 249: Riga 249:
  $ screen -p 9 -X title zut
  $ screen -p 9 -X title zut


Eseguire un comando generico all'interno di uno schermo usando  il comando '''stuff''', il qualche concretamente invia una stringa come input. Esempi:
Eseguire un comando generico all'interno di una finestra usando  il comando '''stuff''', il quale concretamente invia una stringa come input. Esempi:


Elencare il contenuto di una cartella tramite '''ls''' (^M si ottiene premendo <code>ctrl-v</code> e subito dopo <code>Invio</code> o <code>Return</code> che dir si voglia):
Elencare il contenuto di una cartella tramite '''ls''' (^M si ottiene premendo <code>ctrl-v</code> e subito dopo <code>Invio</code> o <code>Return</code> che dir si voglia):
  $ screen -S nome_sessione -p nome_schermo -X stuff 'ls ^M'
  $ screen -S nome_sessione -p nome_finestra -X stuff 'ls ^M'
(si veda il paragrafo ''Detach e Sessioni'' per il significato dei parametri <code>nome_sessione</code> e <code>nome_schermo</code>). Alternativamente (utile per situazioni in cui ''^M'' non è applicabile):
 
  $ screen -S nome_sessione -p nome_schermo -X stuff $'ls\n'
(si veda il paragrafo ''Detach e Sessioni'' per il significato dei parametri <code>nome_sessione</code> e <code>nome_finestra</code>). Alternativamente (utile per situazioni in cui ''^M'' non è applicabile):
  $ screen -S nome_sessione -p nome_finestra -X stuff $'ls\n'
 
Nel caso in cui GNU/Screen debba essere richiamato all'interno di script o per l'utilizzo in congiunzione con CRON è necessario usare <code>eval</code>; per esempio:
Nel caso in cui GNU/Screen debba essere richiamato all'interno di script o per l'utilizzo in congiunzione con CRON è necessario usare <code>eval</code>; per esempio:
<pre>
<pre>
screen -X eval 'stuff comando" parametri \015"'
screen -X eval 'stuff comando "parametri \015"'
screen -X eval 'stuff ./mio_script.sh" parametri_script \015"'
screen -X eval 'stuff ./mio_script.sh "parametri_script \015"'
</pre>
</pre>


Eseguire un comando generico all'interno di più schermi usando  il comando '''at'''. Esempi
Eseguire un comando generico all'interno di più finestre usando  il comando '''at'''. Esempi


Elencare il contenuto di una cartella tramite '''ls''' in tutte le finestre chiamate bash:
Elencare il contenuto di una directory tramite '''ls''' in tutte le finestre chiamate bash:
  $ screen -X at bash# stuff 'ls ^M'
  $ screen -X at bash# stuff 'ls ^M'
Elencare il contenuto di una cartella tramite '''ls''' in tutte le finestre chiamate bash e alla finestra l10n:
Elencare il contenuto di una directory tramite '''ls''' in tutte le finestre chiamate bash e alla finestra l10n:
  $ screen -X eval 'at bash# stuff "ls ^M"' 'at l10n# stuff "ls ^M"'
  $ screen -X eval 'at bash# stuff "ls ^M"' 'at l10n# stuff "ls ^M"'


Elencare il contenuto di una cartella tramite il comando '''ls''' nelle finestre zero e nove:
Elencare il contenuto di una directory tramite il comando '''ls''' nelle finestre zero e nove:
  $ screen -X eval 'at 0# stuff "ls ^M"' 'at 9# stuff "ls ^M"'
  $ screen -X eval 'at 0# stuff "ls ^M"' 'at 9# stuff "ls ^M"'


Elencare il contenuto di una cartella tramite '''ls''' in tutte le finestre:
Elencare il contenuto di una directory tramite '''ls''' in tutte le finestre:
  $ screen -X at \# stuff 'ls ^M'
  $ screen -X at \# stuff 'ls ^M'
Possiamo inviare una sequenza ad un programma contenuto in una finestra (^M si ottiene premendo <code>ctrl-v</code> e subito dopo <code>Invio</code> o <code>Return</code> che dir si voglia):
$ screen -p 7 -X stuff ^Q
nella finestra 7 ho solitamente rtorrent, gli verrà quindi inviato <code>Ctrl-q</code> che chiuderà il programma in modo pulito, utilizzabile eventualmente in coppia con il comando <code>sleep</code> per programmarne la chiusura.


== Configurazione ==
== Configurazione ==
271

contributi