# [Guía] - Iniciación a GNU Screen

## i92guboj

Buenas a tod@s.

Como alguien me comentó por ahí que le resultaría interesante tener una explicación sencilla de como empezar a usar GNU Screen y poder ver las capacidades reales que tiene, me he decidido a entretenerme un rato esta tarde y dejar aquí una pequeña explicación. Por si a alguien más le sirve.

Los que ya usen Screen no necesitan que le explique sus bondades. Esta guía es para los demás, que aún no lo conocen, al menos de forma directa.

¿Que puede hacer Screen?

Screen es una de las piezas de software más impresionantes que uso todos los días, algo sin lo que no puedes vivir una vez que lo has comenzado a usar. Sus funcionalidades son inmensas y llevaría mucho tiempo enumerarlas todas, pero puedo poner una pequeña lista con mis favoritas.

· Permite hacer el shell independiente del medio de representación usado.

· Permite "desenganchar" el shell de un lugar y llevarlo a otro. Por ejemplo, de X a consola, de un terminal a otro, o incluso de un ordenador a otro con ssh o similar.

· Permite el uso del teclado para casi todo. Por ejemplo, cosas como volver hacia atrás y copiar/pegar con el teclado. 

· Permite multiplexar varios shells en un solo terminal o vt. Esta funcionalidad permite emular lo que en terminales como konsole o mrxvt se consigue con el uso de tabs o pestañas.

· Además, también se puede dividir una de estas "pestañas" en varias franjas de forma horizontal, a la manera de emacs.

· Permite insertar una barra de estado en tus shells.

· Por supuesto, los bindings son totalmente configurables.

· Permite bloquearse, con o sin password.

· Se puede configurar un juego de "tabs" para que se abran al arranque con el programa que queramos en cada una.

· Otros que probablemente me dejo en el tintero ahora mismo.

 

1.- Preparación

Como todo en Gentoo, la cosa empieza con un emerge.

```

# emerge -av screen

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] app-misc/screen-4.0.3  USE="pam -debug -multiuser -nethack (-selinux)" 821 kB 

Total: 1 package (1 reinstall), Size of downloads: 821 kB

```

Como veis, es pequeñito. Si se quiere usar la característica de bloqueo con password de usuario, necesitamos el use flag "pam". Para añadirlo podemos editar /etc/portage/package.use y añadir la línea correspondiente, si no existe ya:

```

app-misc/screen pam

```

Luego lo emergemos y estamos listos para empezar a probar cosas.

2.- Primeros pasos: pestañas

Para comenzar a usar screen, solo necesitamos abrir un terminal (o un vt, si no tenemos X cargado), y luego simplemente lanzar screen en él. Xterm o cualquier otro valen para empezar.

A primera vista no veremos gran cosa. Al cargar screen, el terminal parpadeará ligeramente, y luego parecerá volver a la vida como si no hubiera pasado absolutamente nada. Sin embargo, ahora estamos dentro de screen, aunque no veamos nada distinto por ahora. Para comprobarlo, podemos teclear "exit". Al pulsar intro veremos que nos informa de la salida de screen, en lugar de cerrar el terminal, como sería lo esperado.

```

$ screen

[screen is terminating]

```

Como veis, el último comando que aparece no es "exit" (que es lo último que hemos escrito), sino "screen". Que es lo último que ejecutamos en el terminal real. El "exit" ha desaparecido junto con el terminal virtual creado por screen, al cerrarse éste. Ahora estamos de nuevo en xterm. 

Tras esta prueba vamos a volver a screen y ver algo de lo que puede hacer. Volvemos a teclear "screen" y ya estamos dentro. Una de las características más usadas en un terminal quizás sean las pestañas. Screen puede hacer algo similar. Para comprobarlo, podemos abrir una aplicación en nuestro terminal. Por ejemplo:

```

$ tail -f /var/log/messages

```

A partir de ahora tail nos mostrará el contenido que vaya llegando a dicho archivo. Ahora vamos a abrir otra pestaña. Screen usa atajos tipo emacs. Por defecto, lo que en emacs es la tecla meta, en screen es C-a (control+a). Es decir, todos los bindings comienzan por C-a. Para crear una nueva "pestaña", pulsamos:

```
C-a c (create, crear). 
```

La salida del comando tail parecerá desaparecer. En realidad sigue ahí, solo que no la vemos. Ahora tenemos dos "pestañas". Podemos movernos de una a otra usando estos bindings:

```

C-a n (next, siguiente)

C-a p (previous, anterior)

```

La estructura es circular, es decir, si pulsamos dos veces C-a n volveremos a la misma pestaña.

3.- La barra de estado

Tener elementos visuales de referencia puede resultar de los más conveniente. Ahora mismo, con dos tabs no nos preocupa mucho, pero cuando se tienen muchos puede ser difícil mantener la referencia de memoria. Screen permite el uso de una barra de estado para mejorar la apariencia visual, y para mantener una referencia más clara de donde estamos en cada momento.

Para activar esto tenemos que crear un fichero de configuración para screen. Como se puede intuir, el predeterminado si no se indica otro será ~/.screenrc. Así que editamos este fichero (tendremos que crearlo si no lo hemos hecho antes), y dentro incluiremos algo como esto:

```

hardstatus alwayslastline "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

```

Esta es mi barra de estado personalizada, muestra los tabs disponibles sobre un fondo azul, junto con la fecha y la hora a la derecha, y marca el tab activo con fondo amarillo. Todo está perfectamente detallado en la página man, ahí se puede ver el significado de todo eso que he escrito en japonés  :Razz:  Por eso no voy a repetirlo aquí. Si hay dudas si puedo aclararlas más adelante, tan solo preguntad.

Para que esto entre en juego, tenemos que cerrar screen y volverlo a abrir. Para cerrar screen, tendremos que cerrar todos los tabs. En dicho momento veremos de nuevo el mensaje correspondiente al cierre de screen y así sabremos que era el último. Entonces volvermos a lanzar screen, y veremos algo como esto:

http://jesgue.homelinux.org/screen1.jpg

Esto comienza a parecer algo más interesante. Ahora podemos probar a abrir más tabs y movernos entre ellas libremente para ver como va la cosa. Eso lo dejo como ejercicio, ya expliqué antes como hacerlo.

4.- Bindings/Atajos

Por supuesto, se pueden definir atajos de teclado para todo, y redefinir los ya existentes. Algunos encontrarán que los atajos tipo emacs son algo engorrosos (otros los encuentran simplemente adorables, para gustos: colores).

En muchos clones de kuake, encontramos que una combinación típica para moverse de un tab a otro es el uso de control + las flechas de dirección hacia los lados. Según el terminal que usemos, la interpretación de las teclas puede variar bastante, estos 6 bindings son similares dos a dos, solo que están repetidos con ligeras variaciones para funcionar en urxvt, xterm y algunos emuladores de terminal más. Para hacer esto editamos nuestro .screenrc de nuevo, y añadimos:

```

bindkey "^[Oc" next

bindkey "^[Od" prev

bindkey "^[[C" next

bindkey "^[[D" prev

bindkey "^[[1;5C" next

bindkey "^[[1;5D" prev

```

Tras esto, guardamos y reiniciamos screen, como antes. Ahora nos podremos mover usando control+left/right.

5.- Autoinicio

A veces es interesante tener programa que se autoinicien. Incluso podemos darle el nombre que queramos a cada tab.

Probad esto en vuestro screenrc:

```

screen -t "bash" bash

screen -t "bash" bash

screen -t "dmesg" tail -f /var/log/messages

screen -t "www" tail -f /var/log/lighttpd/access.log

screen -t "top" top 

screen -t "music" mocp

screen -t "mc" mc

```

Por supuesto, si usáis apache en lugar de lighttpd, o no usáis moc o mc, sois libres de cambiar dichas líneas por otras. Lo que va entre comillas es el nombre del tab, lo que saldrá en el tab. El resto es el comando a cargar en dicho tab. Con esto deberiamos obtener algo así:

http://jesgue.homelinux.org/screen2.jpg

6.- Desenganchando y re-enganchando.

Otra cosa bastante molesta ocurre cuando tenemos un terminal con muchos tabs y lo cerramos sin recordar que en otro tab teniamos un emerge u otra cosa importante. En screen esas cosas no pasan. Tenemos un terminal con screen cargado y varios tabs. Ahora lo vamos a cerrar, pulsando en la X de la ventanita (según el WM usado). 

Ahora abrimos otro terminal vacío, y tecleamos:

```

$ screen -list

There are screens on:

   31584.pts-10.jesgue   (Detached)

```

Esto nos dice que hay una sesión de screen en modo detached, lo cual significa que no está conectada a ningún dispositivo de salida ahora mismo. En otras palabras, hay una sesión de screen (junto con todo su contenido) que está flotando en el limbo. Pero en cualquier momento podemos rescatarla.

```

$ screen -r

```

Y se cargará de nuevo dicha sesión exáctamente tal y como estuviera cuando pulsamos en la X del terminal que la contenía.

También puede pasar que tengamos más de una:

```

$ screen -list

There are screens on:

   31584.pts-10.jesgue   (Detached)

   31662.pts-10.jesgue   (Detached)

   7726.pts-0.jesgue   (Attached)

3 Sockets in /var/run/screen/S-i92guboj.

```

Es este caso podríamos hacer "screen -r  31584.pts-10.jesgue" para re-enganchar una sesión en concreto.  :Wink: 

Lo mejor de todo es que esto lo podemos hacer también en consola. Si cerramos X y screen estaba cargado en un terminal, podremos recuperarlo de forma análoga en la consola. Por supuesto, si había algún programa de X cargado en uno de los tabs será asesinado. No hay nada que se pueda hacer contra eso  :Razz: 

Leyendo la página man podemos ver que hay varios modos de re-enganche. Algunos de ellos más agresivos. Por ejemplo, -r solo re-engancha sesiones que estén "dettached", pero si usamos -D -RR screen puede coger una sesión previa, desengancharla de donde esté y engancharla en el dispositivo que estemos usando. Esto es útil si por ejemplo nos logeamos vía ssh desde la oficina y nos hemos olvidado de desenganchar la sesión antes de salir de casa.

7.- Partir screen en áreas.

Si pulsamos C-a S (S mayúscula, no minúscula!!!), partimos (split) el terminal en dos áreas. Podemos pasar de una a otra con C-a TAB. Para cambiar el tamaño de la zona actual usamos C-a +/-. Finalmente, para cerrar un área, usamox C-a X (de nuevo, nótese la mayúscula).

Si por error pulsamos C-a s (minúscula), lo que ocurrirá es que se bloqueará el tab, y parecerá dejar de responder a todo. Podemos solucionarlo pulsando C-a q.

8.- Recuperar la habilidad del terminal para cambiar su título.

Hoy día casi todas las distros traen los terminales configurados para que muestren el el título de la ventana cosas como el directorio actual. Screen puede eliminar esta habilidad. Si ése es el caso y queremos recuperarla podemos cambiar la línea de hardstatus por esta otra:

```

caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

```

Y añadir:

```

termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

```

Con todo el tutotial, el fichero screenrc quedaría así:

```

screen -t "bash" bash

screen -t "bash" bash

screen -t "dmesg" tail -f /var/log/messages

screen -t "www" tail -f /var/log/lighttpd/access.log

screen -t "top" top

screen -t "music" mocp

screen -t "mc" mc

bindkey "^[Oc" next

bindkey "^[Od" prev

bindkey "^[[C" next

bindkey "^[[D" prev

bindkey "^[[1;5C" next

bindkey "^[[1;5D" prev

caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

```

9.- Algunas cosas sencillas pero interesantes.

C-a '

Pregunta un nombre o número de tab para cambiar al mismo.

C-a "

Presenta una lista de tabs donde podemos escoger el que queramos.

C-a 0

....

C-a 9

No creo que esta necesite explicación.  :Razz: 

C-a A

Cambia nombre del tab actual.

C-a k

Destruye el tab

C-a Q

Borra todas las regiones excepto la actual (esto no afecta al tab que contengan, que seguirá intacto). Solo quita las divisiones.

Saludos  :Smile: 

Actualizado dom, 2 septiembre 2007, 16:29Last edited by i92guboj on Sun Sep 02, 2007 2:29 pm; edited 3 times in total

----------

## achaw

 *i92guboj wrote:*   

> Como alguien me comentó por ahí que le resultaría interesante tener una explicación sencilla de como empezar a usar GNU Screen ...

 

Yo fui el culpable  :Smile: . Mas que interesante, empiezo a "jugar".

Saludos

----------

## i92guboj

 *achaw wrote:*   

>  *i92guboj wrote:*   Como alguien me comentó por ahí que le resultaría interesante tener una explicación sencilla de como empezar a usar GNU Screen ... 
> 
> Yo fui el culpable . Mas que interesante, empiezo a "jugar".
> 
> Saludos

 

Saludos, espero que te sea útil. 

Solo puntualizar una cosa que me dejé atras. Es posible usar screen en cualquier emulador de terminal, o incluso en un vt. Yo personalmente recomiendo urxvt porque tiene el mejor soporte utf8. Screen trabaja bien con utf8 si lo tienes activo. También se puede forzar al inicio con -U, y también en la config con una línea como esta:

```

defutf8 on

```

Si se activa el soporte utf8 en xterm también debería funcionar bien, supongo.

----------

## Zagloj

Gracias por la guía, eso sí, tuve un susto con los esquemas de color que uso para el moc pero todo solucionado  :Razz: 

 La verdad es más útil de lo que pensaba, no conocía esa función de detach, que por cierto hay un programita sólo para eso.

 Eso sí, tengo una duda, ¿cuántas sesiones de screen caben por vt o consola virtual?, me refiero a que si se pueden rescatar varias screen o es una por cada login, por así decirlo.

 Un saludo y gracias de nuevo  :Wink: 

Pd Me queda pendiente leer a fondo el man para ver cómo se divide la pantalla (split)

----------

## i92guboj

 *Zagloj wrote:*   

> Gracias por la guía, eso sí, tuve un susto con los esquemas de color que uso para el moc pero todo solucionado 
> 
>  La verdad es más útil de lo que pensaba, no conocía esa función de detach, que por cierto hay un programita sólo para eso.
> 
>  Eso sí, tengo una duda, ¿cuántas sesiones de screen caben por vt o consola virtual?, me refiero a que si se pueden rescatar varias screen o es una por cada login, por así decirlo.
> ...

 

No se exactamente a qué te refieres. Puedes tener abiertos tantos screens como quieras, no conozco límite teórico. Si lo usas en vt puedes usar C-a d para desenganchar el actual, y luego puedes re-enganchar ese mismo o cualquier otro que tengas activo.

 *Quote:*   

> 
> 
> Pd Me queda pendiente leer a fondo el man para ver cómo se divide la pantalla (split)

 

En dos minutos añado eso al final de la guía.  :Wink: 

EDIT: Hecho.

----------

## Zagloj

 *i92guboj wrote:*   

> 
> 
> No se exactamente a qué te refieres. Puedes tener abiertos tantos screens como quieras, no conozco límite teórico. Si lo usas en vt puedes usar C-a d para desenganchar el actual, y luego puedes re-enganchar ese mismo o cualquier otro que tengas activo.
> 
> 

 

 Tras pensarlo un rato creo que sería como fusionar dos sesiones de screen, veamos, estoy en la tty1 o en una vt, con mi sesión de screen y quiero traerme otra sin parar los procesos que ahí tengo (pej. estoy con nmap y links y quiero traerme una sesión donde tengo unos buffers de emacs y emerge), parece un poco rebuscado pero igual se puede hacer.

 *Quote:*   

> EDIT: Hecho.

 

 ¡Gracias! Ese C-a S sí que es puro emacs  :Laughing: 

 Saludos  :Wink: 

----------

## Cereza

Deberían poner esta guía en el post recopilatorio.

----------

## kropotkin

 :Very Happy:   genial. yo solo usaba screen de la forma más básica, para dejar aplicaciones corriendo en un pc que tengo de router y recuperaras po ssh, pero por cada aplicación iniciaba una nueva sesión de screen   :Embarassed: 

muchas gracias por la guía, aclaras muchas dudas   :Very Happy: 

----------

## i92guboj

 *Zagloj wrote:*   

>  *i92guboj wrote:*   
> 
> No se exactamente a qué te refieres. Puedes tener abiertos tantos screens como quieras, no conozco límite teórico. Si lo usas en vt puedes usar C-a d para desenganchar el actual, y luego puedes re-enganchar ese mismo o cualquier otro que tengas activo.
> 
>  
> ...

 

Hasta donde yo se (y no se si el 50% de lo que se puede hacer con screen) eso no es posible, porque cada sesión de screen es un proceso separado y no existen dichos mecanismos. 

Si se que es posible anidar sesiones de screen. Es decir, correr un screen dentro de un tab en otro screen. En dicho caso, por ejemplo, para mandar un comando al screen2 dentro del screen1, tendriamos que hacer cosas como C-a a n. Sin embargo jamás lo he usado. En ese sentido, igual que es posible iniciar un screen anidado en otro, también es posible anidar con -r uno que ya exista, pero como digo, no tengo experiencia en el tema.

----------

## Inodoro_Pereyra

Jesús Guerrero presidente!!   :Very Happy: 

Muchas gracias.

----------

## Niltsiar

Por si a alguien le interesa, existe algo llamado screenie que permite simplificar el uso de screen, aunque con ello supongo que se perderá parte de la versatilidad aquí expuesta. Es una forma rápida y sencilla de utilizar screen que, según mi experiencia, para un uso básico es más que suficiente.

```

eix screenie

* app-misc/screenie

     Available versions:  1.30.0

     Installed versions:  1.30.0

     Homepage:            http://pubwww.fhzh.ch/~mgloor/screenie.html

     Description:         Screenie is a small and lightweight GNU screen(1) frontend that is designed to be a session handler that simplifies the process of administrating detached jobs by providing an interactive menu.

```

----------

## Zagloj

Gracias i92guboj, la verdad anidar se acerca más a lo que tenía en mente que mi explicación, a ver si lo puedo probar entre hoy y mañana.

 Saludos  :Wink: 

----------

## i92guboj

 *Niltsiar wrote:*   

> Por si a alguien le interesa, existe algo llamado screenie que permite simplificar el uso de screen, aunque con ello supongo que se perderá parte de la versatilidad aquí expuesta. Es una forma rápida y sencilla de utilizar screen que, según mi experiencia, para un uso básico es más que suficiente.
> 
> ```
> 
> eix screenie
> ...

 

Screenie es solo un menú que muestra las sesiones activas de screen, de forma que pulsando numeritos puedes abrir una u otra. Es útil si sueles tener varias sesiones abiertas porque puedes des/re-engancharlas y luego desde el menú escoges otra. En realidad es un simple atajo.

Con screen tendrías que hacer C-a d para desengancharla, screen -list para ver las que hay, y screen -r <session> para escoger otra. Con screenie solo necesitas hacer C-a d y luego escoger otra en el menú. Un poco de trabajo si ahorra.  :Wink: 

----------

## kropotkin

cuando uno trabaja en una terminal emulada, por ejemplo xterm, konsole, gnome-terminal el nombre de la ventana se cambia por el de la aplicación que esta corriendo, por ejemplo si desde konsole estoy compilando foo, la ventana de konsole pasa a llamarse "emerge foo - terminal nºx"

cuando uno lanza comandos desde screen esto no ocurre. ¿de que forma se puede hacer que eso ocurra?

Saludos.

----------

## i92guboj

 *kropotkin wrote:*   

> cuando uno trabaja en una terminal emulada, por ejemplo xterm, konsole, gnome-terminal el nombre de la ventana se cambia por el de la aplicación que esta corriendo, por ejemplo si desde konsole estoy compilando foo, la ventana de konsole pasa a llamarse "emerge foo - terminal nºx"
> 
> cuando uno lanza comandos desde screen esto no ocurre. ¿de que forma se puede hacer que eso ocurra?
> 
> Saludos.

 

Pues nunca me ha interesado mucho el tema, quizás porque muchas veces uso ventanas sin barra de título jeje. Pero en un vistazo rápido, creo que si que se puede. Por ejemplo, cambiando la línea de hardstatus por esta otra:

```

caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

```

Y añadiendo:

```

termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

```

Con todo el tutotial, el fichero screenrc quedaría así:

```

screen -t "bash" bash

screen -t "bash" bash

screen -t "dmesg" tail -f /var/log/messages

screen -t "www" tail -f /var/log/lighttpd/access.log

screen -t "top" top

screen -t "music" mocp

screen -t "mc" mc

bindkey "^[Oc" next

bindkey "^[Od" prev

bindkey "^[[C" next

bindkey "^[[D" prev

bindkey "^[[1;5C" next

bindkey "^[[1;5D" prev

caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

```

Con eso, al cambiar de directorio se refleja en la barra de título de urxvt (no he probado más terminales, porque es el único que tengo instalado) y tampoco he probado nada más avanzado.

----------

## Zagloj

Una pregunta, cuando divides una región, no me aparece un prompt de login de mi usuario y no puedo escribir comandos ni nada ¿es normal?.

 Gracias de antemano por el tiempo  :Wink: 

----------

## kropotkin

Funciono perfecto

Muchísimas Gracias  :Very Happy: 

----------

## i92guboj

 *Zagloj wrote:*   

> Una pregunta, cuando divides una región, no me aparece un prompt de login de mi usuario y no puedo escribir comandos ni nada ¿es normal?.
> 
>  Gracias de antemano por el tiempo 

 

Mmm, no se exactamente a qué te refieres.

Un detalle que no menciono (y al menos a mí al principio de desconcertó algo) es el hecho de que, si bien puedes dividir el terminal en tantas áreas como quieras, también es cierto que todas ellas comparten los mismos tabs o buffers.

Por ejemplo, imaginemos que tu tienes un screen cargado en urxvt con dos buffers. En uno tienes htop y en el otro mc. Imagina que estás en el tab de htop. Si lo partes con C-a S, screen se divide en dos partes. En la parte de arriba queda el área primigenia, con htop, en la de abajo se abre otra nueva, que aún no tiene asignado nada (de ahí que no puedas escribir en ella, porque ni siquiera contiene una sesión de bash).

El foco, por defecto, queda en el área antigua. Para cambiar a la nueva simplemente hacemos C-a TAB, una vez en ella, podemos asignar el contenido de uno de los tabs a dicha nueva área con tan solo movernos hacia adelante o hacia atrás en la serie, por ejemplo, con C-a p, C-a n o el binding que hayamos definido a tal efecto.

Es decir, que hagas las divisiones que hagas, todas comparten la misma sesión de screen. Antes de que lo preguntes te digo que no se si es posible asignar sesiones distintas a cada área. Sinceramente, lo dudo, porque las áreas en sí se parten desde dentro de la sesión. Desde luego sería un lujo tener más configurabilidad en ese respecto, pero no me quejo.  :Smile: 

----------

## i92guboj

Por si a alguien le interesa.

Hasta ahora no se podían hacer splits verticales en screen. En la versión de portage, la última oficial, tampoco se puede (aunque es cierto que a lo largo de la vida de screen han existido varios parches para hacer eso, aunque ninguno de ellos con la calidad suficiente).

Sin embargo en el cvs es posible hacerlo. Algunos por ahí ya sabreis que mantengo el ebuild cvs de fvwm. Hace poco dicho ebuild ha sido añadido al overlay de live-ebuilds, junto con otro ebuild de rxvt-unicode-live que también mantengo yo. Hoy me ha picado el gusanillo con la cosa de screen y también he hecho uno para screen-live. Aún me falta pulirlo un poco, y además tengo que solicitar el acceso al svn para subirlo, o bien pedir que lo hagan por mí. He tardado un poco porque además he tenido que rehacer tres o cuatro parches de screen que no iban bien con el cvs actual.

Pero ya está andando, y el resultado es este:

http://jesgue.homelinux.org/screen-live.jpg

Como veis, ya es posible disfrutar de divisiones verticales, no solo horizontales, y se pueden combinar ambas a gusto del consumidor. Mientras subo esto al repositorio de live-ebuilds, aquí hay un tarball para los impacientes. Recordad, tendréis que desinstalar screen para emerger screen-live. Si hay algún problema, comentadlo por aquí e intentaré arreglarlo.

http://jesgue.homelinux.org/other-files/screen-live.tar.bz2

Saludos.

Ops, casi lo olvido, para crear un split vertical podeis usar C-a |  (símbolo de pipe o tubería). Por lo demás, la navegación es igual. Aún no se como se cambia el tamano de las secciones verticales, ya investigaré mañana  :Razz: 

PD. Mañana actualizaré la guía con todo lo que ha ido saliendo para que no quede en el olvido.

----------

## gringo

 *Quote:*   

> Por si a alguien le interesa

 

a mi mucho al menos , instalao y funcionando, muchas gracias  :Smile: 

Una pregunta, sabes como hacer para lanzar las verticales desde el screenrc ? Hay un nuevo "split-vert" y "focus-right" p.ej. ?

gracias y saluetes !

----------

## Zagloj

 *i92guboj wrote:*   

> 
> 
> El foco, por defecto, queda en el área antigua. Para cambiar a la nueva simplemente hacemos C-a TAB, una vez en ella, podemos asignar el contenido de uno de los tabs a dicha nueva área con tan solo movernos hacia adelante o hacia atrás en la serie, por ejemplo, con C-a p, C-a n o el binding que hayamos definido a tal efecto.

 

 ¡Era eso!, gracias de nuevo  :Razz: 

----------

## Coghan

Reconozco que había oído (leído más bien) sobre screen, pero nunca me dio por usarlo, después de seguir tu guía, me he dado cuenta de que realmente esto me faltaba. Ya me gustaba mucho trabajar en línea de comandos, por la potencia que tenía en mis manos, pero ahora, seguro que  Fernando Alonso lo tendrá más difícil para ganar el mundial de F1, ahora llega la potencia de i92guboj con  su nuevo juguetito screen.

Ahora sí que no hay quien te gane.

¡Gracias Maestro!

----------

## i92guboj

 *gringo wrote:*   

>  *Quote:*   Por si a alguien le interesa 
> 
> a mi mucho al menos , instalao y funcionando, muchas gracias 
> 
> Una pregunta, sabes como hacer para lanzar las verticales desde el screenrc ? Hay un nuevo "split-vert" y "focus-right" p.ej. ?
> ...

 

Buenas,

Lo digo en el último post al final jeje, casi me lo dejo atrás. Para hacer un split vertical dentro del área actual, simplemente usa C-a |

Para cambiar C-a TAB tal y como en el otro caso. En sucesivas pulsaciones del binding irá pasando de ún área a otra. Todos estos bindings son configurables si no te gustan. Tal y como hice en el post primero con C-a n y C-a p.

----------

## gringo

 *Quote:*   

> Lo digo en el último post al final jeje, casi me lo dejo atrás. Para hacer un split vertical dentro del área actual, simplemente usa C-a | 

 

yo pregunto si hay alguna manera de hacerlo ya con el screenrc, tales como "split" y "focus down", para que el terminal aparezca ya partido. 

Algo en plan :

select foo

split

focus down

select bar

tal y como se puede hacer en horizontal vaya.

saluetes

----------

## i92guboj

 *gringo wrote:*   

>  *Quote:*   Lo digo en el último post al final jeje, casi me lo dejo atrás. Para hacer un split vertical dentro del área actual, simplemente usa C-a |  
> 
> yo pregunto si hay alguna manera de hacerlo ya con el screenrc, tales como "split" y "focus down", para que el terminal aparezca ya partido. 
> 
> Algo en plan :
> ...

 

Jeje, no te entendí bien. Pues la verdad, no lo se. Estuve probando ayer y hoy, y no he encontrado documentación sobre el tema. Parece que la gente de screen no va actualizando la documentación, y por tanto en la página man no hay nada sobre el tema. En las listas de desarrollo de screen tampoco hay nada. He escrito a las mismas a ver si recibo respuestas sobre este tema, si no, la única opción será meter la cabeza en las fuentes y ver que se cuece.

EDIT,

Las cosas de la impaciencia, en process.c:

```

    case RC_SPLIT:

      s = args[0];

      if (s && !strcmp(s, "-v"))

        AddCanvas(SLICE_HORI);

      else

        AddCanvas(SLICE_VERT);

```

O sea, el comando que buscamos es el mismo, pero con el parámetro -v.

```

:split -v

```

EDIT2:

Y aquí está lo necesario para cambiar el tamaño:

```

      if (!strcmp(*args, "-h"))

        i |= RESIZE_FLAG_H;

      else if (!strcmp(*args, "-v"))

        i |= RESIZE_FLAG_V;

      else if (!strcmp(*args, "-b"))

        i |= RESIZE_FLAG_H | RESIZE_FLAG_V;

      else if (!strcmp(*args, "-p"))

        i |= D_forecv->c_slorient == SLICE_VERT ? RESIZE_FLAG_H : RESIZE_FLAG_V;

      else if (!strcmp(*args, "-l"))

        i |= RESIZE_FLAG_L;

      else

```

----------

## gringo

gracias  :Smile: , urgando ayer en las listas encontré esto, que mas o menos viendo siendo lo que tu has buscao.

saluetes

----------

## i92guboj

 *gringo wrote:*   

> gracias , urgando ayer en las listas encontré esto, que mas o menos viendo siendo lo que tu has buscao.
> 
> saluetes

 

Vaya, gracias. 

A eso le tengo que dar un repaso a fondo jeje, a primera vista hay ahí más de una cosa que me va a servir.  :Wink: 

----------

## gringo

 *Quote:*   

> A eso le tengo que dar un repaso a fondo jeje, a primera vista hay ahí más de una cosa que me va a servir.

 

eso pensé yo  :Smile: 

saluetes

----------

## i92guboj

Hola a tod@s,

¿Qué tal eso?

No se si alguien ha jugado con el post que enlazó gringo más arriba. No está la documentación completa y hay que adivinar cosas, pero tras probar un poco he llegado a construir algo interesante. Más de un fan de screen estará contengo de ver esto:

http://jesgue.homelinux.org/pantallo.jpg

http://jesgue.homelinux.org/pantalloB.jpg

Son como dos espacios de trabajo (en la nueva nomenclatura de screen, layouts) dentro del mismo screen. En ellos se ven divisiones verticales y horizontales. En cada división hay un "group", lo cual hace que sea posible alternar solo entre las ventanas o tabs pertenecientes a dicho group. Esto es interesante. En algunos casos he creado groups con un solo elemento, lo cual viene a significar que en dicho marco el contenido está fijo, a no ser que lo cambiemos con un binding o comando de screen.

El segundo screenshot es otro layout. Es como si hubiera dos escritorios virtuales en el mismo screen. Todo un lujo.

Si alguien quiere echar un vistazo, la config es esta:

```

## BEGIN: LOGS LAYOUT ##

layout new system_logs

screen -t 1 //group

screen -t "htop" htop

screen -t 5 //group

screen -t "trash" bash

screen -t 2 //group

screen -t "fvwm" tail -f ~/logs/fvwm.log

screen -t 3 //group

screen -t "www" tail -f /var/log/lighttpd/access.log

screen -t 4 //group

screen -t "messages" tail -f /var/log/messages

split -v

resize -v 65%

split

resize 90%

focus

select trash

focus

split

resize -v 30%

select fvwm

focus

split

select www

focus

select messages

focus

select htop

layout save system_logs

## END: LOGS LAYOUT ##

## BEGIN: WORK LAYOUT ##

layout new work

screen -t 1 //group

screen -t "bash" bash

screen -t "cash" bash

screen -t "dash" bash

screen -t "root" su -c 'bash'

screen -t 2 //group

screen -t "irssi" irssi -c jesgue.homelinux.org

screen -t 3 //group

screen -t "moc" mocp

screen -t "mc" mc ~/storage/ ~/

split -v

resize -v 60%

focus

split

resize -h 60%

select irssi

focus

select moc

focus

select bash

layout save work

## END: WORK LAYOUT ##

## === ##

layout load "work"

bindkey "^H" layout next

bindkey "^[Oa" focus up

bindkey "^[Ob" focus down

bindkey "^[Oc" next

bindkey "^[Od" prev

caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

## === ##

```

Es más o menos evidente, una vez que la ves. Aunque montarla me ha costado algo debido a la falta de documentación de las nuevas características. Ni siquiera se si es totalmente correcta, pero parece funcionar.

Por supuesto, todas estas características (vsplit, group y layout) están solo en la versión CVS de screen, así que si usais la versión de portage, por ahora, ni os molestéis en probar esto. Es por esto que no lo añado a la guía por ahora. Quizás más adelante, cuando todo esto sea oficial y esté documentado.

----------

## gringo

madré   :Shocked:  , la que has liao, pero te ha quedao guapo ! Yo toy en ello aún ...

saluetes

----------

## i92guboj

 *gringo wrote:*   

> madré   , la que has liao, pero te ha quedao guapo ! Yo toy en ello aún ...
> 
> saluetes

 

Acabo de adaptar mi tema de fvwm para esto.

El USS Enterprise al lado de esto es una gameboy   :Twisted Evil:   :Laughing:   :Laughing: 

EDIT, 

Por cierto, con la velocidad se me olvidó decir los bindings, por si alguien quiere probar la config:

C-izq/der cambia de tab dentro de una subdivisión

C-arriba/abajo nos lleva a otra subdivisión

C-backspace va ciclando entre los distintos layouts

----------

## Inodoro_Pereyra

 *i92guboj wrote:*   

>  *gringo wrote:*   madré   , la que has liao, pero te ha quedao guapo ! Yo toy en ello aún ...
> 
> saluetes 
> 
> Acabo de adaptar mi tema de fvwm para esto.
> ...

 

Ya se a que voy a dedicar las próximas horas libres que tenga! MUY BUENO el resultado final.

Salud!

----------

## kropotkin

demasiado bueno para la administración de mi router   :Very Happy: 

----------

## i92guboj

Un pequeño aviso. Si esto no está documentado ni se ha publicado ha sido con razón. Hay pequeñas inestabilidades que, si bien no impiden el trabajo normal, si que joroban un poco a veces.

Por ejemplo, a veces las áreas no se dibujan bien al inicio (normalmente, combinald C-a l con la funcionalidad de refresco de las aplicaciones esto se resuelve). Otras veces puede haber problemas variados, por ejemplo al cambiar el tamaño de las áreas en verticales. Una cosa bastante molesta es que el scroll es realmente lento si se hacen particiones verticales, como todo, supongo que se irá arreglando poco a poco, pero si lo probáis, tened en cuenta que existen pequeñas inestabilidades como estas. 

Por eso, si lo usáis para tareas críticas, mejor usad una versión estable.

----------

## gringo

con la versión cvs, el ssh se me queda como "colgao" , el terminal no respone a nada y al rato la conexión se aborta ( por inactividad supongo). 

A alguien mas le pasa ?

saluetes

----------

## i92guboj

 *gringo wrote:*   

> con la versión cvs, el ssh se me queda como "colgao" , el terminal no respone a nada y al rato la conexión se aborta ( por inactividad supongo). 
> 
> A alguien mas le pasa ?
> 
> saluetes

 

A mi me ha pasado un par de veces, aunque ahora parece ir bien. No sabría decirte si screen es la causa directa o no.

También, me ocurre que el screen se queda como bloqueado algunas veces, me pasa sobre todo si intento cambiar de layout nada más abrir, sin haber hecho nada más.

Si por ejemplo me muevo antes a otro marco no me pasa. Aunque puede que todo sea casualidad. Como ya digo, el cvs de screen es algo más inestable que otros, aunque tiene varias innovaciones que realmente prometen bastante.

Luego, durante lo que es la actividad normal, no me suele dar problemas (aunque una vez se cerró completamente mientras trabajaba sin avisar siquiera). Pero lo dicho: para tareas críticas, mejor usar una versión estable, o un terminal aparte.

----------

## gringo

 *Quote:*   

> A mi me ha pasado un par de veces, aunque ahora parece ir bien. No sabr�a decirte si screen es la causa directa o no

 

en el caso del ssh me temo que si, con la versión de portage no me ha pasao hasta ahora. Pero bueno, es lo único que he notao, por lo demás parece que funciona bastante bien  :Smile: 

saluetes

----------

## Coghan

Hola a to2.

Estoy actualizando la gentoo de casa desde el curro a través de ssh usando de cliente el Putty para windows, engancho con screen y cierro la terminal.

Lo que me doy cuenta es que la barra de scrooll al subirla se vuelve a bajar sola, en la sesión en espera de introducir comandos, entiendo que esto pase si tienes moviento en la consola como los mensajes de emerge pero en una consola quieta no debería, ¿hay algún parámetro en la configuración para que no pase esto?.

----------

## Coghan

Haciendo pruebas en mi .sreenrc he comentado la siguiente línea que tenía según este manual.

```
caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. "

```

Al comentar esta línea dejo de tener la barra inferior con los diferentes TABS que tenía configurados, de esta manera si que me permite hacer el scrooll, parece debido a que continuamente debe estar refrescando la barra en la terminal y siempre el scroll vuelve a la línea inferior.

----------

## i92guboj

Con C-a ESC entras en un modo especial en el que puedes desplazarte usando screen (y no el scroll del terminal), con el teclado solamente. También se puede cortar y copiar texto y bastantes cosas más. De hecho, es la forma más cómoda de hacer scroll una vez que te acostumbras, porque no tienes que ir a por el ratón. Además, el texto de todos los "tabs" de screen se multiplexa, lo cual quiere decir que con varios tabs abiertos, si todos están produciendo salida simultáneamente y haces scroll con el ratón o con may+repag veremos líneas de todos los tabs intercaladas, haciendo la salida un montón de líneas inútiles.

Sin embargo, si usamos el mismo screen para hacer scroll, la salida es la correcta.

----------

## Coghan

Gracias, ya me he puesto a practicar, ya le estoy sacando bastante partido, la verdad es que cuando hay dudas con Ctrl+A+? ayuda mucho.

Otro tema con el que no doy es con la tecla de retroceso (el borrado típico de toda la vida, encima del intro) deja de funcionar para corregir un carácter he de usar la tecla suprimir o utilizando Ctrl+H. ¿Existe alguna opción para utilizar la tecla retroceso como algún binding?.

Sigo trasteando. De nuevo gracias por el manual.

----------

## i92guboj

 *Coghan wrote:*   

> Gracias, ya me he puesto a practicar, ya le estoy sacando bastante partido, la verdad es que cuando hay dudas con Ctrl+A+? ayuda mucho.
> 
> Otro tema con el que no doy es con la tecla de retroceso (el borrado típico de toda la vida, encima del intro) deja de funcionar para corregir un carácter he de usar la tecla suprimir o utilizando Ctrl+H. ¿Existe alguna opción para utilizar la tecla retroceso como algún binding?.
> 
> Sigo trasteando. De nuevo gracias por el manual.

 

¿Que terminal usas? ¿Funciona si pruebas en consola o en un terminal distinto?

----------

## Coghan

 *i92guboj wrote:*   

> ¿Que terminal usas? ¿Funciona si pruebas en consola o en un terminal distinto?

 

uso xfce-extra/terminal, con gnome-terminal funciona bien y en consola también, aunque aquí al usar los cursores horizontales en vez de moverse por el texto de la linea de comandos salta de TAB sin pulsar Crtl.

Este es mi .screenrc, como verás he usado el que tu propones, aún no he llegado a la parte de crear el mío propio, ya irá saliendo

```
defutf8 on

#hardstatus alwayslastline "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. " 

caption always "%{dw} .- %{dB} %-w%50>%{KY}[%t]%{dB}%+w %{dB}%<%>%=%C:%s %d/%m/%Y %{dw} -. " 

termcapinfo rxvt-unicode 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007' 

bindkey "^[Oc" next

bindkey "^[Od" prev

bindkey "^[[C" next

bindkey "^[[D" prev

bindkey "^[[1;5C" next

bindkey "^[[1;5D" prev 

screen -t "bash" 0 bash

screen -t "bash" 1 bash

```

Vale, mientras escribía esta respuesta he accedido a las preferencias del Terminal de xfce4 para darte más detalles de la configuración que tengo y he visto donde estaba el problema, en la opción avanzada puedes definir la variable $TERM está con el valor xterm, pero además me deja elegir el comportamiento de la tecla Retroceso y Suprimir, la primera en automático es cuando no va con screen, pero puedo asignarla a Control-H y ya funciona, la tecla Suprimir se queda en automático que así va bien.

Ahora solo queda la consola, que hasta que no me dijiste que mirara como funcionaba no la había probado, pues el valor de la variable $TERM en la consola es linux. supongo que habrá que crear una línea del tipo:

```
termcapinfo linux 'lo que corresponda aquí' 
```

----------

## gringo

a ver si alguien me puede ayudar con esto :

normalmente arranco screen siempre con tres o cuatro terminales por defecto. 

Pero si p.ej. tengo una sessión local con cuatro terminales y en una de ellas me meto con ssh a otra máquina y ejecuto remotamente la misma configuración no puedo alternar entre los terminales remotos sino que voy alternando entre los terminales locales ( como es de esperar). 

Alguien sabe como puedo p.ej. ir alternando entre todos los terminales abiertos indistintamente de que sean locales o remotos o como puedo indicarle a screen que quiero alternar pongamos sólo entre los terminales remotos ? esto es viable ?

EDITO : por si a alguien le interesa la solución -> http://lists.gnu.org/archive/html/screen-users/2008-02/msg00027.html

----------

## ensarman

reviviendo a un muerto.... 

estoy rehaciendo una PC y tengo una mauqina con pocos recursos y le estoy colocando LXDE y ahi le quiero colocar un screen, le estoy haciendo alguas cosas interesantes, encontre esto que me gustó mucho

```
caption always '%{= dg} %H %{G}| %{B}%l %{G}|%=%?%{d}%-w%?%{r}(%{d}%n %t%? {%u} %?%{r})%{d}%?%+w%?%=%{G}| %{B}%M %d %c:%s '

```

bueno al grano, en la guia dice como hacer el atajo de teclado para:

ctrl+izq = prev 

ctrl+der = next 

con las siguentes bindkeys

```
bindkey "^[Oc" next

bindkey "^[Od" prev

bindkey "^[[C" next

bindkey "^[[D" prev

bindkey "^[[1;5C" next

bindkey "^[[1;5D" prev 

```

pero en ves que sea ctrl, se puede hacer que sea shift??

otra pregunta se puede hacer una integracion con el mouse para intercambiar pestañas?

----------

## i92guboj

 *ensarman wrote:*   

> reviviendo a un muerto.... 
> 
> estoy rehaciendo una PC y tengo una mauqina con pocos recursos y le estoy colocando LXDE y ahi le quiero colocar un screen, le estoy haciendo alguas cosas interesantes, encontre esto que me gustó mucho
> 
> ```
> ...

 

Los códigos concretos pueden depender del emulador de terminal usado. Una forma de capturarlos es abrir tu terminal favorito, y ejecutar el comando "tail", o "cat", sin argumentos.

Cualquiera de los dos quedará en espera a recibir una entrada para devolverla en el terminal, de forma que puedes pulsar combinaciones de teclas y ver qué resultado dan. Luego puedes usar esos códigos en tu configuración de screen.

En cuanto al ratón, yo personalmente nunca me he interesado por ese aspecto, así que no podría decirte con seguridad... Además, hace ya algunos años que dejé de usar screen en favor de tmux. Google parece tener algunas respuestas, por si nadie aquí puede orientarte...

https://www.google.es/search?q=gnu+screen++mouse&oq=gnu+screen++mouse&aqs=chrome..69i57j0l3.3717j0j1&sourceid=chrome&ie=UTF-8

----------

## ensarman

gracias por tu respuesta, y por el dato del tmux, lo evaluaré y veré que tal funciona...

----------

## Yczo

Si algo tengo que decir es BRAVO! SOIS UNOS TIOS COJONUDOS!. Yo ni conocía esta aplicación pero la tendré en cuenta para el futuro.

Un saludo.

----------

