Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Guía] - Iniciación a GNU Screen
View unanswered posts
View posts from last 24 hours

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Spanish
View previous topic :: View next topic  
Author Message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sat Sep 01, 2007 4:32 pm    Post subject: [Guía] - Iniciación a GNU Screen Reply with quote

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.

Code:

# 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:

Code:

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.

Code:

$ 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:

Code:

$ 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:

Code:
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:

Code:

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:

Code:

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 :P 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:

Code:

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:

Code:

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:

Code:

$ 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.

Code:

$ 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:

Code:

$ 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. ;)

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 :P

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:

Code:

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


Y añadir:

Code:

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í:

Code:

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. :P

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 :)

Actualizado dom, 2 septiembre 2007, 16:29
_________________
Gentoo Handbook | My website


Last edited by i92guboj on Sun Sep 02, 2007 2:29 pm; edited 3 times in total
Back to top
View user's profile Send private message
achaw
l33t
l33t


Joined: 09 Aug 2006
Posts: 689
Location: Argentina

PostPosted: Sat Sep 01, 2007 4:46 pm    Post subject: Re: [Guía] - Iniciación a GNU Screen Reply with quote

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
_________________
Usuario GNU/Linux #398133
Fluxbox + ROX
NO al canon!
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sat Sep 01, 2007 4:50 pm    Post subject: Re: [Guía] - Iniciación a GNU Screen Reply with quote

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:

Code:

defutf8 on


Si se activa el soporte utf8 en xterm también debería funcionar bien, supongo.
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
Zagloj
Guru
Guru


Joined: 17 Jun 2005
Posts: 314

PostPosted: Sat Sep 01, 2007 5:13 pm    Post subject: Reply with quote

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

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 ;)

Pd Me queda pendiente leer a fondo el man para ver cómo se divide la pantalla (split)
_________________
Your ideology seems to be: "I hate the fanatics, we shoud kill them all" juantxorena dixit.
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sat Sep 01, 2007 5:25 pm    Post subject: Reply with quote

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 :P

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 ;)


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. ;)

EDIT: Hecho.
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
Zagloj
Guru
Guru


Joined: 17 Jun 2005
Posts: 314

PostPosted: Sat Sep 01, 2007 5:52 pm    Post subject: Reply with quote

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 :lol:

Saludos ;)
_________________
Your ideology seems to be: "I hate the fanatics, we shoud kill them all" juantxorena dixit.
Back to top
View user's profile Send private message
Cereza
Guru
Guru


Joined: 14 Apr 2006
Posts: 428

PostPosted: Sat Sep 01, 2007 5:58 pm    Post subject: Reply with quote

Deberían poner esta guía en el post recopilatorio.
Back to top
View user's profile Send private message
kropotkin
Guru
Guru


Joined: 05 Sep 2005
Posts: 437
Location: Chile

PostPosted: Sat Sep 01, 2007 6:18 pm    Post subject: Reply with quote

:D 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 :oops:

muchas gracias por la guía, aclaras muchas dudas :D
_________________
mi sitio Ñoño
mi sitio no tan Ñoño
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sat Sep 01, 2007 6:37 pm    Post subject: Reply with quote

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.



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.

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.
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
Inodoro_Pereyra
Advocate
Advocate


Joined: 03 Nov 2006
Posts: 2631
Location: En la otra punta del cable

PostPosted: Sat Sep 01, 2007 8:34 pm    Post subject: Reply with quote

Jesús Guerrero presidente!! :D

Muchas gracias.
_________________
Mi Blog.

Si no fuera por C, estaríamos escribiendo programas en BASI, PASAL y OBOL.
Back to top
View user's profile Send private message
Niltsiar
n00b
n00b


Joined: 25 Apr 2004
Posts: 39

PostPosted: Sat Sep 01, 2007 11:09 pm    Post subject: Reply with quote

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.

Code:

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.

Back to top
View user's profile Send private message
Zagloj
Guru
Guru


Joined: 17 Jun 2005
Posts: 314

PostPosted: Sat Sep 01, 2007 11:21 pm    Post subject: Reply with quote

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 ;)
_________________
Your ideology seems to be: "I hate the fanatics, we shoud kill them all" juantxorena dixit.
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sat Sep 01, 2007 11:25 pm    Post subject: Reply with quote

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.

Code:

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.



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. ;)
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
kropotkin
Guru
Guru


Joined: 05 Sep 2005
Posts: 437
Location: Chile

PostPosted: Sun Sep 02, 2007 12:51 am    Post subject: Reply with quote

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.
_________________
mi sitio Ñoño
mi sitio no tan Ñoño
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sun Sep 02, 2007 1:25 am    Post subject: Reply with quote

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:

Code:

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


Y añadiendo:

Code:

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í:

Code:

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.
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
Zagloj
Guru
Guru


Joined: 17 Jun 2005
Posts: 314

PostPosted: Sun Sep 02, 2007 1:44 am    Post subject: Reply with quote

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 ;)
_________________
Your ideology seems to be: "I hate the fanatics, we shoud kill them all" juantxorena dixit.
Back to top
View user's profile Send private message
kropotkin
Guru
Guru


Joined: 05 Sep 2005
Posts: 437
Location: Chile

PostPosted: Sun Sep 02, 2007 1:46 am    Post subject: Reply with quote

Funciono perfecto

Muchísimas Gracias :D
_________________
mi sitio Ñoño
mi sitio no tan Ñoño
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sun Sep 02, 2007 3:48 am    Post subject: Reply with quote

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. :)
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sun Sep 02, 2007 4:57 am    Post subject: Reply with quote

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 :P

PD. Mañana actualizaré la guía con todo lo que ha ido saliendo para que no quede en el olvido.
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
gringo
Advocate
Advocate


Joined: 27 Apr 2003
Posts: 3748

PostPosted: Sun Sep 02, 2007 7:59 am    Post subject: Reply with quote

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. ?

gracias y saluetes !
_________________
Error: Failing not supported by current locale
Back to top
View user's profile Send private message
Zagloj
Guru
Guru


Joined: 17 Jun 2005
Posts: 314

PostPosted: Sun Sep 02, 2007 10:35 am    Post subject: Reply with quote

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 :P
_________________
Your ideology seems to be: "I hate the fanatics, we shoud kill them all" juantxorena dixit.
Back to top
View user's profile Send private message
Coghan
l33t
l33t


Joined: 25 Jul 2007
Posts: 789
Location: Gran Canaria (Spain)

PostPosted: Sun Sep 02, 2007 11:31 am    Post subject: Reply with quote

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!
_________________
Salu2.
Alguien muy acertadamente una vez wrote:
'El buen informático es como un bibliotecario, no lo sabe todo, pero sabe donde buscarlo'
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sun Sep 02, 2007 1:54 pm    Post subject: Reply with quote

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. ?

gracias y saluetes !


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.
_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
gringo
Advocate
Advocate


Joined: 27 Apr 2003
Posts: 3748

PostPosted: Sun Sep 02, 2007 4:03 pm    Post subject: Reply with quote

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
_________________
Error: Failing not supported by current locale
Back to top
View user's profile Send private message
i92guboj
Moderator
Moderator


Joined: 30 Nov 2004
Posts: 10127
Location: Córdoba (Spain)

PostPosted: Sun Sep 02, 2007 4:31 pm    Post subject: Reply with quote

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 :

select foo
split
focus down
select bar

tal y como se puede hacer en horizontal vaya.

saluetes


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:

Code:

    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.

Code:

:split -v


EDIT2:

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

Code:

      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

_________________
Gentoo Handbook | My website
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Spanish All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum