Solución usando udev
Dado que HAL está en desuso y udev
ahora 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-tools
paquete desde http://www.voria.org/forum/
Este tutorial asume que usted sabe cómo usar una terminal y usa el vim
editor. Si no sabe vim
, reemplácelo en los comandos por cualquiera gedit
o 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 keyboard
que 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.log
donde 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.h
debajo 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_KEYCODE
y 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 prog1
y prog2
para este ejemplo porque estos no están en uso en mi equipo, sin embargo también se puede utilizar f13
a través f24
o f20
por medio f24
si 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/keymaps
con un nombre adecuado, eche un vistazo a la salida de ls /lib/udev/keymaps
para ver los nombres adecuados. Voy con custom-brightness
el 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-brightness
aspecto 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_ID
y ID_MODEL_ID
y 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/findkeyboards
informa que el teclado de su computadora portátil AT keyboard
debe 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.rules
despué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.