Introducción
A pesar del título del documento, gran parte de él no estará dedicado a algún programa o mecanismo de hotkeys o teclas de acceso rápido en particular. Más de la mitad del mismo cubre detalles de cómo lanzar y manejar aplicaciones mediante la línea de comandos; esto es, qué usos prácticos es posible dar a las teclas de acceso rápido. Esto debido a que una vez instalado y configurado el manejador de accesos rápidos… pues hay que darle algún uso, y muchas aplicaciones permiten hacer cosas interesantes desde la línea de comandos, que es el esquema que utiliza el manejador de accesos rápidos.
La primera parte del documento cubre la obtención, instalación y configuración de xbindkeys, un programa para el manejo de accesos rápidos de teclado. La segunda muestra la manera de lanzar aplicaciones arbitrarias y cómo darle órdenes específicas a varias aplicaciones; el ejemplo más trivial es el pedirle a xmms que avance en la lista de reproducción. Dado que uso KDE, hay una sección dedicada a DCOP y a varias aplicaciones KDE. En general lo concerniente a manejo de aplicaciones está muy incompleto, y apreciaría ayuda para añadir más aplicaciones.
En cuanto a detalles legales y de distribución, este documento se distribuye bajo la licencia GNU FDL.
El manejador de hotkeys
En Linux varios administradores de ventanas proveen su propia implementación y manejo de algún tipo de accesos rápidos de teclado o hotkeys. En la mayoría de los casos éste es bastante limitado, permitiendo manejar apenas detalles de administración de ventanas y algunas teclas multimedia. Una de las grandes excepciones es KDE, en donde es posible definir un acceso rápido para lanzar cualquier programa, o aun cualquier comando arbitrario, sin importar si es una aplicación gráfica o en línea de comandos. En otro caso… no hay mucho que hacer, al menos en lo que se refiere al manejador de ventanas (este es otro punto en el que me agradaría que se me contradijera).
Esta carencia de mecanismos puede parecer una desventaja grave a primera vista, pero en últimas permite una uniformidad muy conveniente. Con el programa adecuado, por supuesto. Usando xbindkeys es posible mantener una configuración única de accesos directos para cada usuario, y con el valor agregado de ser independiente del manejador de ventanas que se utilice. Otra característica importante de xbindkeys es que en las combinaciones de teclas se pueden incluir los botones del ratón.
Instalación.
xbindkeys se puede descargar de:
http://hocwp.free.fr/xbindkeys/xbindkeys-1.7.1.tar.gz
El archivo es bastante pequeño, mide cerca de 120KB. Sólo hay que descomprimirlo, compilarlo e instalarlo. De manera más específica:
tar -zxf xbindkeys-1.7.1.tar.gz
cd xbindkeys-1.7.1/
make
make install
Configuración y uso.
Hacen falta dos cosas para hacer funcionar adecuadamente xbindkeys: Hacer que arranque al iniciar X y crear un archivo de configuración. Para lo primero hace falta añadir la línea
xbindkeys &
al archivo $HOME/.xsession. En la página del programa se advierte que en ciertos casos esto podría no funcionar (en mi caso ni siquiera arrancaba X). Si se tiene problemas con ese archivo, la línea puede colocarse en el archivo $HOME/.xinitrc, en la línea anterior a la instrucción exec $WINDOWMANAGER. A veces este archivo no existe (¿?), pero hay uno llamado .xinitrc.template. Sólo hay que renombrarlo y hacer el cambio que ya se indicó.
El otro detalle es crear el archivo de configuración, con los comandos a ejecutar y las teclas de acceso rápido correspondiente. La mejor manera de hacerlo es crearlo a partir de una plantilla. Para crearla ejecute el comando:
xbindkeys -d > ~/.xbindkeysrc
La opción -d hace que xbindkeys imprima en la salida estándar un ejemplo de archivo de configuración, y esta salida se redirige al archivo ~/.xbindkeysrc, que es el que usa por defecto xbindkeys. Listo.
Ya es posible modificar el archivo ~/.xbindkeysrc para añadir nuevos comandos y asignarles secuencias de teclas. Para añadir un par comando-hotkey hay que añadir dos líneas en el archivo de configuración, una indicando el comando a ejecutar y otra definiendo la secuencia de teclas que dispara el comando. Dos ejemplos:
«xterm -e vim &»
Control+Alt+v
«crack-attack –solo &»
Control +b:3
El primer ejemplo es una hotkey clásica: Control+Alt+algo para abrir algún programa. El segundo es algo particular ya que incluye un botón del ratón, mas exactamente el tercero. El botón se especifica con el número escrito, en el caso del ejemplo con el número 3. Al botón izquierdo y al central le corresponden los números 1 y 2, respectivamente.
En algunos casos no se sabe qué denominación dar a una tecla en particular, como la tecla Win o los botones de los teclados multimedia. Digamos que se quiere que el botón My Computer de un teclado Genius KB-0210 (La referencia del teclado se da simplemente para dar mayor realismo al ejemplo, no es ningún tipo de requerimiento) abra una ventana de konqueror. Lo primero es determinar la ‹‹identidad›› de la tecla. Lo que hay que hacer es ejecutar xbindkeys dándole la opción de captura de tecla, ejecutando el comando (dándole la opción) xbindkeys -k. Al presionar la tecla el programa muestra como salida unas indicaciones y la identificación de la tecla presionada, que debe usarse en el archivo de configuración para definir el acceso rápido de teclado. En este caso la salida fue m:0x10 + c:235. Las líneas en el archivo de configuración serían:
«konqueror»
m:0x10 + c:235
A manera de anotaciones finales hay que indicar que es muy recomendable colocar un ampersand (el símbolo &) en los comandos a ejecutar para que lo hagan en segundo plano, sin interferir con el funcionamiento de xbindkeys. Aún sin el ampersand funciona bien, pero es mejor ponerlo. Otro detalle es que el comando que se quiera ejecutar debe estar dentro de comillas dobles, bien sea un comando solo o que tome varios argumentos. TODO lo que tenga que ver con el comando, como opciones y argumentos, debe estar dentro de las comillas.
Manejo de programas varios.
Con los manejadores de hotkeys es posible ejecutar comandos arbitrarios de la consola. Las aplicaciones inmediatas de este esquema son: lanzar un programa, darle una orden, o cerrarlo (en ciertos casos). Obviamente, todo esto se puede hacer ‹‹manualmente››: bajar el volumen, lanzar el navegador, etc. Lo atractivo de las teclas de acceso rápido es que permiten realizar estas acciones sin cambiar de contexto, es decir, sin cambiar el foco de la ventana en la que se está trabajando.
Detalles del shell
Esta sección puede dar la impresión de estar fuera de lugar aquí, pero está para indicar un par de detalles importantes y que pueden llegar a ser útiles para lanzar una aplicación. Estos detalles son los operadores && y || del shell bash. Ambos se evalúan de manera ‹‹cortocircuitada››: en cuanto se sabe que la expresión es verdadera (o falsa, según sea el caso), se detiene la evaluación.
El operador && se usa para ‹‹encadenar›› la ejecución de varios comandos de manera condicionada. Un comando sólo se ejecutará si el anterior terminó exitosamente. Si alguno falla, el resto no se ejecuta. Por ejemplo:
true && nethack.tty
Ejecutará el comando true (que siempre termina exitosamente) y luego ejecuta nethack.tty.
./configure && make && make install: Sólo si ./configure termina bien. De manera más técnica, cuando un programa termina exitosamente su ejecución retorna a quien lo llamó un 0 (cero). En bash el valor de retorno siempre queda almacenado en la variable ?. Puede verse con la instrucción echo $? se ejecutará make, y sólo si make termina bien… Ya debe estar claro cómo funciona este operador. Si ./configure falla, no se ejecutará make, y mucho menos make install; una vez que se sabe que la expresión es falsa (debido a la falla de ./configure) no se evalúa el resto.
El operador || funciona de manera similar al &&, con la diferencia de que cada comando sólo se ejecuta si el anterior falló. Ejemplos:
firefox || opera || konqueror
Se intenta ejecutar el comando firefox. Si falla (o no existe), se intenta ejecutar el comando opera, y así sucesivamente. Si, por ejemplo, se puede ejecutar el comando opera, no se continua ejecutando el resto de la instrucción.
Lanzamiento de aplicaciones.
En este aspecto no hay mucha complejidad; sólo hay que conocer el nombre del archivo binario del programa que se quiera ejecutar, lo que en la mayoría de los casos es simplemente el nombre de la aplicación. Para los casos en que no se conoce este nombre, como el de OpenOffice, se puede revisar el comando que ejecuta el menú K para esa aplicación, o simplemente abrir el programa y luego ejecutar en una consola el comando ps ax, que mostrará todos los programas corriendo con el nombre que se está buscando. Un último detalle a considerar es el pasar ciertos parámetros u opciones a la aplicación al momento de ejecutarla, ya que de otra forma podría no arrancar. De cualquier manera, estos casos son más bien atípicos.
Aplicaciones gráficas.
No hay mucho que decir, sólo hay que usar como comando el nombre de la aplicación que se va a lanzar.
Aplicaciones en modo texto.
Los emuladores de consola, como xterm o konsole pueden ser ejecutados como si fueran una aplicación cualquiera (lo son). Si lo que se quiere es ejecutar una aplicación que funciona en modo texto se usa como ‹‹envolvente›› un emulador de consola. Por ejemplo, si se quisiera ejecutar vim, se ejecuta el comando xterm -e vim. Esto abre vim en una nueva ventana de xterm, y cuando se cierra vim, la ventana de xterm se cierra también. konsole puede ejecutar las aplicaciones de modo texto exactamente de la misma manera.
Manejo de aplicaciones.
firefox
firefox y mozilla (opera también) pueden recibir instrucciones ‹‹remotas››, haciendo que, por ejemplo, abran una nueva pestaña, o abara una ventana para componer un e-mail. Por ejemplo, para hacer que firefox abra una nueva pestaña, se usa la instrucción:
firefox -remote «openURL(,new-tab)»
No está de más aclarar que estas instrucciones funcionan cuando hay una instancia de firefox ejecutándose. La lista completa de comandos remotos disponibles puede obtenerse en:
http://www.mozilla.org/unix/remote.html
xmms
xmms cuenta con parámetros desde la línea de comandos que hacen que el reproductor ejecute una acción dada, a saber: avanzar o retroceder en la lista de reproducción, pausar, detener o empezar la reproducción. Pro ejemplo, el comando xmms -r hace que la instancia de xmms que se esté ejecutando retroceda en la lista de reproducción. Mejor aún, si xmms no está abierto, lo abre y ejecuta la acción especificada (avanzar en la lista en este caso). Las banderas (opciones) que hay que pasar a xmms están descritas en su página man.
Mezclador de sonido.
El mezclador de sonido de ALSA(Advanced Linux Sound Architecture), amixer, permite ajustar el nivel de sonido de una canal determinado. Por ejemplo, el comando:
amixer sset Master 5%+
Aumenta el volumen del canal maestro en un 5%. Aunque la definición correcta sería que se suma al volumen un 5% del volumen máximo. La instrucción
amixer sset Master 75%
fija el volumen en un 75% del total. Si en la primera instrucción se cambia el + por un – el volumen disminuye en un 5%.
KDE.
Varias aplicaciones KDE pueden recibir ‹‹mensajes›› a través de la línea de comandos, usando DCOP. Este programa es el que se encarga de entregar los mensajes relevantes a las aplicaciones, y puede ser invocado desde la línea de comandos. Incluso tiene una mini API para C++ y para Python. Hay ciertos peros respecto a lo que se puede hacer con él, pero igual es muy útil para controlar ciertos aspectos de las aplicaciones KDE. La cantidad de acciones que se pueden ejecutar con DCOP es bastante grande, y no hay una documentación formal al respecto; estas acciones (más exactamente las interfaces que proporcionan los programas KDE para alguna acción en particular) pueden consultarse usando el programa KDCOP, que muestra una jerarquía de objetos correspondientes a cada programa KDE ejecutándose usando un diagrama de árbol, junto con las interfaces que cada programa hace disponible y –lo más importante— sus métodos.
Una anotación importante al respecto de cómo hacer las llamadas a DCOP usando la línea de comandos es que cada elemento del árbol se separa con espacios, no se escriben los paréntesis de la función a llamar, y si recibe argumentos se colocan separados mediante espacios.
kwin.
Este programa es el manejador de ventanas de KDE. Entre las funciones que proporciona a través de DCOP destacan las de manejo de escritorios, lo que incluye el reordenamiento de ventanas, moverse entre los escritorios y matar ventanas (de manera similar a xkill). Por ejemplo, para moverse al siguiente escritorio se ejecuta el comando:
dcop kwin KWinInterface nextDesktop
ksmserver.
Este programa es mencionado aquí casi que exclusivamente para mostrar cómo terminar la sesión de KDE mediante un comando de consola. La llamada es (los argumentos que se le pasan a esta llamada fueron ‹‹un disparo en la oscuridad››. No tengo ni idea de qué signifiquen, pero el resultado de hacer la llamada es terminar de inmediato la sesión guardando el estado actual)
dcop ksmserver ksmserver logout 0 0 0
Como dije antes, este ejemplo es más para mostrar cómo funciona DCOP que para mostrar una funcionalidad con teclas, ya que KDE proporciona hotkeys para terminar una sesión de manera inmediata. Tal vez la utilidad más importante de este comando es poder terminar la sesión en KDE usando un script.
kicker.
Es el programa encargado de la barra de tareas. Una de las llamadas DCOP más útiles (si no la única) es
dcop kicker kicker showKMenu
konsole.
Tanto con este programa como con konqueror existe el problema de que hace halta conocer el PID9 (process ID, identificador de proceso) de la instancia del programa que se esté ejecutando. Es decir, una llamada DCOP se vería como
dcop konsole-3504 konsole newSession
Este detalle seguirá siendo un problema, pero al menos no tan grave como se pensaría inicialmente. Podría tenerse un acceso rápido de teclado que creara una nueva sesión de terminal o abriera una si no existe ninguna. El comando sería
dcop konsole-$(pidof konsole) konsole newSession || konsole
El ‹‹truco›› está en la orden pidof. Es un programa que retorna el PID de un proceso con el nombre dado, en este caso konsole. El único pero a esta solución es que si konsole fue iniciado por kdeinit (esto pasa al iniciar konsole desde un botón del kicker, por ejemplo) la solución no funciona. Pero el ejemplo, tal y como está dado, funciona bien. Si no hay abierta una instancia de konsole, se abre una, y si está abierta, se crea una nueva sesión.
Licencia del documento
Derechos de Autor © 2005 por Javier Rojas. Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.2 o cualquier otra versión posterior publicada por la Free Software Foundation; sin secciones invariantes. Una copia de la licencia es proveída en el sitio a través de este enlace: Licencia de Documentación Libre GNU.
Autor: Javier Rojas (Julot)
Colaboración para espaciolinux.com