Después de descubrir cómo cambiar la asignación de códigos de escaneo a códigos clave usando udev
, vea esta pregunta , me preguntaba cómo esos códigos clave (o eventos, si lo desea) se asignan a la acción adecuada.
Entonces, por ejemplo, si presiona volume upsu teclado, se envía un código de escaneo que luego se convertirá en el volumeup
código de la tecla. Pero, ¿cómo se intercepta este código clave, se sube el volumen y se muestra la notificación correspondiente?
Supongo que en algún lugar debe llamarse un guión, por lo que me gustaría saber dónde están esos guiones.
EDITAR: Los códigos clave que menciono no deben confundirse con los códigos clave devueltos xev
, pero también estoy interesado en ellos;)
notify-osd
funciona? Creo que ahí es donde se envían las notificaciones de brillo ...Respuestas:
Ok, encontré esto en https://help.ubuntu.com/community/MultimediaKeys
Entonces, los códigos clave se asignan a keyym, ¿dónde están los keyym? Encontré y respondí a esta pregunta: ¿Dónde encuentro una lista de todos los X keysyms en estos días? Como estamos hablando de las teclas de volumen, se encontrará
XF86keysym.h
en el código fuente mencionado en la respuesta.En ese archivo en mi computadora encontré lo siguiente para el volumen:
Extraño ... valores diferentes de cualquier otra cosa, ¿tal vez hay múltiples sistemas para manejar claves? http://crunchbang.org/forums/viewtopic.php?id=16656
Estoy usando Xubuntu, y para controlar las teclas, necesito asignar las acciones manualmente (de esta manera ¿Cómo cambio los atajos de teclado en xubuntu? ). Sin embargo, las notificaciones parecen independientes, como si estuvieran captando la pulsación de teclas y actuando en consecuencia. Puede significar que otros programas en Ubuntu están configurados de esta manera, por lo que no hay necesidad de asignar scripts a las teclas.
Así que estoy bastante seguro de que los programas ahora están recogiendo la clave (por lo que no se encuentran scripts).
En Xubuntu tuve este problema con Pulse Audio y el uso de secuencias de comandos personalizadas para cambiar el volumen, parecía que Pulse estaba interceptando la tecla Silencio , la tecla Silencio silencia Alsa y PulseAudio, pero solo activa Alsa para soluciones interesantes.
Mira esto sobre NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes
Si observa estos diagramas: https://wiki.ubuntu.com/NotifyOSD#Architecture
Especialmente este:
Muestra que hay un "escucha de claves de hardware" que recibe el formulario DBus o HAL? Luego "recupera el elemento visual del sistema", que los iconos de sonido y brillo están en la fuente de Notify-OSD, y luego hace la burbuja desde allí.
Todo esto es una locura confusa, pero por lo que yo entiendo (hasta ahora):
raw scancode (ej. e016)> keycode (ej. 160)> keysym (ej. XF86AudioMute)> gnome-settings-daemon (ej. subir volumen)> señal DBus> hardware-keys-listener para notificar-osd (u otro programa de escucha)
fuente
En la mayoría de los casos, no hay scripts que se ejecuten. Causan que los eventos se envíen al administrador de ventanas o al daemon de configuración. El único momento en que tengo conocimiento de los scripts en el proceso es cuando configura enlaces de teclas personalizados. Para las combinaciones de teclas personalizadas, puede agregar líneas de comando (ejecutables o scripts) y vincularlas a las teclas.
Consulte esta respuesta que escribí a una pregunta sobre cómo realizar copias de seguridad de las combinaciones de teclas en Ubuntu: ¿Dónde se almacenan los métodos abreviados de teclado de GNOME? Tengo un script que respalda o restaura todas las combinaciones de teclas, incluidas las combinaciones de teclas personalizadas. Si ejecuta el script, puede ver dónde se almacenan las combinaciones de teclas en dconf y qué aplicación recibe una notificación sobre el evento clave.
fuente
La respuesta se refiere a los conductores .
Todo hardware debe tener un controlador para interactuar con el sistema operativo.
Citando http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :
Un dispositivo tiene un registro de dispositivo que almacena los bits de Control / Estado y los bits de Datos. Cada vez que es necesario transferir algunos datos, generalmente se envían configurando los bits de datos.
Entonces, cada vez que presiona alguna tecla en su teclado, algunos datos se escriben en el registro. El controlador del dispositivo lee esos bits y se realiza la acción adecuada. Esta es la breve explicación.
Enlaces:
Si está interesado, le recomiendo que lea esta serie en Controladores de dispositivo que consta de 17 artículos bien escritos de linuxforu : http://www.linuxforu.com/tag/linux-device-drivers-series/ .
Puede leer el documento específico que contiene instrucciones sobre cómo escribir un controlador de dispositivo para teclado USB: http://www.emntech.com/docs/USB_KeyBoard_Driver_eMNTech.pdf
Si está muy entusiasmado con los controladores de dispositivos linux, lea el libro "Controladores de dispositivos Linux" que está disponible como pdf de forma gratuita: http://lwn.net/Kernel/LDD3/
fuente
evdev
controlador, pero no veo cómo sería útil aquí ...