271
contributi
Wtf (discussione | contributi) |
Nessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
== 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. | <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 | 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") | Per ricollegarsi ("riattaccarsi") alla specifica finestra di una certa sessione da cui ci si è precedentemente staccati è sufficiente digitare | ||
$ screen -r nome_sessione -p | $ screen -r nome_sessione -p nome_finestra | ||
dove <code>nome_sessione</code> è appunto il nome della nostra sessione e <code> | 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 | 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 | 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 | 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 | $ 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> | |||
$ screen -S nome_sessione -p | (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ù | Eseguire un comando generico all'interno di più finestre usando il comando '''at'''. Esempi | ||
Elencare il contenuto di una | 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 | 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 | 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 | 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 == |
contributi