GNU/Linux >> Tutoriales Linux >  >> Linux

Linux – ¿Teclas de reasignación duras del teclado?

Estoy tratando de encontrar una manera de reasignar las teclas del teclado con fuerza.
Intenté usar xmodmap y setxkbmap, pero no funcionan para una aplicación específica. Dichos comandos funcionan para otras aplicaciones/ventanas normales en X tho.

Creo que la aplicación puede estar leyendo los datos sin procesar del teclado e ignorando la entrada X.

Entonces, ¿cómo reasignar claves sin usar xmodmap y setxkbmap? si alguna vez es posible hacerlo usando algún software.

También probé xkeycaps, xkbcomp, pero no probé loadkeys, ya que se ejecuta en X.

Encontré aquí que podía probar setkeycodes , “porque después de asignar el código clave del kernel, el botón debería funcionar en xorg”, pero también descubrí que “no se puede usar 'setkeycodes' en teclados USB”, ese es mi caso (me interesa en caso de que alguien lo haga funcionar en ps2 como Creo que me vendría bien un adaptador).

Esto parecía prometedor "Asignar códigos de escaneo a códigos clave", pero después de algunas pruebas nada cambió, aquí están:
Encontré el código clave "36" (tecla "j") en vt1 con showkey
Encontré el código de escaneo "7e" (teclado ".") en vt1 con showkey --scancodes

$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
 KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did not change after the commands..

Obs.:tampoco funcionó con:KEYBOARD_KEY_7e=j

Algunas formas más alternativas (por @vinc17) para encontrar las claves:
evtest /dev/input/by-id/... o
input-kbd 3 (coloque el índice de identificación que se encuentra en ls -l /dev/input/by-id/* de ej. evento3)

PD:*Si está interesado en probarse a sí mismo, el hilo relacionado con la aplicación es este:http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ Los problemas que son iguales:algunas claves (KP_Decimal, DownArrow, UpArrow, RightArrow) se ignoran y se consideran todas con el mismo valor allí "0x00"

Respuesta aceptada:

Primero encuentre el código de escaneo de la tecla que necesita reasignarse, p. con el evtest utilidad. Una línea como la siguiente (con MSC_SCAN en él) debe salir:

Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068

seguido de un segundo que da el código de clave actual. Si no MSC_SCAN se emite la línea, esto se debe a un error del controlador del kernel, pero el código de escaneo todavía se puede encontrar con input-kbd utilidad; evtest debería haber dado el código clave, de modo que debería ser fácil encontrar la línea correspondiente en el input-kbd salida (por ejemplo, usando grep ).

Una vez que se hayan determinado los códigos de escaneo de las teclas que se reasignarán, cree un archivo como /etc/udev/hwdb.d/98-custom-keyboard.hwdb que contiene las reasignaciones. El comienzo del archivo /lib/udev/hwdb.d/60-keyboard.hwdb da alguna información. En mi caso (que funciona), tengo:

evdev:input:b0003v05ACp0221*
 KEYBOARD_KEY_70035=102nd       # Left to z: backslash bar
 KEYBOARD_KEY_70064=grave       # Left to 1: grave notsign
 KEYBOARD_KEY_70068=insert      # F13: Insert

(Antes de udev 220, tenía que usar keyboard:usb:v05ACp0221* para la primera línea.)

Relacionado:Linux:¿el número principal de TTY de su Unix?

El evdev: la cadena debe estar al principio de la línea.
Tenga en cuenta que las letras en la identificación del proveedor y del producto deben ser mayúsculas.
Cada KEYBOARD_KEY_ la configuración debe tener exactamente un espacio antes (nota:una línea sin espacios dará un mensaje de error, y una línea con dos espacios se silencio ignorado con versiones antiguas de udev). KEYBOARD_KEY_ es seguido por el código de escaneo en hexadecimal (como lo que ambos evtest y input-kbd dar). Se pueden obtener valores válidos de evtest salida o input-kbd salida, o incluso desde el /usr/include/linux/input.h archivo:por ejemplo, KEY_102ND daría 102nd (eliminando KEY_ y convertir a minúsculas), que usé arriba.

Después de guardar el archivo, escriba:

udevadm hwdb --update

para (re)construir la base de datos /etc/udev/hwdb.bin (puede comprobar su marca de tiempo). Entonces,

udevadm trigger --sysname-match="event*"

tendrá en cuenta la nueva configuración. Puedes consultar con evtest .

En 2014, el udev publicado tenía información incompleta o con errores en /lib/udev/hwdb.d/60-keyboard.hwdb , pero puede ver la última versión de desarrollo del archivo y/o mi informe de error y la discusión sobre la documentación y los problemas de espaciado.

Si esto no funciona, es posible que el problema se encuentre después de aumentar temporalmente el nivel de registro de udevd con udevadm control (Consulte la página del manual de udevadm(8) para obtener más detalles).

Para el antiguo udev versiones como 204, este método aún debería funcionar.


Linux
  1. 8 consejos para la línea de comandos de Linux

  2. Tener una vaca en la línea de comandos de Linux

  3. Encárguese en la línea de comandos de Linux

  4. Linux – ¿Modo de teclado sin formato?

  5. Copia de seguridad de todo el disco duro de Linux?

Cómo iniciar en la línea de comandos de Linux

Domina la línea de comandos de Linux

Conceptos básicos de la línea de comandos de Linux:sudo

Reasignar teclas de teclado personalizadas en Linux - Tutorial

Linux:¿acceso directo para minimizar todas las ventanas?

Cedilla bajo C (ç) en el diseño de teclado 'US international with dead keys' en Linux