Reasignación de teclas que generan múltiples códigos de escaneo

33

Tengo un ThinkPad W540. En su teclado hay cuatro teclas multimedia sobre el teclado numérico. Dos de esas claves generan códigos de teclas (y, aparentemente, códigos de exploración) que corresponden a la combinación de teclas, Win_L+ Ly Win_L+ E. En otras palabras, para la clave que genera Win_L+ L,
showkey --scancodesdevuelve esto:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

El setkeycodescomando requiere secuencias de dos bytes sin escape o de escape de un solo byte para denotar códigos de escaneo, y showkeyme da mucho más que eso, por lo que no puedo volver a asignar esa clave a uno de los códigos de teclas libres en mi sistema con un sencillo setkeycodes <scancode> <keycode>.

Realmente agradecería cualquier pista sobre cómo puedo reasignar esa tecla a otra cosa que no simplemente duplique una de las combinaciones de teclas existentes en mi teclado.

caminante lunar
fuente
1
Es posible que desee echar un vistazo a esto: teclas de acceso directo que son independientes de la distribución del teclado
terdon
1
Creo que esto puede ser complicado: al menos en Thinkpads anteriores, este tipo de mapeo lo realiza el controlador integrado, no el sistema operativo.
mirabilos
1
Tengo un teclado multimedia todo en uno de Microsoft que tiene el mismo problema, ¿pudiste encontrar una solución?
osolmaz
55
Hice algo similar en un Thinkpad t61 hace un tiempo mapeando las teclas usando /etc/acpi/events cuál está en el acpidpaquete y simplemente definiendo una acción cuando se presionaron esas teclas de función.
cesar
2
¿Tiene Win_L configurado como modificador en X-windows? Es por defecto para mí.
mcr

Respuestas:

1

Puedes hacer esto en dos pasos:

  1. para atrapar combinaciones de teclas
  2. para simular escribir diferentes teclas.

Puede usar xchainkeyspara 1. y [xdotool][2]para 2 .:

Para crear la nueva clave simulada con xdotool, la opción --clearmodifiersde keypuede ser importante para neutralizar el modificador simulado original, presione:

xdotool key --clearmodifiers Shift+a

Esto debería escribir una capital Acomo prueba.

En la configuración de xchainkeysin ~/.config/xchainkeys/xchainkeys.conf, podemos vincular el comando a una combinación de teclas:

W-l :exec xdotool key --clearmodifiers Shift+a

Ahora, la combinación de teclas Winy l( Winizquierda o derecha hacen lo mismo), así como la tecla que genera Win_L + L, deberían crear una capital A.

(Hay muchos otros programas disponibles para ambas partes. Para el primero, uno podría usar la configuración de teclas de acceso rápido de un entorno de escritorio, pero prefiero mantenerlo independiente de los DE).

Volker Siegel
fuente
2
El problema con esta solución, si no me equivoco, sería el mismo que el simple uso de dicha combinación clave para desencadenar una acción - que la acción no se activaría con sólo esa tecla, al pulsar la combinación real de claves que genera la misma códigos también darían el mismo resultado. En otras palabras, no satisface la condición de "reasignar esa clave a otra cosa que no simplemente duplica una de las combinaciones de teclas existentes". Pero aprecio el esfuerzo.
Moonwalker
3
Sí, eso es verdad. No estaba seguro de lo que querías decir con esa oración, ahora entiendo. Pero parece que la clave produce los dos códigos clave en el hardware (es decir, en los teclados de firmware) - así que no veo la guerra alrededor, excepto a detectar el momento de la pulsaciones de teclas artifivial "modificador de abajo", "otra tecla", "modificador de arriba". Hmm ... tal vez una solución que implica la soldadura es más sencilla;)
Volker Siegel
1
@moonwalker ¿Puede tratar de volver a asignar Win_L en lugar de la otra llave, y comprobar si se reasigna el otro de modificador también?
Volker Siegel
1
um, ¿no estaría perdiendo combinaciones como Win_L + R, Win + Break, Win + L, Win + etc. ¿en ese caso?
moonwalker
1
No, no lo creo. Win-L es Win-Shift-lPero también podría asignar cadenas de combinaciones de teclas a un comando. Me gusta Win-ay después de eso b. Sin el Win-a, se bcomporta normal. Esa es, con mucho, la característica más útil xchainkeysy bastante única, creo.
Volker Siegel
-2

Esto es lo que hice en mi Thinkpad Yoga para volver a vincular la barra invertida / llave de tubo a la tecla correcta. Porque por alguna razón en cada máquina virtual Linux interpretó la tecla barra invertida \ pipe (\ |) como la tecla menor que (<).

Primero ejecute el comando: xev

Presione la tecla deseada para obtener el código de la tecla que desea volver a vincular:

Salida del evento xev KeyPress

En este ejemplo, el código clave es 94 y la acción es "menos", pero queremos que tenga la acción de barra diagonal inversa y barra, también conocida como "tubería"

Vuelva a asignar el código de tecla 94 a la barra invertida y la tecla de barra, también conocida como "tubería":

xmodmap -e 'keycode 94 = backslash bar'

Ahora hagamos esto persistente:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Devuelve lo siguiente al archivo ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Luego debe crear el siguiente archivo para terminar de hacerlo persistente:

echo "xmodmap .Xmodmap" > ~/.xinitrc
Kentgrav
fuente
1
La barra invertida / clave de canalización genera un único código de exploración, el tema trata sobre la reasignación de claves que generan múltiples códigos de exploración.
moonwalker