2010-03-19 16 views
18

corro sessioni di schermo multiple ciascuna creati con 'schermo -S nome' e mi piacerebbe essere in grado di visualizzare nella barra di stato il nome ho usato per creare la sessione schermata corrente.Come si visualizza il nome "sessione" o "nome sock" corrente di una sessione schermata nella barra di stato?

Tuttavia, non riesco a farlo. Qualche idea?

+5

Vedere questo [Super domanda User] (http://superuser.com/questions/212392/how-to-include-screens-session-name-in-hardstatus). Anche [qui] (http://old.nabble.com/Re:-Session-name-in-status-line-p22456825.html). –

risposta

13

screen ha due barre di stato, la barra dei sottotitoli e la barra di stato hard, entrambi utilizzano gli escape di stringa specificati nella sezione "STRING ESCAPES" di man screen. Sfortunatamente, non vi è alcuna fuga che si riferisca direttamente al nome della sessione.

Tuttavia, v'è un hack che vi permetterà di fare questo.

screen passa il nome della sessione alla shell utilizzando la variabile $STY. Quando il tentativo shell per impostare il titolo della finestra (usando one of these methods) screen coglie quel tentativo, e lo memorizza in qualcosa che chiama confusamente "la hardstatus finestra", che ha una via di fuga che è possibile utilizzare: %h.

Quindi, se si hanno o la didascalia o la barra hardstatus impostato per includere %h e hanno il tentativo shell per impostare il titolo della finestra a $STY, poi il %h verrà sostituito con il nome della sessione quando viene visualizzata la barra.

+0

Molto vicino ... Funziona alla grande per la sessione iniziale, tuttavia, una volta all'interno di una sessione di schermo, se si esegue l'ssh su un altro host, STY non sarà più impostato. Esiste comunque la possibilità di conservare tali informazioni o forse di fare in modo che lo schermo legga solo il valore una volta all'inizio della sessione? –

+1

@Neg_EV: beh, secondo la sezione ENVIRONMENT di 'man ssh', se lo sshd dell'host remoto lo consente (di default non lo è), puoi impostare vars di ambiente (come' STY') nel tuo '.ssh/file environment' (quindi nel proprio locale '.bashrc', solo' cat STY = $ STY> .ssh/environment') e quando si esegue l'ssh sulla macchina remota che imposterà le vars di ambiente appropriate. – rampion

+0

@Neg_EV: se non si desidera (o non si può) modificare le impostazioni 'sshd' del telecomando, si potrebbe avere il' .bashrc' locale di eseguire il dump del valore STY su un file, alias ssh per prima cosa scp quel file all'host remoto, e avere il tuo remoto '.bashrc' fonte quel file se STY non è impostato (in questo modo lo stesso .bashrc può essere usato in remoto e localmente). – rampion

30

Il modo più semplice per visualizzare il nome sessione è

C-a : 
    sessionname 

(senza specificare un nome dopo sessionname)

Vedere la sezione "Customization" in man screen

+0

Potrebbe chiarire questo un po '? È un comando o parametri autonomo? – DBX12

+1

Digita le seguenti tre sequenze di tasti/comandi uno dopo l'altro: 'Ctrl-A' quindi': 'quindi' sessionname' (Ctrl-A dovrebbe essere sostituito con qualsiasi cosa tu abbia impostato per il controllo del controllo dello schermo, se lo hai cambiato dal valore predefinito di Ctrl-A.) Verrà visualizzato un risultato simile a: 'Questa sessione è denominata '31438.Perlocks'. –

0

Come max_cantor dice nel SuperUser Answer, un carattere di escape per il nome della sessione deve essere aggiunto alla versione 4.1.0. It looks like la funzione di escape character è stata aggiunta con una patch relativamente piccola nel 2008. Quindi, se ti senti coraggioso, puoi crearti una copia della versione di sviluppo 4.1.0 e provarla.

Proverò questo con la versione di sviluppo quando avrò la possibilità.

4

Nelle attuali versioni di screen, c'è una bandiera %S per la linea hardstatus.

MWE (.screenrc):

hardstatus on 
hardstatus alwayslastline 
hardstatus string "%S" 

Questo mostra il nome della sessione senza l'ID (come ${STY#*.}).

(Stessa risposta alle altre domande here e here per completezza).

0

Se non altro funziona (come per me), come soluzione alternativa è possibile creare una finestra con il numero 0 e il titolo impostato al vostro screen name:

screen -S myscreen 
C^a :title "myscreen" 
Problemi correlati