Solución usando udev
Dado que HAL está en desuso y udevahora se usa, este enfoque es preferible a mi otra respuesta (aunque creo que la solución que usa HAL es más simple).
Sin embargo, para muchas teclas de función, simplemente puede usar Configuración del sistema> Teclado> Atajos para enlazar un script, ¡intente esto primero! Te ahorra muchos problemas. Por ejemplo, las teclas de brillo esto no funciona (no tengo ni idea de por qué no), así que si quieres saber cómo cambiar el comportamiento de, por ejemplo, las teclas de brillo, sigue leyendo.
NOTA : Si está ejecutando una computadora portátil Samsung, puede reparar todas las teclas de función (según el modelo) instalando el samsung-toolspaquete desde http://www.voria.org/forum/
Este tutorial asume que usted sabe cómo usar una terminal y usa el vimeditor. Si no sabe vim, reemplácelo en los comandos por cualquiera gedito nano.
Determinando tu teclado
/lib/udev/findkeyboards
debería imprimir los teclados que están conectados a la computadora, en mi caso
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Ahora hay dos opciones:
Teclados USB :
si desea reasignar su teclado USB, inspecciónelos ejecutando
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
donde debe reemplazar el 9 en la declaración awk por el número correcto. La salida debe ser similar a
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
que indica correctamente que mi teclado se maneja a través de mi receptor USB Logitech (entrada / evento7 resultó ser mi mouse Logitech G9 que tiene algunos botones programables).
Teclado de la computadora portátil :
si desea reasignar el teclado de su computadora portátil, debe recordar el número para el AT keyboardque es 4 en mi caso. También obtenga la información de dmi para su computadora portátil:
cat /sys/class/dmi/id/sys_vendor
que es en mi caso
SAMSUNG ELECTRONICS CO., LTD.
y
cat /sys/class/dmi/id/product_name
que es en mi caso
305U1A
Determine su asignación actual de sus teclas de función
Ahora podemos determinar nuestro mapeo de teclas actual escuchando el teclado (inserte el número correcto)
sudo /lib/udev/keymap -i input/event4
puede salir de este comando usando Escel teclado o Ctrl+ cen otro teclado.
Si su pantalla comienza a desplazarse hacia abajo con mucha fuerza, presione Escy Ctrl+ cvarias veces e intente nuevamente con
sudo /lib/udev/keymap -i input/event4 2> /dev/null
o, si aún tiene el problema de desplazamiento
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
En el último caso, todavía tendrá el desplazamiento, pero si presiona las teclas de funciones, deben ir a ~/keymap.logdonde pueda leerlas más tarde.
Ahora podemos verificar la asignación actual de sus teclas de función presionándolas, lo que debería darle una lista como (este es mi Fn+ a F1través de Fn+ F12):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
Ahora escriba los códigos de escaneo para los que desea que cambie el comportamiento.
Cambiar los códigos clave para los códigos de escaneo
Si ve que el código de la llave claramente no cubre lo que espera que haga la llave, puede mirar /usr/include/linux/input.hdebajo de Teclas y botones para ver si hay un código de llave que coincida mejor con lo que realmente quiere que suceda. Los códigos clave están en el formato KEY_KEYCODEy debe escribir la parte posterior KEY_en minúsculas. A veces, cambiar esto es suficiente para resolver el problema.
Sin embargo, las teclas de brillo a menudo tienen el código clave correcto asociado con ellas, y esto es lo que no les permite reasignarlas. Por lo tanto, debemos cambiarlos a otros códigos clave. Vamos a utilizar prog1y prog2para este ejemplo porque estos no están en uso en mi equipo, sin embargo también se puede utilizar f13a través f24o f20por medio f24si tiene un teclado Apple que tiene F1a través de F19las teclas.
Cree un mapa de teclas personalizado : cree
un archivo de mapa de teclas en el directorio /lib/udev/keymapscon un nombre adecuado, eche un vistazo a la salida de ls /lib/udev/keymapspara ver los nombres adecuados. Voy con custom-brightnessel propósito de esta pregunta.
sudo vim /lib/udev/keymaps/custom-brightness
e ingrese los códigos de escaneo de las teclas que desea cambiar, seguidos de los códigos de escaneo que desea que tengan. Mi custom-brightnessaspecto es este:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Cree un archivo de liberación de clave personalizado. Solo si está cambiando el teclado de su computadora portátil : a
veces, el evento de liberación de la tecla no se envía correctamente, lo que hace que la computadora se bloquee. Para evitar esto, también escribiremos un archivo de liberación de clave personalizado
sudo vim /lib/udev/keymaps/force-release/custom-brightness
este archivo debe contener los mismos códigos de escaneo, el mío parece
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Asegúrese de que las nuevas asignaciones estén cargadas en los archivos de reglas.
Ahora debemos asegurarnos de que sus asignaciones estén cargadas. Podemos hacer esto editando /lib/udev/rules.d/95-keymap.rules, por lo que es inteligente hacer una copia de seguridad
Nuevamente tenemos dos opciones:
Teclados USB :
dado que tiene un teclado USB, debe agregar su entrada LABEL="keyboard_usbcheck"y debe estar más allá de las otras entradas del fabricante de su teclado. Esto es porque mi teclado con
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
ya coincide con una de las reglas y, de lo contrario, se sobrescribe.
Agregue la siguiente regla, donde debe cambiar el ID_VENDOR_IDy ID_MODEL_IDy el nombre de su mapa de teclas adecuadamente
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Teclado de la computadora portátil :
si se /lib/udev/findkeyboardsinforma que el teclado de su computadora portátil AT keyboarddebe ser su regla LABEL="keyboard_vendorcheck", de lo contrario, colóquelo debajo LABEL="keyboard_modulecheck". Nuevamente colóquelo debajo de las otras entradas para el fabricante de su computadora portátil. Agregue la siguiente regla ( SAMSUNG ELECTRONICS CO., LTD.es un poco larga, así que usé un comodín ')
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Ahora también agregue una regla /lib/udev/rules.d/95-keyboard-force-release.rulesdespués de hacer una copia de seguridad
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
De nuevo, bajo las otras entradas de su fabricante, agregue
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Asegúrese de que udev cargue las nuevas reglas
Para cargar las nuevas reglas ejecute
sudo adevadm trigger
NOTA: udevadm control --reload-rules(aún en las instrucciones de muchos sitios web) no funciona.
Ahora verifique si las reglas fueron aplicadas con éxito por
sudo /lib/udev/keymap -i input/event4
que ahora debería informar sobre las teclas de brillo
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Reasigne las claves en la Configuración del sistema
Si el último paso informó los códigos de clave correctos, las teclas comienzan a funcionar automáticamente (en caso de que primero tuvieran los códigos de clave incorrectos).
Para el brillo, todavía tiene que vincular las teclas a un script que ahora es posible usando Configuración del sistema> Teclado> Accesos directos .
Disfrutar
Notas :
Si sus claves tenían un código de clave incorrecto y fueron arregladas por este enfoque, siga las instrucciones en /usr/share/doc/udev/README.keymap.txt.gz(puede abrir esto sin extraer el uso zless) y envíe sus resultados a las direcciones de correo electrónico mencionadas allí, luego los cambios se pueden incluir en la próxima versión. ¡Muchos usuarios se beneficiarán!
Muchas gracias a esta útil publicación de Vaidas Jablonskis.