it-swarm.it

GNU Guida alla sopravvivenza dello schermo

Cosa pensano le persone non solo delle cose essenziali che devi sapere sull'eccellente utility Screen ma delle cose che ritieni che valga la pena insegnare a qualcuno, un principiante, da zero?

Ho appena presentato un amico a Screen e stanno facendo fatica ad abituarsi. Quindi analogie e consigli pratici per ricordare i vincoli ecc. Sarebbero fantastici.

106
Henry B

Uso lo schermo da oltre 10 anni e probabilmente uso meno della metà delle funzionalità. Quindi non è assolutamente necessario apprendere subito tutte le sue funzionalità (e non consiglierei di provare). I miei comandi quotidiani sono:

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

Penso che sia tutto qui. A volte utilizzo le funzionalità di schermo diviso, ma certamente non quotidianamente. L'altro suggerimento è se lo schermo sembra essersi bloccato a causa di una combinazione casuale di tasti causata per sbaglio, fare sia ^ Q che ^ A ^ Q per provare a sbloccarlo.

91
Greg Hewgill

Non potevo abituarmi allo schermo fino a quando non ho trovato un modo per impostare una "barra di stato" nella parte inferiore dello schermo che mostra quale "scheda" o "schermo virtuale" sei su e quali altri ci sono. Ecco la mia configurazione:

[[email protected] ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[[email protected] ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[[email protected] ~]$
36
Roel

Ctrl+A ? - mostra la schermata di aiuto!

30
James Muscat

Se il tuo amico ha l'abitudine di premere ^A per arrivare all'inizio della riga in bash, ha delle sorprese, dato che ^A è l'associazione del tasto di comando dello schermo. Di solito finisco con una schermata congelata, probabilmente a causa di un tasto casuale che ho premuto dopo ^A :-)

In quei casi ci provo

^A s e ^A q blocca/sblocca lo scorrimento dei terminali

per sistemarlo. Per andare all'inizio di una riga all'interno dello schermo, la sequenza di tasti è ^A a

26
agnul

Puoi rimappare la chiave di escape da ctrl-A per essere un'altra chiave di tua scelta, quindi se la usi per qualcos'altro, ad es. per andare all'inizio della riga in bash, devi solo aggiungere una riga al tuo file ~/.screenrc. Per renderlo ^ b o ^ B usare:

escape ^bB

Dalla riga di comando, utilizzare le sessioni dei nomi per tenere sotto controllo più sessioni. Uso una sessione per attività, ognuna con più schede:

 screen -ls elenca le sessioni dello schermo correnti 
 schermo -S <nome> crea una nuova sessione schermo denominata nome 
 schermo -r <nome> si collega alle sessioni schermo denominate 

Quando si utilizza lo schermo sono necessari solo alcuni comandi:

 ^ A c crea una nuova Shell 
 ^ A [0-9] switch Shell 
 ^ A k uccidi l'attuale Shell 
 ^ A d disconnetti dallo schermo 
 ^ A? mostra l'aiuto 

Un eccellente riferimento rapido può essere trovato qui . Vale la pena aggiungere segnalibri.

12
Andrew Johnson

Alcuni consigli per chi ha familiarità con lo schermo, ma che tendono a non ricordare le cose che leggono nella pagina man:

  • Modificare il nome di una finestra dello schermo è molto semplice: ctrl+Ashift+A.
  • Hai perso l'ultimo messaggio dallo schermo? ctrl+actrl+m lo mostrerò di nuovo per te.
  • Se vuoi eseguire qualcosa (come ad esempio un file in coda) e fare in modo che lo schermo ti dica quando c'è un cambiamento, usa ctrl+Ashift+m nella finestra di destinazione. Attenzione: ti farà sapere se nulla cambia.
  • Vuoi selezionare direttamente la finestra 15? Prova questi nel tuo .screenrc file:
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

Questo assegna ctrl+ashift+0 through 9 per windows da 10 a 19.

8
staticsan

ctrl+a è una chiave speciale.

ctrl+ad - [d] etach, lascia i programmi (irssi?) in background, torna a casa.

ctrl+ac [c] attiva una nuova finestra ctrl+a0-9 passare da una finestra all'altra per numero

screen -r - torna alla sessione staccata

Ciò copre il 90% dei casi d'uso. Non provare a mostrare tutte le funzionalità contemporaneamente.

6
tadeusz

Ctrl+A è il comando di base

Ctrl+AN = vai alla schermata *** N *** ext

Ctrl+AP = vai allo schermo *** P *** revious

Ctrl+AC = *** C *** attiva una nuova schermata

Ctrl+AD = *** D *** attacca lo schermo

6
Niko Gunadi

http://www.debian-administration.org/articles/34

L'ho scritto un paio d'anni fa, ma è comunque una buona introduzione che ottiene molti feedback positivi.

6
user14038

"Devo" aggiungere questo: aggiungi

bind s

alla tua .screenrc, se Tu - come me - utilizzavi finestre divise, come C-a S divide la finestra effettiva, ma C-a s lo blocca. Quindi ho appena disabilitato il collegamento di blocco.

6
Zsolt Botykai

Non proprio essenziale non solo legato allo schermo, ma abilitando 256 colori nel mio terminale, GNU Screen e Vim migliorato la mia esperienza sullo schermo alla grande (soprattutto da quando codice in Vim circa 8 ore al giorno - ci sono alcuni fantastici colori per gli occhi).

4
jkramer

C'è qualche lavoro interessante che viene fatto per ottenere una buona configurazione dello schermo gnu che si verifica per impostazione predefinita nella prossima versione di Ubuntu Server, che include l'uso della parte inferiore dello schermo per mostrare tutte le finestre e altre utili dettagli della macchina (come # aggiornamenti disponibili e se la macchina necessita di un riavvio). Probabilmente puoi prendere il loro .screenrc e personalizzalo in base alle tue esigenze.

I comandi più utili che ho nel mio .screenrc sono i seguenti

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

In questo modo so sempre quali finestre sono aperte e anche cosa sta funzionando al momento.

3
David Dean

La prima modifica che faccio a .screenrc è quella di cambiare il comando escape. Non diversamente da molti di voi, non mi piace la sequenza Ctrl-A predefinita a causa della sua interferenza con quella funzionalità fondamentale in quasi tutti gli altri contesti. Nel mio file .screenrc, aggiungo:

scappare `e

Questo è backtick-e.

Questo mi permette di usare il backtick come tasto di escape (ad es. Per creare una nuova schermata, premo backtick-c, staccare backtick-d, backtick-? È di aiuto, backtick-backtick è la schermata precedente, ecc.). L'unico modo in cui interferisce (e ho dovuto abbandonare l'abitudine) è usare il backtick sulla riga di comando per acquisire l'output di esecuzione o incollare tutto ciò che contiene un backtick. Per il primo, ho modificato la mia abitudine usando la convenzione BASH $ (comando). Per quest'ultimo, di solito apro un altro xterm o lo stacco dallo schermo, quindi incolla il contenuto contenente il backtick. Infine, se desidero inserire un backtick letterale, premo semplicemente backtick-e.

3
Gary Chambers

Non ricordo da chi l'ho rubato (qualcuno su dotfile.org). L'ho modificato leggermente per ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Quindi ho impostato i seguenti alias bash:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Apre una nuova schermata per gli alias precedenti e, se utilizza ssh, rinomina il titolo della schermata con il nome host ssh.

Saluti z0mbix

3
user203445

Mi piace impostare una sessione schermo con nomi descrittivi per le finestre. ^ a A ti permetterà di dare un nome alla finestra corrente e ^ a "ti darà un elenco delle tue finestre. Al termine, stacca lo schermo con ^ a d e ricollegalo con lo schermo -R

2
innaM

Qualcuno ha pubblicato una domanda simile a questa su Server Fault .

2
Vagnerr

Mi piace usare screen -d -RR per creare/allegare automaticamente a una determinata schermata. Ho creato funzioni bash per semplificare ...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

Creano un alias per /usr/bin/screen -d -RR -S $name $command. Ad esempio, mi piace usare irssi in una sessione schermo, quindi nel mio .bashrc (sotto quelle funzioni), ho:

mkscreen irc /usr/bin/irssi

Quindi posso semplicemente digitare irc in un terminale per entrare in irssi. Se lo schermo 'irc' non esiste ancora, viene creato e/usr/bin/irssi viene eseguito da esso (che si collega automaticamente, ovviamente). Se è già in esecuzione, mi basta ricollegarlo, staccando forzatamente qualsiasi altra istanza che è già collegata ad esso. È abbastanza carino.

Un altro esempio è la creazione di alias di schermate temporanee per perldocs mentre li incontro:

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

L'opzione -a (deve essere il primo argomento) aggiunge l'alias dello schermo a .bashrc (quindi è persistente) e -d lo rimuove (questi possono essere potenzialmente distruttivi, quindi utilizzare a proprio rischio). xD

Aggiungere:

Un altro bash-ism che trovo conveniente quando lavoro molto con lo schermo:

alias sls='/usr/bin/screen -ls'

In questo modo puoi elencare le tue schermate con un numero molto minore di tasti. Non so se sls si scontra con eventuali utility esistenti, ma al momento non funzionava sul mio sistema, quindi ci sono andato.

1
bambams

^ A è un ottimo carattere speciale per le persone UNIX, ma se usi lo schermo per parlare con OpenVMS, non essere in grado di ^ A ti renderà calvo prematuramente. In VMS, se modifichi un comando DCL prima dell'esecuzione dal buffer della cronologia, la modalità Inserisci è disattivata (deve essere per alcuni motivi non entrerò qui) .. per attivarlo in modo da non eccedere- digita il tuo comando anziché spaziare, devi premere ^ A

0
user2146463

^ A A torna alla schermata da cui sei appena arrivato.

0
dummy