Ciclo Herramientas gnu/linux (IV): roxterm y urxvt

Hoy comento una utilidad que no es de consola (MOG!), sino una “consola” en sí; vaya un emulador de terminal.
Por supuesto, en la búsqueda de “algo” ligero, configurable y con suficientes “features” nos hace pasar por la página de “lightweight applications” en la wiki de Arch.

Diría que he probado todos:

  • LilyTerm: Violación de segmento al arrancar la 2ª ventana, diría que tiene procesos separados para cada ventana.
  • Sakura: Procesos independientes, no excesivamente pesado.
  • Xterm: Procesos independientes, pesado.
  • Tilda: Procesos independientes, pesado.
  • Stjerm: no me gusta el dropdown, partiendo de eso, no lo he probado demasiado.
  • urxvt: Muy buen combo urxtvd+urxvtc, lo he estado usando hasta que se han solucionado los problemas del roxterm
  • ROXTerm: Un proceso por N ventanas, muy ligero

Lo que busco en un terminal (imagino que lo que todos ¬¬’):

  • Custom colors: básico para ver los colorines de nuestro tty!!! (htop rulez)
  • Custom Shortcuts: hay que poner las cosas como a uno le gusta, no como alguien te obligue ;-)
  • Lightweight: por descontado
  • Mult-tabs/Multi-windows

Para apreciar la diferencia con urxvtd, pongo una captura de la memoria, ambos con las mismas pestañas, ejecutando los mismos procesos en ellas:
[cc lang=”bash”]dodger 1240 0.0 2.9 447892 60588 ? S Sep09 8:47 urxvtd -q -o -f
dodger 24726 0.9 0.9 53812 19676 pts/15 Sl 17:57 0:03 roxterm
[/cc]
Como comentaba antes, Roxterm ha tenido problemas con la configuración de los shortcuts durante unas cuantas versiones, al menos en mi caso. Y he estado usando urxvtd+urxvtc, también de manera muy satisfactoria.
La verdad que el sistema de configuración mediante .Xdefaults es un poco… arcaico, pero al final te acostumbras.
Tiene cosas buenas, como por ejemplo el cambio de pestaña mediante “ALT + ->” y “ALT + <-" y una cosa que a todo geek le gustará que son las tabs en ASCII si se ejecuta el urxvt mediante: [cc lang="bash"]urxvtc -pe tabbed[/cc] De momento, me quedo con roxterm (aunque las pestañas en GTK no molen tanto), sí que ocupa mucho menos y los ficheros de configuración son "humanos", tal vez no admita las 10e10 opciones de urxvt, pero sí que admite las necesarias ;-) Ahora pongo la config que he estado usando para urxvt [cc lang="bash"] vi .Xdefaults[/cc] [cc lang="bash"] ! General urxvt*termName: rxvt urxvt*loginShell: true urxvt*scrollBar: true urxvt*scrollBar_right: true urxvt*secondaryScroll: true URxvt*scrollstyle: plain urxvt*saveLines: 65535 urxvt*cursorBlink: false urxvt*urgentOnBell: true !urxvt*override-redirect:false !urxvt*borderLess: false !urxvt*internalBorder: 0 !urxvt*externalBorder: 0 ! Extensions urxvt*perl-lib: /usr/lib/urxvt/perl/ urxvt*perl-ext-common: default,matcher,searchable-scrollback urxvt*urlLauncher: /usr/bin/firefox urxvt*matcher.button: 1 ! - catch ugly URLs ! Tabs ! Appearance ! - use a bitmap font !urxvt*font: -*-terminus-medium-*-*-*-12-*-*-*-*-*-*-* !urxvt*boldFont: -*-terminus-bold-*-*-*-12-*-*-*-*-*-*-* !URxvt*font: xft:DejaVu Sans Mono:pixelsize=12:antialias=true:hinting=true URxvt*font: xft:Monospace:pixelsize=12:antialias=true:hinting=true URxvt*boldFont: xft:Monospace:bold:pixelsize=12:antialias=true:hinting=true ! - use xft for drawing fonts !urxvt*font: xft:Terminus:5 !urxvt*font: 9x20 ! - cursor urxvt*cursorColor: #DCDCCC ! - pseudo transparency !urxvt*shading: 50 !urxvt*transparent:true ! ! - color scheme !urxvt.background: #000000 urxvt.background: #171717 urxvt.foreground: #EBEBFF ! black + red !urxvt*color0: #3f3f3f urxvt*color0: #000000 urxvt*color1: #e01010 ! green + yellow urxvt*color2: #00AA00 urxvt*color3: #FFFF00 ! blue + purple ! urxvt*color4: #112037 urxvt*color4: #4092cf urxvt*color5: #A020F0 ! cyan + white urxvt*color6: #5B5BC7 urxvt*color7: #fefefe ! bright-black + bright-red urxvt*color8: #6a6a6a urxvt*color9: #FF5555 ! bright-green + bright-yellow urxvt*color10: #90EE90 urxvt*color11: #ffff2f ! bright-blue + bright-purple urxvt*color12: #5B5BC7 urxvt*color13: #e628ba ! bright-cyan + bright-white urxvt*color14: #7D7DFB urxvt*color15: #ffffff [/cc] Mi configuración de colores de roxterm: [cc lang="bash"] vi .config/roxterm.sourceforge.net/Colours/dodger [/cc] [cc lang="bash"] [roxterm colour scheme] foreground=#eeeeeeeeecec background=#000000000000 0=#2e2e34343636 1=#cccc00000000 2=#4e4e9a9a0606 3=#c4c4a0a00000 4=#34346565a4a4 5=#757550507b7b 6=#060698989a9a 7=#d3d3d7d7cfcf 8=#555557575353 9=#efef29292929 10=#8a8ae2e23434 11=#fcfce9e94f4f 12=#72729f9fcfcf 13=#adad7f7fa8a8 14=#3434e2e2e2e2 15=#ffffffffffff 16=#4c4c4c4c4c4c 17=#a8a830303030 18=#202088882020 19=#a8a888880000 20=#555555559898 21=#888830308888 22=#303088888888 23=#d8d8d8d8d8d8 cursor=#eeeeeeeeecec palette_size=16 [/cc] Y los shortcuts: [cc lang="bash"] vi .config/roxterm.sourceforge.net/Shortcuts/dodger [cc] [cc lang="bash"] [roxterm shortcuts scheme] File/New Window=n
File/New Tab=t
File/Close Window=q
File/Close Tab=w
Tabs/Previous Tab=Left
Tabs/Next Tab=Right
Edit/Copy=c
Edit/Paste=v
View/Zoom In=plus
View/Zoom Out=minus
View/Normal Size=0
View/Scroll Up One Line=Up
View/Scroll Down One Line=Down
Help/Help=F1
Edit/Copy & Paste=y
File/New Window With Profile/Default=
File/New Tab With Profile/Default=
[/cc]

Para aplicar estos cambios:
[cc lang=”bash”]
cp .config/roxterm.sourceforge.net/Global .config/roxterm.sourceforge.net/Global.backup
sed -i ‘s,colour_scheme=.*,colour_scheme=dodger,g’ .config/roxterm.sourceforge.net/Global
sed -i ‘s,shortcut_scheme=.*,shortcut_scheme=dodger,g’ .config/roxterm.sourceforge.net/Global
[/cc]

El backup es por si acaso, nunca está de más ;-)

La importancia de IT

Resulta que tengo contacto con una persona no-informática que trabaja en una empresa no-informática en la que tienen un departamento IT un tanto… especial.
Todo hay que decirlo que mi conocido es bastante enterado a nivel tecnológico y bastante ágil mentalmente, no como el resto del personal.

Pongámos el [MODO WARDOG ON] y en primera persona, con $CURRANTE como protagonista.:

Riiing…Riinggg, $CURRANTE: “departamento marrón, dígame”
$RECEPCION: “nos han llegado el nuevo datáfono y va sin conexiones, creo que pone algo de que necesita una conexión Wifi de esas.”
$CURRANTE: Vale, hablaré con $IT para que le echen un vistazo y lo conecten. Plink

Riiing…Riinggg, $IT: “Departamento inútil, dígame!”
$CURRANTE: hola, necesito que…
$IT: Espera que voy. Plink.

Pero si no le he dicho nada, para qué va a venir, por teléfono ya se lo puedo explicar todo

$IT: que pasa $CURRANTE, no podéis vivir sin nosotros, eh!
$CURRANTE: Seguro! Mira, el banco $LADRONES nos ha enviado un magnífico datáfono de 2ª mano, es una basura, pero habrá que ir tirando.
$IT: Y?
$CURRANTE: Pues eso, que es Wifi, y no tenemos wifi!
$IT: Uff, pues eso va a tardar eh, por que no tenemos ningún AP, hay comprarlo, configurarlo… uff eso tardará eh!!
$CURRANTE: Pero si no tenéis nada urgente ahora mismo! Y esto no puede ser tan dificíl, cualquiera tiene una wifi en su casa!
$IT: Mira, mandamé un mail y ya lo miraremos, adiossssSSss

Y ahí me quedo, con cara de tonto… voy a consultarlo con $dodger.

$CURRANTE: Oye, $dodger, esto de configurar una wifi… es muy difícil?
$dodger: Pues no, tan difícil como cambiar 2 passwords y un par de opciones, hasta el caracol de bob esponja sabría hacerlo.
$CURRANTE: Pues por aquí me dicen esto…
$dodger: Eh, te paso mi currículum, que me paguen lo que a los 4 informáticos que tenéis y tendréis ALL-IN-ONE.
$CURRANTE: Echo, si no fuese por la alta tensión… ya sabes.

Pues nada, dedico comentarlo a ${INUTIL-BOSS[1]} a ver si es capaz de por una vez meterles un puro a los de $IT.

${INUTIL-BOSS[1]}: qué quieres piltrafilla, algo del departamento marrón a compartir?.
$CURRANTE: Pues mira … (explico la situación).
${INUTIL-BOSS[1]}: Uff… es que eso de la wifi… eso va a dejar de existir!
$CURRANTE: Como?
${INUTIL-BOSS[1]}: Si si, no ves que eso emite muchas radiaciones perjudiciales para la salud, no creo que los $HYPERBOSSES lo permitan, por la salud del trabajador ya sabes.
$CURRANTE: COMO?
${INUTIL-BOSS[1]}: No pongas esa cara, ya se sabe que lo mejor es ir con cables. No te preocupes, si es necesario, se pondrá un aparato de esos, pero que lo enciendan solo cuando lo necesiten.
$CURRANTE: Are you fucking kidding me?
${INUTIL-BOSS[1]}: me voy a dar una disertación sobre radioactividad a Fukushima, Adios!!!

No me puedo creer que haya tal inutilidad… preguntaré a $dodger a ver…

$CURRANTE: Oye $dodger, ${INUTIL-BOSS[1]} me ha dicho … blablabla
$dodger: LOL. Gracias, hoy ya no necesito hacer abdominales con todo lo que me he reído.

[MODO WARDOG OFF]

Esto demuestra varias cosas:

  • Que cualquiera puede hacer de IT si tiene un poco de enchufe (con perdón, Gary)
  • Que cualquiera puede ser jefe aplicando la regla anterior
  • Lo importante que es tener alguien que ponga los pies en el suelo a la peña
  • Que IT es un departamento importante en una empresa, no conviene rodearse de inútiles.
Ciclo Herramientas gnu/linux (III): screen (gnu/screen)

Y llegamos a una de mis herramientas favoritas y sin la que prácticamente no me planteo la administración de un servidor.
Sobre todo conociendo como van las conexiones españolas.

Haciendo copy/paste del manual:

Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells).

Tradución/interpretación: Screen es un emulador de terminal des-atachado que permite multiplexación de terminales.
Es decir, permite lanzar un proceso que es no es dependiente de un terminal; ya que todos los procesos de usuario en linux cuelgan de un terminal, aunque los mandemos a background y a no ser que usemos dtach.
Esto soluciona el problema de la reconexión, es decir, lanzar un programa de larga duración sin logar la salida y luego hacer el típico:

Se me ha colgado la conexión y no sé como ha finalizado!!!

Que fijo que a cualquier sysadm le ha pasado, habitualmente por despiste (trollface again).

Aparte de esta propiedad, tiene la gran ventaja de que permite lanzar “pestañas” (por hacer un símil) dentro de la misma conexión, es decir, N shells dentro de una única.
Por supuesto también permite splitting de la ventana en regiones (horizontales y depende de si screen está parcheado, verticales), aunque en mi caso soy contrario a usarlas por que es un poco “paja mental”, pero he de reconocer que en ocasiones viene muy bien.

La configuración la realizamos mediante el típico: [cc lang=”bash”]${HOME}/.screenrc[/cc]
Pongo el mío como ejemplo:
[cc lang=”bash”]deflogin on
vbell on
vbell_msg ” Wuff —- Wuff!! ”
defscrollback 1024
bind ^k
bind ^\
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history
termcapinfo vt100 dl=5\E[M
hardstatus off
termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=\E]0;:fs=\007:ds=\E]0;\007
hardstatus string “%h%? users: %u%?”
termcapinfo xterm*|linux*|rxvt*|Eterm* OP
termcapinfo xterm ‘is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l’
defnonblock 5
caption always “%{+b rk}%H%{gk} |%c %{yk}%d.%m.%Y | %72=Load: %l %{wk}”
hardstatus alwayslastline “%?%{yk}%-Lw%?%{wb}%n*%f %t%?(%u)%?%?%{yk}%+Lw%?”
[/cc]

Que nos genera algo como esto (eliminando la parte de htop):
Ejemplo de configuración de screen

Lo importante son las 2 últimas lineas visibles:
[cc lang=”bash”]
ciberterminal |12:12 14.09.2011 | Load: 0,25 0,24 0,18
0*$ bash 1-$ bash 2$ bash 3$ bash 4$ bash
[/cc]
Donde apreciamos:

  1. hostname, fecha, load avg.
  2. “Pestañas” disponibles

De esta forma de manera muy rápida y visual, apreciamos cuantas pestañas tenemos y el estado del servidor.

Otra propiedad adicional e intersante, es el clipboard propio, el scrolling y la posibilidad de salvar lo que aparecen el terminal (todo resumido con el nombre de “copy mode”.

Añado un “resumen” de mis shortcuts más usados, que en este caso son muchos:

##CONNECTION## From outside screen
screen
launch a new screen
screen -S NAME
launch a new screen with name “NAME”
screen -m PROGRAM
launch a screen and inside it the “PROGRAM”
screen -d -m PROGRAM
launch a DE-ATTACHED screen and run “PROGRAM” inside
screen -ls
launch a new screen
screen -x
bruteforce attach
screen -r SCREENAME
attach to screen “SCREENAME”
##INSIDE SCREEN##
CTRL-a c
New screen “tab”/session
CTRL-a n
Next “tab”
CTRL-a p
Prev “tab”
CTRL-a N
Go to tab N
CTRL-a "
Tab list
exit
exit current tab
CRTL-d
exit current tab
CTRL-a A
Change Current tab name
CRTL-a d
de-attach screen
CRTL-a C
clear current tab screen
CRTL-a l
reset current tab screen
CTRL-a K
Destroy (literally) current tab
##SPLITTING##
CTRL-a S
Split current tab horizontally
CTRL-a |
Split current tab vertically
CTRL-a <tab>
Switch to next region
CTRL-a X
Close current region
##COPY/PASTE##
CTRL-a <esc>
Enter copy mode
<Space>
Begin selection (use arrows to move)
<Enter>
Finish selection and copy
CTRL-a ]
Paste
CTRL-a >
Write clipboard to file /tmp/screen-exchange
CTRL-a <
Read /tmp/screen-exchange to clipboard
CTRL-a =
Remove /tmp/screen-exchange but no clipboard content
##SCROLL##
CTRL-a <esc>
Enter copy mode
AvPag
Advance 1 page
RePag
Previous page
Inicio
Go to the 1st line of scroll
Fin
Go to the last line of scroll (actual one)
CRTL+r <SEARCH STRING>
Enter Search mode (begin writing), then

CRTL+r

to go to the previous ressult

/<SEARCH STRING>
Enter VIM-like search
Ciclo Herramientas gnu/linux (II): finch

Nivel freak rallando el tope…
Un cliente de mensajería instantánea basado en ncurses. Más bien pidgin en ncurses.
Dejando a parte a centerim, el aspecto de finch es igual al de pidgin… solo que en consola.
Es decir, tiene “ventanas”, pestañas (si quieres) y la ventana de amigos. Pero también tiene workspaces dentro del propio programa (algo así como “pestañas” de screen) donde poder clasificar las ventanas: por ejemplo las ventanas de chat en un workspace y la lista de amigos en otro.

Un ejemplo de funcionamiento habitual:
finch en funcionamiento
Link al autor de la imagen

Por supuesto cuenta con cliente de los protocolos habituales: jabber, msn, irc, icq…

Como se puede ver en la página del manual, parte de la configuración se realiza en el finchero:
[cc lang=”bash”]${HOME}/.gntrc[/cc]
En mi caso por ejemplo:
[cc lang=”bash”][Finch]
mouse = 1
color-available = green; black
color-away = blue; black
color-idle = gray; black
color-offline = red; black
color-message-sent = cyan; default
color-message-received = red; default
color-message-highlight = black; green
color-message-action = yellow; default
color-timestamp = blue; default
#See below for details on color

[general]
shadow = 0
# There is experimental mouse support
mouse = 1
# To use some custom window-manager
wm = /usr/local/lib/gnt/s.so
# There’s also a custom window manager called irssi.so
# Remember window-positions based on the titles (on by default)
remember_position = 1
# Use borderless one-line high buttons
small-button = true

# Workspaces are created simply by adding Workspace-X groups as follows:
[Workspace-1]
name = blist
# window-names specifies that windows with these semi-colon separated names are placed into this workspace
window-names = buddylist;debug-window

[Workspace-2]
name = IM
window-names = conversation-window
# window-titles specifies that windows with these semi-colon separated titles are placed into this workspace. These are matched as substrings. Window titles take precedence over names.
window-titles = Preferences;Pounce
[/cc]

Casi todo está por defecto, exceptuando el tema de los workspaces, que en mi caso separo las “conversation-window” en el Workspace-2 del resto en el Workspace-1.

Y por qué usar este programa en vez de los super-bonitos clientes actuales, en mi caso como no me canso de repetir… ram:
[cc lang=”bash”]dodger 1266 0.0 1.0 65268 20684 pts/0 Ss+ Sep09 3:26 finch[/cc]
Por los +100MB de pidgin por ejemplo.
Otra cosa es que al final te acostumbras a los shortcuts de finch y como todo trabajador de la consola, no puedes estar sin ellos.
Como ejemplo, pongo algunos (los más usados):

####shortcut####
ALT+a
List of avalaible actions
ALT+n
Next window
ALT+p
Prev window
ALT+w
window list
ALT+c
Close window
ALT+q
Quit
ALT+m
Move window
ALT+r
Resize window
ALT+s
window list
ALT+.
Move the position of the current window in the window list one place to the right.
ALT+,
Move the position of the current window in the window list one place to the left.
ALT+l
Refresh the windows. Useful after resizing the terminal window.
ALT+1..0
Jump to the 1st, 2nd … 10th window.
CRTL+o
Bring up the menu (if there is one) for a window.
ALT+>
Switch to the next workspace
ALT+<
Switch to the previous workspace
AvPag RePag
Scroll text page up/page down
In the buddy list->F11
Add buddy

Completito, vaya… Más en el manual o en la docu oficial.

Ciclo Herramientas gnu/linux (I): htop

Comienzo un ciclo a petición de un compañero, herramientas habituales.
En este caso, un must-have de todo linuxero y más si eres sysadm.
El htop es el top clásico llevado al nivel “no podrás vivir sin el”, es el típico “estaba ciego y acabo de despertar”.
Colourfull, easy, full-customizable…
Ya he puesto alguna captura en ocasiones:
Consumo de memoria

Echemos un vistazo al help (F1/h):
[cc lang=”bash”]htop 0.8.3 – (C) 2004-2008 Hisham Muhammad.
Released under the GNU GPL. See ‘man’ page for more info.

CPU usage bar: [low-priority/normal/kernel used%]
Memory bar: [used/buffers/cache used/total]
Swap bar: [used used/total]
Type and layout of header meters are configurable in the setup screen.

Status: R: running; S: sleeping; T: traced/stopped; Z: zombie; D: disk sleep
Arrows: scroll process list F5 t: tree view
Digits: incremental PID search u: show processes of a single user
F3 /: incremental name search H: hide/show user threads
K: hide/show kernel threads
Space: tag processes F: cursor follows process
U: untag all processes
F9 k: kill process/tagged processes P: sort by CPU%
+ [ F7: higher priority (root only) M: sort by MEM%
– ] F8: lower priority (+ nice) T: sort by TIME
F4 I: invert sort order
F2 S: setup F6 >: select sort column
F1 h: show this help screen l: list open files with lsof
F10 q: quit s: trace syscalls with strace
L: trace library calls with ltrace

Press any key to return. [/cc]
A simple vista… un top… normal.
Ahora bien… si rascamos un poco:

  • Scrolling: Efectivamente, htop permite scrolling por la lista de procesos, select&go: renice, kill…
  • Búsqueda por procesos (F3 & /)
  • Tree view
  • Setup: permite una personalización completa del entorno htop.
  • strace: lanza un strace atachado al proceso seleccionado
  • lsof: lista ficheros abiertos por el proceso seleccionado

Merecería la pena solo por ver top en colores, pero cosas como strace, lsof y ver “gráficamente” las cosas, no tiene precio :P

El mediacenter

Ultimamente varias personas me han preguntado por la composición de mi mediacenter y a veces es un poco complicado hacerme entender.
Asi que voy a colgar un pequeño esquema:

Básicamente está compuesto en la parte mediacenter en sí por:

  • LCD LG (or whatever)
  • WDTV Live
  • CH3HNAS
  • TP-Link TL-WR841N

Y en la parte “desktop” por:

  • TP-Link TL-WR841N
  • PC
  • Router ADSL

Los dos router TP-link son gemelos para evita problemas con el WDS.
La gracia está en que mediante WDS sin pasar cables, todo está interconectado y en la misma red, de esta forma el WDTV puede salir a internet, igual que el NAS y desde la parte contraria desde el/los pc’s (e internet) se puede acceder al entorno mediacenter.

Por qué esto y uno otra solución como por ejemplo el típico popcorn/mediatank? La respuesta es simple… no creo que haya uno de estos mediaplayers que soporte 4TB de disco ;-)

Respecto al precio:

Para lo que es en sí y la flexibilidad que provee, creo que está bastante bien :)

Respecto al tema de protocolos, el WDTV accede al NAS mediante SAMBA, hice pruebas por NFS y aunque parezca increible la velocidad de transferencia era penosa. Por samba reproduzco FULLHD sin problema alguno y eso que el switch del router es de 100mbps y el nas, también (en mi caso el router es un poco más antiguo que el que indico).