Estoy tratando de usar xmodmap
para reasignar Alt/ Superteclas en el teclado Dell L100, y tengo problemas para obtener los códigos de teclas.
Por ejemplo, usar xev
no me da el código clave paraAlt
FocusOut event, serial 36, synthetic NO, window 0x4a00001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 36, synthetic NO, window 0x4a00001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 36, synthetic NO, window 0x0,
keys: 122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Para la Right Superclave, xev
y showkey
proporcione diferentes códigos clave, 134
y 126
respectivamente.
¿Qué está pasando con estos códigos clave?
Intenté obtener códigos clave showkey -k
y usar el xmodmap
archivo a continuación, pero eso dio un mapa extraño que reasignó la bclave:
clear Mod1
clear Control
keycode 125 = Meta_L
keycode 126 = Meta_R
keycode 58 = Control_L
keycode 56 = Control_L
keycode 100 = Control_R
add Control = Control_L Control_R
add Mod1 = Meta_L Meta_R
Respuestas:
Hay muchos jugadores entre su teclado y el proceso que finalmente maneja el evento del teclado. Entre las piezas principales del panorama se encuentra el hecho de que el sistema X tiene su propia capa de manejo de teclado, y X asocia diferentes "códigos de teclas" con las teclas que su sistema base Linux. El
showkey
comando le muestra los códigos clave en la jerga del sistema base de Linux. Paraxmodmap
usted necesita los códigos de teclas X, que son lo quexev
se muestra. Siempre que planee trabajar en X yxmodmap
volver a vincular su clave , ignoreshowkeys
y escuche lo quexev
dice.Lo que desea buscar en su
xev
salida son bloques como este:xev
tiende a generar una gran cantidad de resultados, especialmente cuando mueve el mouse. Puede que tenga que desplazarse un poco hacia atrás para encontrar la salida que está buscando. En la salida anterior, vemos que lakeysym Alt_L
está asociada con el código de tecla X64
.fuente
xev -event keyboard
sería suficiente para eliminar la mayor parte del ruido.xev debería funcionar
Extraño, mi xev ofrece un evento KeyPress y KeyRelease para alt (y para la tecla de Windows, aquí llamada "super"):
Y el de la derecha:
Puedo ver dos posibilidades:
xinit -- :1
, lo que debería proporcionarle un servidor X con solo un xterm; ni siquiera habrá un administrador de ventanas ejecutándose. Salir de xterm cerrará la sesión).Una manera fácil, si sabes el nombre clave
Otra posibilidad: solo obtenga los códigos de clave de xmodmap:
Hay 64 y 108 de nuevo.
xmodmap -pm
le mostrará solo el mapa modificador, que también le da los números (aunque, esta vez, en hexadecimal).fuente
"Detecto" tres problemas en su pregunta:
xev
eshowkey
informar diferentes códigos de tecla para una clave?xev
no muestra Altser presionado correctamente?Con respecto a la primera pregunta: en estos días, donde el "controlador" del teclado en X realmente no maneja el hardware, podría simplemente pasar los códigos clave desde el núcleo al núcleo X, pero no lo hace. Agrega 8 al código clave antes de pasarlo.
Segundo: Algo en tu sesión X está tomando el Altevento. Las otras respuestas cubren esto ya. (Es decir
xev
, no obtiene el evento que le gustaría ver). El culpable podría estar relacionado con su administrador de ventanas. Prueba una sesión X más desnuda.Tercero: no usar
xmodmap
. Ha estado desactualizado por una década. Los nuevos chicos son XKB y su herramientasetxkbmap
.Para intercambiar Alty Winya hay una opción preparada en XKB. Solo agrégalo:
fuente
setxkbmap
cambio sea permanente?~/.xinitrc
.Como root, ejecuta:
... para ver cuál es el código de escaneo para su clave misteriosa. Tengo algo como esto:
No estoy seguro de por qué parece que una clave genera dos códigos de escaneo. No es una cuestión de keydown / keyup, por lo que pude ver por el patrón. Tenga en cuenta la advertencia, por lo que es posible que desee ejecutar esto en modo de usuario único.
Supuse que 0x46 era mi código de escaneo.
A continuación, encuentre un código clave no utilizado con:
Aquí puede ver que el código clave 97 no se usa en mi sistema:
El código clave que usa X y el código clave que usa el núcleo están APAGADOS POR 8 por "razones históricas". Entonces tome 97 - 8 = 89 y use 89 con el comando setkeycodes (nuevamente como root):
Y deberías estar listo. Confirme con xev que está obteniendo un evento Keypress Event con el código clave de 97. (aunque una vez que le dije al archivo de claves Fluxbox que usara ese código clave ya no recibí eventos KeyPress, ¿tal vez porque Fluxbox los traga cuando los usa?)
Tenga en cuenta que los 'setkeycodes' no sobrevivirán al reinicio, por lo que deberá agregarlo a sus scripts de inicio (por ejemplo, en /etc/rc.local)
fuente
Estaba tratando de resolver esto por mí mismo y lo descubrí.
El principal problema es que no está obteniendo el evento para presionar la tecla. Mirando el registro que publicó, el motivo es evidente.
Puedes ver los
Focus{In,Out}
eventos tienen unamode
deNotify{Grab,Ungrab}
. Esto indica que una clave fue manejada por otro proceso (probablemente una aplicación de atajo / combinación de teclas).En mi caso, fueron xbindkeys, pero si está utilizando un entorno de escritorio, probablemente tengan un sistema de combinación de teclas. Para ver estos eventos es xev, deberá detener / deshabilitar el otro programa.
Si no puede determinar qué programa está robando los eventos clave, la mejor solución es iniciar otra sesión X sin que se ejecute. Ejecute el siguiente comando para iniciar otra sesión de X en la pantalla
:1
, si ya está tomada, aumente el número al final. Por supuesto, puede cambiar el terminal a lo que prefiera o tenga instalado en su sistema.Luego corre de
xev
nuevo. Eso debería darte el resultado sin que otros programas lo capturen. Tenga en cuenta que el administrador de ventanas que se inicia es el enfoque de desplazamiento, por lo que deberá colocar el cursor sobre la ventana xev para que se capturen las teclas.Como se dijo en esta excelente respuesta de dubiousjim , el código clave es diferente porque hay muchas capas entre xev y el núcleo.
fuente
Tuve el mismo problema con la
Alt_L
desaparición en XUbuntu 14.04 (Alt_R
estaba bien). Después de mucho jugar, observé queshowkey
grabé el golpe de teclado, peroxev
no lo hice --- tenía que ser algo en el sistema de ventanas. Recorrí todas las configuraciones "Window Manager" y "Window Manager Tweaks", y no encontré nada. Finalmente, encontré un parásitoAlt_L
en la lista de atajos de teclado (xfce4-keyboard-shortcuts
) en el "Editor de configuraciones". Yo "reinicio" eso, ¡y estoy deAlt_L
espaldas! ElAlt_L
acceso directo perdido no apareció en ningún otro lugar excepto en el "Editor de configuraciones".fuente