Recientemente compré un teclado Unicomp que viene con teclas de Windows y Alt derecha intercambiadas. El teclado se identifica así en lsusb:
Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc
¿Hay alguna manera de hacer que el kernel (es decir, no basado en xmodmap) intercambie las teclas right-alt y windows para que todas las aplicaciones las vean en los lugares intercambiados incluso si obtienen una entrada de teclado sin procesar (intercambiar cosas con xmodmap no hará eso) ? ¿Hay alguna manera de tener eso solo para este teclado?
linux
keyboard-layout
FUZxxl
fuente
fuente
Respuestas:
Sí, es posible usar XKB. A diferencia de xmodmap, XKB puede reasignar sus claves para dispositivos individuales.
Nota: Asegúrese de tener xkbcomp> 1.2.0
Primero enumere sus dispositivos con:
xinput list
Obtendrás algo como esto:
Identifique la cadena de su dispositivo y edite el siguiente script de shell, cambiando la línea de sed con una que se ajuste al nombre de su dispositivo. Luego cambie las teclas que necesita reasignar.
Ejemplo: cargue
xev
y presione la tecla que desea reasignar. Suponga que descubre que es el código clave 84. Busque 84 en https://gist.github.com/zoqaeski/3880640 . El nombre clave que hay<KP5>
. Luego busque la clave por la que desea reemplazarla (en el mismo enlace, más abajo ) y copie lo que está dentro de los corchetes. Repita el proceso para todas las teclas que desee.Luego fuente (puede agregarlo a su .xinitrc). ¡Todo listo! Ahora presionar las teclas debería generar la salida deseada, solo para el dispositivo que especificó.
Editar : Recientemente, he notado que, por alguna razón, la nueva configuración no se aplica de inmediato. Primero debe presionar una tecla en su otro teclado, luego probar las teclas configuradas en su teclado modificado. No sé por qué sucede esto, tal vez algún tipo de caché.
fuente
sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p'
c) Sí, definitivamente debe probarlo primero reemplazando$remote_id
con el número de identificación. Tenga en cuenta que hay dos referencias$remote_id
allí, ¿cambió las dos?$remote_id
, asegúrate de comentar la línea[ "$remote_id" ] || exit
si aún no lo has hecho, de lo contrario simplemente se rescatará.$9
no funcionará, ¿querías decir9
?Para cualquier otra persona que venga de Google y quiera una respuesta más en línea con lo que el interlocutor esperaba originalmente, conozco dos formas de reasignar eventos a
evdev
nivel para que el cambio se aplique a todas las aplicaciones:udev proporciona una API para modificar las entradas de la base de datos de hardware que controlan las asignaciones entre códigos de escaneo y códigos clave. Esta página de ArchiWiki , que contiene instrucciones, dice explícitamente que funcionará tanto para X11 como para la entrada de la consola.
La esencia es que crea una entrada personalizada
/etc/udev/hwdb.d/
que consiste en un patrón de coincidencia del dispositivo y algunas definiciones de reasignación de código de escaneo a código clave, luego se ejecutasystemd-hwdb update
para reconstruir la base de datos yudevadm trigger
aplicarla sin reiniciar.Dado que Wayland no usa el subsistema de teclado X11 y los principales compositores de Wayland como GNOME Shell y Weston no implementan interfaces de usuario para configurar los aspectos relevantes de libinput, alguien escribió un demonio llamado evdevremapkeys que resuelve el problema de manera similar al controlador de espacio de usuario G15Daemon para Logitech Teclados para juegos G15.
(Se traga los eventos que pretende reasignar, por lo que nada más que escuche en el dispositivo puede verlos, luego emite los eventos corregidos a través de la
uinput
API para crear dispositivos de entrada a nivel de kernel desde el espacio de usuario).fuente
Para aquellos que no tuvieron éxito con la opción @Watcom, simplemente coloque su nuevo archivo de mapeo, algo así como:
Para / usr / share / X11 / xkb / symbols / como quizás root (ubuntu, puede ser diferente para su distribución), llame al archivo 'custom'. Solicite su cadena de diseño actual con
setxkbmap -device <device id> -print | grep xkb_symbols
y agréguela+custom
. Establezca un nuevo diseño con teclas reasignadas con una cadena de diseño modificada:El efecto no es permanente y desafortunadamente se restablece cuando se conecta otro teclado, todavía no se sabe cómo solucionarlo. Sin
.bashrc
embargo, puede agregar el comando anterior a su , para que las teclas se intercambien al reiniciar si es necesario.fuente