GNU/Screen
Screen es una herramienta que facilita en gran medida la gestión frente a la línea de comandos, ya sea sobre una consola tty o bien sobre un terminal virtual (vt) ¿Que puede hacer? GNU/Screen hace uso de su capacidad de multiplexación para independizar una sesión de Shell del programa que la representa; me refiero a que por ejemplo puedo comenzar trabajando en una consola y desenganchar esa sesión para reengancharla sobre un vt, e incluso hacer esto último en un ordenador remoto mediante SSH. Esta aplicación también me posibilita recorrer todo el buffer de Shell aunque el terminal no cuente con Scrooll. También puedo copiar y pegar texto del buffer en la misma o en otras terminales sin necesidad de usar el puntero de mouse. Por otro lado, puedo fraccionar una consola tty o un terminal virtual en varias partes semejantes a las pestañas de Konsole, Gnome Terminal y mrxvt. Finalmente, Screen también cuenta con algunas funciones interesantes, permite por ejemplo dividir la pantalla en varias partes para mejorar la interacción, registrar toda la entrada y salida en un fichero, procesar y devolver por pantalla información valiosa para el mantenimiento del orden en el trabajo, y mucho más.
Esta utilidad que hoy presento hace especial mella en los ordenadores de quienes administran servidores de forma local o remota, pero en verdad les digo que cualquiera que guste de usar la consola para gestionar su sistema puede verse muy favorecido por las virtudes de GNU/Screen.
Detallar como funciona GNU/Screen de modo que se entienda es bastante engorroso si se apela al convencional método de estructuración y descripción de las distintas funciones. Así que lo voy a hacer de un forma más amigable y de cara a la práctica; es obvio quienes me leen en ivlabs.org, informaticavirtual.us y crackergt.net tienen la oportunidad de preguntar sobre cualquier aspecto que no haya quedado claro. Además, no voy a describir su instalación porque este programa esta disponible como paquete (binario o porte) para cualquier sistema tipo Unix que se respete.
Sobre esta guía
Por razones de claridad, en el texto uso una notación distinta a la que existe en las páginas man de screen. A saber:
“Control-a†: Significa que ‘Control’ y ‘a’ son teclas que deben oprimirse juntas. Es importante notar que “a†debe ser minúscula.
“Control-a + a†: Se mantiene pulsado ‘Control’ y ‘a’, después se sueltan y se presiona “aâ€.
“Control-a + Câ€: Aquí ‘C’ debe escribirse en mayúscula.
“Control-a + [“: No alcanza con usar la tecla que contiene el paréntesis recto, sino que es preciso llamar al caracter de la misma manera que se haría (“Altgr-[“) sobre un procesador de texto.
“<palabra>â€: Aquí “palabra†debe substituirse por otra cosa, como ser un nombre o un número.
“Control-a + '+' “: El caracter entre comillas simples (+) es un literal y por tanto se incluye en la secuencia.
“Control-a + \“ “: Significa que la retrobarra (\) se obvia y el literal es el caracter que le sigue, en este caso las comillas dobles (exceptuando a las que engloban la combinación) integran la orden.
Control TAB ENTER Esc: Hago referencia a las teclas que llevan ese nombre.
Estas son ejemplos de equivalencias entre mi notación (izquierda) y la que se halla en las páginas man:
“Control-a†------------------ C-a
“Control-a +a†-------------- C-a a
“Control-a + Control-iâ€---- C-a C-i
“Control-a TABâ€------------ C-a tab
“Control-a + '+' “------------ C-a +
“Control-a + \“ “ ------------ C-a “
Iniciando la aplicación, Attached y Detached.
Para arrancar Screen basta entrar “screen†(sin comillas) sobre cualquier prompt de Shell. De no haber nada escrito en el buffer no se provocará ningún cambio apreciable, salvo quizá por un rápido refresco de la pantalla. Una vez iniciado el programa se puede trabajar normalmente como si se tratara de cualquier tty o vt pero, por supuesto, existen mas opciones.
Si se teclea “Contrl-a +d†se consigue pasar a segundo plano (desenganchar) la sesión que se inició al arrancar screen, cosa que también ocurre al cerrarse la terminal sobre la que se comenzó la sesión mencionada. Para retomar está última, es decir, para engancharla nuevamente, alcanza con tipear “screen -r†en cualquier consola o terminal, Ahora bien, si en lugar de una existen varias sesiones, “screen -r†devolverá una lista como esta:
ruben@MyBox ~ $ screen -r
There are several suitable screens on:
14138.pts-3.MyBox (Detached)
14253.pts-3.MyBox (Detached)
14273.pts-3.MyBox (Detached)
Type "screen [-d] -r [pid.]tty.host” to resume one of them.
Ante esta eventualidad se procede escogiendo el pid asociado a la sesión que interesa pasar a primer plano. Por ejemplo:
ruben@MyBox ~ $ screen -r 14253
Luego “screen -r †saca lo siguiente:
ruben@MyBox ~ $ screen -r
There are several suitable screens on:
14138.pts-3.MyBox (Detached)
14253.pts-3.MyBox (Attached)
14273.pts-3.MyBox (Detached)
Type “screen [-d] -r [pid.]tty.host” to resume one of them.
La misma información también puede desplegarse con “screen -listâ€, de hecho este comando es más apropiado para la tarea.
ruben@MyBox ~ $ screen -list
There are screens on:
14138.pts-3.MyBox (Detached)
14253.pts-3.MyBox (Attached)
14273.pts-3.MyBox (Detached)
3 Sockets in /var/run/screen/S-ruben.
En principio, no se puede ganar el acceso a una sesión que esta activa (Attached) sino es mediante la terminal que la contiene. Empero, es factible provocar un detached sobre un pid desde cualquier lugar con solo hacer “screen -d <pid>â€, por ejemplo:
ruben@MyBox ~ $ screen -d 14253
[14253 .pts-3.MyBox detached.]
Tabs.
Una cosa muy útil es la creación de Tab’s, las cuales como antes dije se pueden comparar a las pestañas que manejan ciertos emuladores de Shell. Para crear una nueva Tab se teclea “Contrl-a +câ€, ello también posicionará Screen sobre esta nueva Tab. Si una vez creado el Tab se presiona “Contrl-a +w†se puede ver una lista como la que sigue:
0$ bash 1$ bash
Dicha lista representa las tabs abiertas, siendo la del numero más alto la de creación mas reciente.
“Contrl-a +p†(prev) permite moverse hacia las tabs de número mas pequeño mientras que “Contrl-a +n†(next) avanza en número creciente. Si next o prev acaban por recorrer la lista de tabs continúan por el extremo opuesto. Para cerrar un tab solo hay que navegar hasta él, digitar exit y pulsar ENTER. “Control-a + k†también destruye la pestaña activa.
Screen ofrece muchas maneras de moverse entre los tabs, si se pulsa “Control-a + \“ “ se logra obtener una interfaz que lista los tabs; sobre ella y con las teclas direccionales se escoge un item de la lista, mientras que con ENTER se ingresa en la selección. Una manera alternativa de saltar a un tab es con “Control-a + <número de tab>â€.

Aveces son tantas las pestañas que es fácil olvidarse qué contiene cada una, en ese sentido renombrar aquellas resulta en la forma más práctica de ayudar a la memoria: presionar “Control-a +A†y reescribir el nombre seguido de ENTER es todo lo que se necesita para tal cometido.

Dividir la pantalla.
Pulsando “Control-a + S†(la S debe ser mayúscula) se consigue dividir la pantalla en dos, tres, o mas partes dependiendo de las veces que se repita el proceso. A los efectos de moverse hacia las nuevas secciones de la pantalla se usa la secuencia “Control-a + Control-i†o también “Control-a + TABâ€. Ello provocará un salto entre un segmento de la pantalla y el que está inmediatamente por debajo, siendo que una vez recorrida toda la pantalla se reinicia el trayecto. Las secciones aparecen inactivas ya que no tienen adjudicada ninguna de las Tab’s, para activarlas es suficiente con usar cualquiera de los métodos descriptos para moverse entre pestañas.
Otro aspecto interesante es la posibilidad de redimensionar un área en concreto, “Control-a + ‘+’ “ y “Control-a + ‘-’ “ respectivamente agrandan y reducen la región. Por último, “Control-a +X†cierra el segmento que se está usando, en tanto que “Control-a + Q†quita todos menos aquel.
![]() |
![]() |
![]() |
Moverse por el buffer, copiar y pegar.
Al oprimir “Control-a [“ se observa como el cursor “salta†hacia el borde inferior del Shell. Ahora es posible desplazarse, valiéndose de las teclas direcccionales, por todo el buffer de output. Hecho esto, se puede seleccionar texto al apretar ENTER y mover el cursor (se vé un área remarcada) de manera de abarcar todo lo que se quiere copiar; para finalizar la selección y copiarla se usa nuevamente ENTER, cosa que también provoca que el cursor escape y se posicione sobre el prompt de Shell. Con el fin de pegar lo que se copió se requiere de una secuencia similar a la ya vista para “saltarâ€: “Control-a +]â€.
La tecla Esc permite escapar del recorrido sin necesidad de copiar nada.
Resumiendo esto último:
Control-a +[ -------- Recorrer la salida mediante las direccionales
+ ENTER ---- Seleccionar texto
+ ENTER ----- Copiar la selección y finalizar
+ Control +] —- Pegar
Esc —- Finalizar
Salvar un registro de la actividad.
“Contrl-a + H†sirve para que se genere un log, cuya ruta se muestra por pantalla, que guarda tanto la entrada como la salida de la Shell. A efectos de finalizar el registro se usa también “Control-a +H†.
Bloquear y añadir password a una sesión.
Una forma de adjudicar una contraseña para proteger una sesión es ingresar un comando interno del programa: password. Para ejecutar este tipo de ordenes primero se necesita de la secuencia “Control-a + :â€, acto seguido se escribe la sentencia (password en este caso) y se pulsa ENTER. El comando password lanza un prompt que solicita contraseña y confirmación.
“Control-a + Contrl-x†sirve para trabar una sesión de manera que no puede accederse a ella sin ingresar la clave que le fue asociada.
Bloqueo de la entrada.
Esto solo lo anoto pues puede ocurrir que alguien quiera dividir la pantalla (“Control-a + Sâ€) y por accidente utilice la “s†minúscula (“Control-a + sâ€) , provocando que screen deje de responder al teclado, como si se hubiese trabado. Esta situación puede remedarse mediante “Control-a + qâ€.
Cerrar una sesión.
Cuando se matan todos los tabs la sesión acaba y se muestra este mensaje:
[screen is terminating]
Ficheros de configuración.
El archivo que contiene la configuración glogal de screen es /etc/screenrc, mientras que uno con mayor prioridad es ~/.screenrc. Así, si quiero tener una configuración propia para mi usuario debo editar ~/.screenrc.
Arrancando programas al inicio
En el fichero de configuración se esgrime screen -r <nombre del programa> <comando> para que <comando> se lance al inicio. Por ejemplo, para lanzar emacs cada vez que ejecuto screen debo hacer:
ruben@MyBox ~ $ cat >> ~/.screenrc
screen -t “emacs” emacs -nw
######Presionar Control+D para acabar#########
Bien, con todo lo antes dicho solo he rascado la superficie de GNU/Screen, pues tiene una gran gama de funciones y opciones de configuración que lo hacen idóneo para mejorar la experiencia frente a cualquier tarea con la línea de comandos. Quien quiera buscar más información puede hacerlo en las páginas man.
ruben@MyBox ~ $ man screen
Saludos.






wm.mnox[at]gmail.com
Suscribirse a mis feeds
marzo 28th, 2008 at 10:20 pm
Gnu/screen…
[...]Screen es una herramienta que facilita en gran medida la gestión frente a la línea de comandos, ya sea sobre una consola tty o bien sobre un terminal virtual (vt) ¿Que puede hacer? GNU/Screen hace uso de su capacidad de multiplexación para ind…
septiembre 30th, 2008 at 12:33 pm
Con esto ya casi que soy todo un freaky!!!
junio 17th, 2009 at 4:27 am
[...] Guia de manejo [...]
julio 18th, 2010 at 11:11 am
[...] Otra forma sería usar el programa screen para conectarnos al arduino. Screen es un emulador de terminal que nos permite tener multiples terminales en una sola, y la posibilidad de cerrar la terminal y retomarla más tarde. Para más información sigue este enlace. [...]
enero 27th, 2011 at 5:54 pm
[...] mas información consulta el siguiente enlace: http://www.ivlabs.org/home/?p=902 Categorías: [...]