jueves, 21 de febrero de 2008

SCREEN (ejecuta distintas sesiones en un mismo terminal)


Tomado de la revista begins numero 02 http://www.linuxchillan.cl/

¿QUÉ ES "SCREEN"?

Screen es un programa que nos permite ejecutar distintas sesiones (distintos programas, o distintas aplicaciones) dentro del mismo terminal de consola, y así no saturar nuestro sistema con pantallas del tipo xterm, por ejemplo. Esto es realmente útil para usuarios de GNU/Linux que gustan de usar el modo comando en su sistema, o bien para aquellos que acceden a su sistema por vía ssh, y quieren ejecutar a través de una sola sesión, varias aplicaciones al mismo tiempo. Screen resulta muy práctico cuando queremos dejar una tarea ejecutándose, que deseamos recuperar posteriormente desde otro terminal.


¿CÓMO INSTALAR EL PROGRAMA?

El programa Screen está bajo licencia GNU. Para obtener las fuentes sólo tenemos que bajarlas del servidor de ftp dedicado a este servicio, en nuestro caso ftp://ftp.gnu.org/gnu/screen/

En sistemas GNU/Linux de tipo Debian podemos usar la aplicación apt para instalarlo, de la siguiente manera.


#aptitude install screen


USO BÁSICO

Lo primero para habilitar el uso de screen en nuestro terminal es ejecutarlo en nuestra consola.


$ screen


Tras la ejecución del comando no dará un mensaje de bienvenida que nos confirmará que estamos usando Screen.

Luego, al pulsar Enter o Space nos encontramos con la entrada del bash de nuevo, y nada parece haber cambiado.


A partir de ahora nos encontramos en condicion de introducir las distintas opciones de screen pulsando simultáneamente las teclas Control y a (Ctrl+a), lo cual indica que lo siguiente a introducir es una orden para el programa screen, y no para la consola en sí. De este modo:

Ctrl+a(c) significa: Ctrl+a pulsamos ambas teclas, y después dejamos el teclado libre, la tecla entre paréntesis (c) en nuestro caso significa simplemente la tecla o combinación de teclas a pulsar en el teclado. En nuestra consola ejecutaremos:

Ctrl+a(c) Crear una sesión nueva

Veremos que nos creará una sesión nueva, con salida del prompt, y la anterior sesión nos ha desaparecido. En este momento tenemos dos sesiones (la original y la que hemos creado nueva), que podemos listar con las siguiente orden.

Ctrl+a(") listar las sessiones

Nos saldrán dos sesiones con muy poca información, pero que nos indican que tenemos en una consola únicamente las dos sesiones trabajando. Podemos elegir cualquiera de ellas mediante las flechas del teclado y seleccionamos la sesión que necesitamos con enter. Para cambiar de una sesión a otra sin ver este listado ejecutaremos.

Ctrl+a(n) ir a la sesión siguiente

Ctrl+a(p) ir a la sesión anterior

Podemos crear sucesivamente sesiones nuevas con Ctrl+a(c), y seguir listándolas con Ctrl+a("). Llegará un momento (dependiendo de nuestra adicción por la consola), que tengamos varias sesiones en un mismo terminal. Es conveniente antes de llegar a este momento que le demos un nombre a cada una de las sesiones...

Ctrl+a(A) asigna un nombre a la sesión actual que se está ejecutando.

Por ejemplo, ahora estamos ejecutando la sesión 0, podemos asignarle el nombre "invitado user". Al hacer un nuevo listado de las sesiones con Ctrl+a(") nos encontramos un listado de sesiones, con nombres invitado user y bash1 respectivamente.

Con esto hemos conseguido tener en una misma consola dos usuarios distintos. Renombrar las sesiones puede parece trivial, pero es algo esencial si hacemos muchas sesiones, para hacernos una idea de qué hace cada opción y conmutar entre ellas fácilmente.



OPCIONES AVANZADAS: COPIAR / PEGAR

Hay algo realmente útil de las sesiones múltiples, y es la capacidad de copiar/pegar (incluso entre distintas máquinas si entramos por control remoto a conexiones en red). Para ello sólo tenemos que ejecutar Ctrl+a([) que habilita el comienzo del modo "copiar" y permite el movimiento libre por la pantalla, comienza a copiar con la barra espaciadora, y terminará de copiar con enter, almacenando la copia en el buffer. Ctrl+a(]) simplemente pega, tras dejar posicionarse libremente por la pantalla y pulsar intro. En la mayoría de terminales nos permitirá pegar con el famoso CTRL+V


DEJAR UNA SESION HUÉRFANA

Para muchos realmente la gran propiedad de screen reside en su capacidad de deja sesiones huérfanas, y poder recuperarlas a gusto después. Por ejemplo, supongamos que tenemos las siguientes sesiones tras un breve list: Una sesión
0 llamada user, una sesión 1 llamada root compilation y una tercera 3 llamada user irssi. En un momento dado nos interesa dejar estas tres sesiones funcionando independientemente, y seguir usando la consola sin ellas. Podemos desvincular las sesiones que screen tiene en ese momento con la orden Ctrl+a(d).

Ctrl+a(d)
desvincula la sesión actual de screen.

Al activar esta opción en la sesión activa, podemos incluso salir de nuestra terminal o sesión de usuario completamente, y la sesión que hemos desvinculado seguirá activa hasta que la rescatemos posteriormente. Si posteriormente hacemos un login como el usuario que activó el programa screen, y ejecutamos la orden screen ­ls, veremos cuántas y cuáles son las sesiones huérfanas que tenemos ejecutando. Por ejemplo:

$ screen
There is a screen on:
2328.pts­1.hostname (Detached)
1 Socket in /var/run/screen/S­user

Las ventajas de esta opción son muchas, pero entre ellas destacamos la seguridad de que las sesiones se ejecutarán independientemente de si estemos en el sistema. Un fallo o cuelgue del terminal no nos impedirá posteriormente „recoger“ la sesión y continuar con el trabajo que estábamos haciendo. Por otro lado, permite que utilicemos distintas máquinas con un login en el mismo servidor para (por ejemplo, si compilamos el kernel de una máquina por sesión remota, podemos empezar la compilación en el trabajo, y terminarla cuando lleguemos a casa al recuperar la sesión). Una opción quizás más lúdica es la de dejar nuestro usuario de irc funcionando desde casa, y „recogerlo“ desde otra estación de trabajo para seguir sin necesidad de iniciar el cliente de irc cada vez.

Es importante que el usuario que inició la sesión screen sea el que la visualice y la rescate posteriormente. Un usuario sin los permisos pertinentes no podrá ver qué sesión de screen ha dejado huérfana otro usuario, y naturalmente, tampoco podrá rescatarla. Rescatar una sesión es bastante fácil, basta ejecutar el comando screen ­r con el número de la sesión que queremos tomar.

Así por ejemplo:

$ screen ­r 2328


OPCIONES AVANZADAS: UTILIZANDO DOS SESIONES EN LA MISMA
PANTALLA

Podemos visualizar varias sesiones simultáneamente en una pantalla de la siguiente manera: supongamos primero que tenemos dos sesiones (una con el editor vi, y otra con el cliente de irc para modo consola irssi). Si queremos trabajarsimultáneamente en ellas dentro de la misma pantalla, podemos dividir la pantalla de la sesión en uso con la siguiente orden:

Ctrl+a(S) dividimos la sesion actual de screen.

Nos aparecerá la sesión actual arriba, y luego una sesión nueva abajo, a la que debemos movernos con Ctrl+a(Ctr+­i) que indica moverse a la otra sesión de la misma pantalla. Una vez en las sesiones correspondientes (esta vez, divididas en la pantalla), podemos llamar a otras sesiones, crear nuevas, ver listados, dividir mas la pantalla, etc... Si queremos volver a modo normal (una sesión en pantalla entera) sólo tenemos que escribir Ctrl+a(Q) en la sesión que queramos tener completa.

RESUMEN:
Por último, incluimos un resumen de las funciones que hemos explicado aquí:

USO BASICO DESVINCULAR Y RESCATAR SESIONES

Ctrl+a(c) Crear sesión Ctrl+a(d) desvincular
Ctrl+a(?) muestra ayuda en la pantalla Ctrl+a(r) rescatar la última sesión (o screen ­r)
Ctrl+a(n) ir a la siguiente sesión
Ctrl+a(p) ir a la anterior sesión DIVIDIR SESIONES
Ctrl+a(a) ir a la última sesión visitada Ctrl+a(S) divide la sesión actual
Ctrl+a(") muestra una lista de sesiones en uso Ctrl+a(Ctrl+i) cambia a la sesión contigua de la misma pantalla
Ctrl+a(#) ir a la sesión de número #
Ctrl+a(Q) deja la sesión actual como pantalla completa
Ctrl+a(')
similar a (") pero se ejecuta con número de sesión y enter
Ctrl+a(A) asigna un nombre a la sesión actual

COPIAR Y PEGAR

Ctrl+a([) entrar en modo copiar comienza con spacebar termina con enter
Ctrl+a(]) pegar aunque la mayoría de las veces podemos usar Ctrl+v

CONSIDERACIONES FINALES

Screen es una poderosa herramienta, un ejemplo más de profesionalidad, eficacia y servicio del software libre bajo licencia GNU. Hemos descrito aquí la particularidad que tiene el comando screen de ejecutar varias sesiones en una única consola. Además cada sesión puede nombrarse y accederse mediante opciones del teclado. Las opciones copiar y pegar están disponibles, y quizás lo más llamativo, la posibilidad de desvincular sesiones para dejarlas funcionando independientemente y volver a recogerlas posteriormente para finalizarlas, o para modificarlas desde otros entornos de trabajo.

Finalmente hemos de ser conscientes de una particularidad de screen. Aunque screen trabaja en modo consola, todos los comandos y aplicacione que puedan ser enviados por esta son válidos para ejecutarse en screen. La gran ventaja que tiene esto es que los cuelgues de terminal, o fallos en la consola, no tienen por qué afectar a las sesiones de X que hemos ejecutado bajo consola ejecutada con screen. Estos quedarían como sesiones de screen en modo húerfano, que podemos recuperar. Si ejecutamos firefox bajo screen en nuestra consola, el programa firefox seguirá viviendo tanto lo siga haciendo screen, pese a que hayamos salido de la consola que le ha dado vida.

Un último detalle antes de terminar. Precisamente, la aplicación screen se termina con el comando exit, lo cual nos envía una notificación al prompt de
que hemos terminado la sesión screen.