2010-03-19 4 views
18

Puedo ejecutar varias sesiones de cada pantalla creados con 'pantalla -S nombre' y me gustaría ser capaz de mostrar en la barra de estado el nombre he usado para crear la sesión actual de la pantalla.¿Cómo se muestra el nombre actual de "sesión" o "nombre de usuario" de una sesión de pantalla en la barra de estado?

Sin embargo, parece que no puedo lograr esto. ¿Algunas ideas?

+5

Ver este [pregunta Super User] (http://superuser.com/questions/212392/how-to-include-screens-session-name-in-hardstatus). También [aquí] (http://old.nabble.com/Re:-Session-name-in-status-line-p22456825.html). –

Respuesta

13

screen tiene dos barras de estado, la barra de título y la barra de estado, que utilizan las secuencias de escape especificadas en la sección "STRING ESCAPES" de man screen. Lamentablemente, no hay escapatoria que se refiera directamente al nombre de la sesión.

Sin embargo, hay un truco que le permitirá hacer esto.

screen pasa el nombre de la sesión al shell utilizando la variable $STY. Cuando el shell intenta establecer el título de la ventana (usando one of these methods) screen captura ese intento y lo almacena en algo que confusamente llama "la ventana hardstatus", que tiene un escape que puede usar: %h.

Así que si usted tiene ya sea el título o la barra hardstatus establecido para incluir %h y tienen el intento de shell para establecer el título de la ventana de $STY, entonces el %h será reemplazado con el nombre de sesión cuando se muestra la barra.

+0

Muy cerca ... Funciona muy bien para la sesión inicial; sin embargo, una vez que estoy dentro de una sesión de pantalla, si cambio a otro host, STY ya no se establecerá. ¿Hay alguna forma de preservar esa información o quizás hacer que la pantalla solo lea el valor una vez al inicio de la sesión? –

+1

@Neg_EV: Bueno, de acuerdo con la sección ENVIRONMENT de 'man ssh', si el sshd del host remoto lo permite (por defecto no lo es), puede establecer vars de entorno (como' STY') en su '.ssh/local el archivo del entorno (por lo tanto, en su '.bashrc' local, simplemente' cat STY = $ STY> .ssh/environment') y cuando envía ssh al equipo remoto que configurará los valores de entorno apropiados. – rampion

+0

@Neg_EV: si no desea (o no puede) cambiar la configuración 'sshd' del control remoto, puede hacer que su' .bashrc' local descargue el valor STY a un archivo, alias ssh para primero scp ese archivo al host remoto, y haga que su fuente '.bashrc' remota procese ese archivo si STY no está configurado (de ese modo, el mismo .bashrc se puede usar de forma remota y local). – rampion

30

La forma más sencilla de mostrar la sessionname es

C-a : 
    sessionname 

(sin especificar un nombre después de sessionname)

Vea la sección de "personalización" en man screen

+0

¿Podría aclarar esto un poco? ¿Es este un comando o parámetros independientes? – DBX12

+1

Escriba las siguientes tres combinaciones de teclas/comandos una detrás de la otra: 'Ctrl-A' luego': 'luego' sessionname' (Ctrl-A debe sustituirse por lo que haya configurado para la pulsación de la pantalla, si la ha cambiado desde el predeterminado de Ctrl-A.) Verá una salida similar a: 'Esta sesión se llama '31438.Perlrocks''. –

0

Como max_cantor dice en el SuperUser Answer, se debe agregar un carácter de escape para el nombre de la sesión a la versión 4.1.0. It looks like la función de carácter de escape se agregó con un parche relativamente pequeño en 2008. Por lo tanto, si se siente valiente, puede obtener una copia de la versión de desarrollo 4.1.0 y probarla.

Voy a probar esto con la versión de desarrollo cuando tenga la oportunidad.

4

En las versiones actuales de screen, hay una bandera %S para la línea hardstatus.

EPM (.screenrc):

hardstatus on 
hardstatus alwayslastline 
hardstatus string "%S" 

Esto muestra el nombre de la sesión sin el ID (como ${STY#*.}).

(la misma respuesta a otras preguntas here y here para completar).

0

Si nada de esto funciona (como para mí), como solución alternativa, puede crear una ventana con el número 0 y establecer el título a su nombre de pantalla:

screen -S myscreen 
C^a :title "myscreen" 
Cuestiones relacionadas