viernes, 9 de marzo de 2012

wmii: Trucos avanzados (III)


Tutorial wmii:
  1. wmii: Introducción e instalación (I)
  2. wmii: Configuración y comandos de uso básico (II)
  3. wmii: Trucos avanzados (III)
Si habéis seguido el tutorial hasta aquí, tendréis un sistema con wmii funcionando perfectamente. Pero aún le podemos sacar muchísimo más partido, como veremos ahora. La mayor parte de estos trucos, si no todos, requerirán editar el archivo de configuración básico de wmii que ya usamos en las anteriores entradas, del que recomiendo que hagáis copia de seguridad de vez en cuando, por si acaso. Este archivo se encuentra en
/usr/local/etc/wmii-hg/wmiirc
si no cambiasteis el directorio por defecto al instalar wmii. Empecemos pues.

Cambiar colores

Es realmente simple. En el archivo de configuración, al principio veréis unas líneas como estas:
export WMII_NORMCOLORS='#000000 #c1c48b #81654f'
export WMII_FOCUSCOLORS='#000000 #81654f #000000'
export WMII_BACKGROUND='#333333'
 La variable WMII_NORMCOLORS se refiere a todas las barras excepto la de la ventana activa en este momento. Los 3 campos de colores, como #000000, son, respectivamente, los colores del texto, fondo y borde, en ese orden.

La variable WMII_FOCUSCOLORS se utiliza igual, pero se refiere a la barra de título de la ventana activa.

Por último, la variable WMII_BACKGROUND especifica el color de fondo del escritorio, que será un color sólido si en la entrada II del tutorial ignorasteis la sección "Añadir un fondo de pantalla".

Los códigos de colores son códigos hexadecimales (HEX). Maneras de conseguir el código hexadecimal de un color concreto hay muchas, en cualquier programa de dibujo lo podemos obtener, o si no os dejo aquí un pequeño selector parecido al del Photoshop en el que el código HEX sale abajo:


Recordad poner el # al poner el código en el archivo de configuración.

Escoger qué ventanas se abrirán automáticamente en la capa flotante

Hay ciertos programas que no están preparados para el sistema de ventanas de mosaico de wmii, y cada vez que se abren nos toca pasarlos a la capa flotante con la combinación Mod+shift+espacio para poder usarlos correctamente. Pero podemos crear filtros para que wmii lleve automáticamente a esta capa las ventanas que le digamos.

Para ello debemos buscar una sección (las secciones empiezan por un #) en nuestro archivo de configuración que se llama Tagging Rules (es la 4ª después de las variables del inicio)

Por defecto, en esa sección hay unas líneas que ponen:

# MPlayer and VLC don't float by default, but should.
/MPlayer|VLC/ floating=on
Las ventanas que contengan en su título algunas de las palabras que añadamos a esa lista, se irán por defecto a la capa flotante. Las palabras o frases deben ir separadas con un | y la lista debe tener un / a cada lado. Un ejemplo típico de esto es las ventanas de operaciones sobre archivos de muchos exploradores (las de "Copiando...", "Moviendo...", etc) ya que suelen ser ventanas pequeñas, y por defecto wmii nos las maximizaría a toda la columna. En este caso dejaríamos la lista así: 
/MPlayer|VLC|Copiando|Moviendo/ floating=on

Si os interesa la siguiente sección, combinaciones personalizadas de teclas, añadid a esa lista "Event Tester".

Combinaciones de teclas personalizadas

En el archivo de configuración se encuentran definidas todas las combinaciones de teclas que ya conocemos,  ya que las combinaciones que entiende wmii son las que aparecen en este archivo. ¿Por qué no añadir las nuestras propias? Por ejemplo: Usamos mucho el programa eclipse y queremos asignar su apertura a una combinación de teclas para abrirlo más rápido.

Pero el que podamos añadir nuestras propias combinaciones es casi necesario en wmii, porque por ejemplo ¿qué pasa con las teclas de subir y bajar el volumen que tan bien funcionan en Windows o en Ubuntu? Nuestro wmii no maneja nada de eso por defecto...

Lo primero de todo, debemos instalar un pequeño programa llamado xev, que simplemente nos permitirá saber el "nombre real" o ID de cada una de las teclas que pulsamos en el ordenador, de forma que luego al escribir nuestras combinaciones personalizadas el wmii sepa qué hemos pulsado exactamente y actúé en consecuencia. El programa xev está en los repositorios de cualquier distro, así que no habrá problema en encontrarlo e instalarlo.

Cuando lo tengamos, abrimos una terminal y escribimos: xev
Se abrirá una pequeña ventanita blanca en la capa flotante (mirar sección anterior, la última línea). En la terminal de detrás irá apareciendo cualquier acción (mover ratón, pulsar tecla, soltar tecla) que hagamos si tenemos el ratón en esa ventanita. Por ejemplo, al pulsar y soltar la tecla "k" obtendremos estos dos eventos:

KeyPress event, serial 31, synthetic NO, window 0x1a00001,
    root 0xba, subw 0x0, time 82478811, (163,178), root:(1532,195),
    state 0x10, keycode 45 (keysym 0x6b, k), same_screen YES,
    XLookupString gives 1 bytes: (6b) "k"
    XmbLookupString gives 1 bytes: (6b) "k"
    XFilterEvent returns: False
KeyRelease event, serial 31, synthetic NO, window 0x1a00001,
    root 0xba, subw 0x0, time 82478875, (163,178), root:(1532,195),
    state 0x10, keycode 45 (keysym 0x6b, k), same_screen YES,
    XLookupString gives 1 bytes: (6b) "k"
    XFilterEvent returns: False
Al pulsar otra tecla cualquiera, aunque no sea una letra, obtendremos su ID, que aparecerá en una línea de la forma: state ###, keycode ### (keysym ###, ID), same_screen YES,
(los ### variarán según la tecla pulsada).

No sólo las teclas "normales" generan eventos. Las teclas especiales de algunos teclados, el botón de encendido de los portátiles, las teclas de función Fn+Tecla (símbolos azules en teclas de algunos teclados de portátiles), etc también los generan, por tanto los podemos utilizar en una combinación exactamente igual que el Control o las letras. 

Esto nos valdrá, por ejemplo, para controlar el volumen del sonido con las teclas Fn azules que hay casi siempre en los teclados de los portátiles, o abrir un cuadro de diálogo de ¿Desea apagar el sistema? al apretar el botón de apagado.

¡Bien! Ya tenemos la ID de nuestras teclas a utilizar. Nos falta decir qué harán esas teclas. Podemos asociar las combinaciones a un comando concreto, cualquiera que funcione en nuestra terminal. Puede ser simplemente el nombre de un programa para iniciarlo o comandos más complejos, como los de subir y bajar el volumen.

Ojo: Algunas teclas no tienen exactamente la misma ID para wmii que la que aparece en el xev, pero sí el 99%, por eso os pongo este truco. Algunas teclas que NO funcionarán con su ID de xev y su ID real son:

  • La tecla Control Izquierdo probablemente salga con ID Control_L. Pues el nombre a poner es simplemente Control.
  • La tecla Alt se llama Mod1 (en mi teclado. Puede que se llame Mod[otronúmero]. Prueba)
  • La tecla Alt Gr se llama Mod5 (de nuevo, en mi teclado al menos).


Ahora para crear efectivamente la combinación nos vamos al final de nuestro fichero de configuración, justo encima de la tercera sección empezando por abajo, subimos hasta que veamos la línea KeyGroup Other y a partir de ahí vamos poniendo nuestras combinaciones (para ordenar un poco la lista, ya que ahí estarán todas las combinaciones predefinidas también).

¿Pero cómo se ponen las combinaciones? No hay más que usar esta sintaxis:
Key IDtecla1-IDtecla2-IDtecla3
(comandos a ejecutar)
Simplemente cambiando lo rojo por las IDs de las teclas que queremos que activen la combinación al pulsarlas a la vez. También se puede usar una sola tecla.

Ojo: Si en la combinación que vais a poner alguna de las teclas tiene una ID del tipo Mod[número], poned esa tecla la primera de la combinación o no funcionará, no sé bien por qué.

Os pongo algunos posibles comandos útiles para que los añadáis a las teclas que os apetezcan:

Subir volumen:
amixer -c 0 set Master -- 2%+


Bajar volumen:
amixer -c 0 set Master -- 2%-


Sonido on/off:
amixer -c 0 set Master toggle


(para estos dos siguientes hay que instalar el programa xbacklight)


Aumentar brillo pantalla portátil:
xbacklight + 10


Disminuir brillo pantalla portátil:
xbacklight - 10


Menú de apagado:


Este siguiente comando desplegará un menú con opciones de apagar, reiniciar, hibernar y suspender. Yo lo tengo añadido a la tecla de encendido del portátil, que en mi caso tenía ID "XF86PowerOff". Para que funcione hay que hacer un par de cosas.

Primero, instalar el paquete pm-utils que proporcionará los comandos de hibernación y suspensión.

Ahora debemos editar el fichero sudoers, que gestiona el comando sudo. No se puede (no se debe) editar directamente, tiene un comando propio. Ejecutamos:
$ sudo visudo
Se abrirá el nano y añadimos al final esta línea:
tunombredeusuario ALL=(ALL) NOPASSWD:/usr/sbin/pm-suspend, /usr/sbin/pm-hibernate, /sbin/poweroff, /sbin/reboot
En donde pongo "tunombredeusuario" cámbialo por el tuyo. Guardar y cerrar nano, y el fichero sudoers  se editará él solito, pero sólo si no habéis cometido errores de sintaxis que podrían hacer que sudo ya no funcionara... Por eso lo de usar el comando visudo, que comprueba que existan esos errores.

Bien, tras todo esto estamos en condiciones de añadir el comando a una combinación de teclas. El comando es:

msg="Opciones:$wi_newline"
                resp=$(wihack -type dialog xmessage -nearmouse -buttons Apagar,Reiniciar,Hibernar,Suspender,Cancelar -print \
                              -fn "${WMII_FONT%%,*}" "$msg")
                if [ "$resp" = "Apagar" ]; then
                        sudo poweroff
                elif [ "$resp" = "Reiniciar" ]; then
                        sudo reboot
                elif [ "$resp" = "Hibernar" ]; then
                        sudo pm-hibernate
                elif [ "$resp" = "Suspender" ]; then
                        sudo pm-suspend
                fi


Cambiar fuentes y activar anti-aliasing en ellas

En el archivo de configuración debemos buscar una línea que empieza por export WMII_FONT='... y cambiarla por:
export WMII_FONT='xft:nombrefuente-tamaño'
¿Qué ponemos en "nombrefuente"? El comando fc-list nos da una lista (probablemente larga) de todas las fuentes que tenemos instaladas, podemos elegir una de ahí. Yo lo tengo así:
export WMII_FONT='xft:Sans-9'
y se lee perfectamente y es mucho más agradable a la vista que la fuente que viene por defecto.

Modificar la información que sale en la barra inferior

El contenido de esa barra lo gestiona una función en el archivo de configuración. Buscadla, tendrá un aspecto así:
status() {
echo -n label blablabla...
}
 Lo que vaya después de label es un comando cuyo resultado debe ser una sola línea, podemos poner lo que queramos, se actualizará cada segundo. Lo normal es poner, al menos, un reloj y la fecha, como ya viene por defecto. Pero ¿qué son esos 3 números con 2 decimales cada uno? Son proporcionados por el comando uptime y simbolizan la carga de trabajo que tiene(n) la(s) CPU(s) en este momento con respecto a un momento anterior(1, 5 y 15 minutos en este caso).

Me explico. El primer número indica cuántas CPUs necesitaría ahora mismo para poder atender completamente los procesos que tenía hace un minuto. El segundo número, hace 5 minutos, y el tercer número, hace 15 minutos. El valor más cercano a la carga actual es claramente el primero, entonces. Por tanto, un número menor que 1 significa que no hay exceso de carga, la CPU está bastante liberada y le da tiempo a atender a todos los procesos corriendo actualmente sin hacer esperar a ninguno. Si tenemos más de un CPU o núcleo, este número hay que dividirlo entre el nº de CPUs/Núcleos que tengamos.

¿Que por qué se usa este sistema de carga de CPU en lugar del típico porcentaje del Administrador de Tareas de Windows? Porque representa de forma más realista el trabajo que está realizando nuestra CPU, ya que en porcentaje no habría diferencia en usar el 100% sin mucha carga de trabajo (no deja "nada pendiente" aunque lo hará en cuanto se le mande algo más) y usar el 100% con mucho trabajo pendiente (demasiados procesos a la vez, tienen que esperar su turno de CPU, lo que deriva en un funcionamiento más lento del sistema).

Bueno, estábamos con la modificación de la información de la barrita inferior para poner lo que queramos. Para que aparezca, debemos poner el comando cuyo resultado queremos de esta manera:
echo -n label $(comando)
Como ejemplo, os dejo el comando que tengo yo:
echo -n label $(echo Carga CPU: $(uptime | sed 's/.*://; s/, / /g' | cut -c 2-5)) '|' RAM usada: $(free -m -o | sed -n 2p | cut -c 26-29)/$(free -m -o | sed -n 2p | cut -c 15-18) MB '|' $(date +"%a %e %b %Y | %T") '|' Volumen: $(if [ -z $(amixer get Master | sed 1,6d | grep -o off) ]; then echo $(amixer get Master | sed 1,6d
 | cut -d '[' -f2 | cut -d ']' -f1); else echo 'Off'; fi) $(if [ "$(acpi -a)" = "Adapter 0: off-line" ]; then echo "| Batería: $(acpi | cut -d' ' -f4,5 | sed -e 's/,//' -e 's/:..$//') horas"; fi
)
Sí, es un poco largo, pero consigo que me salga esta información:
  • Carga CPU: El primer número de los 3 que he comentado antes
  • RAM usada/disponible, en MB
  • Fecha y hora
  • Volumen de audio en porcentaje (o Off si lo tengo silenciado)
  • Batería restante del portátil en porcentaje y tiempo en horas, sólo cuando tengo desconectado el adaptador de corriente.

2 comentarios:

  1. Gracias por la publicación, especialmente por lo de los numericos que aparecen en la barra inferior.
    :-)

    ResponderEliminar

Si te ha sido útil, por favor, comenta, me haces ver que lo que pongo aquí sirve para algo, un saludo :)