Reasignar teclas Ctrl y Alt - error xmodmap 'BadValue'

13

Estoy intentando reasignar mi teclado para hacer que emacs sea utilizable. Mi teclado ergonómico coloca su única tecla de control en una isla aislada de 4 teclas a la izquierda.

El sistema operativo es Debian Squeeze.

Aquí están las líneas que intento alimentar xmodmap, las coloco en un archivo ~ / .Xmodmap:

control claro
claro Mod1
! Las teclas Alt están etiquetadas como 'Opción' en mi teclado,
! el uso de xev les muestra que envíen Alt_L y Alt_R, respectivamente
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! Las teclas Super_L y Super_R son las teclas de Windows
keysym Super_L = Alt_L
keysym Super_R = Alt_R
agregar Control = Control_L Control_R
agregar Mod1 = Alt_L Alt_R

Mi objetivo es hacer que mis Altteclas Opción (aka ) se comporten como las teclas de Control y que mis teclas Windows (aka Super) se comporten como Alt.

Aquí están los códigos clave y la salida de claves SMS por xev para las claves en cuestión. Tenga en cuenta que mi teclado (un teclado ergonómico Goldtouch) tiene solo una tecla de control.

código clave 37 (keysym 0xffe3, Control_L)
código clave 64 (keysym 0xffe9, Alt_L)
código clave 133 (keysym 0xffeb, Super_L)
código clave 134 (keysym 0xffec, Super_R)
código clave 108 (keysym 0xffea, Alt_R)

Esto es lo que muestra xev mientras se ejecuta xmodmap .Xmodmap

Evento MappingNotify, serial 34, NO sintético, ventana 0x0,
    solicite MappingKeyboard, first_keycode 204, recuento 1

Evento MappingNotify, serial 34, NO sintético, ventana 0x0,
    solicite MappingKeyboard, first_keycode 64, recuento 1

Evento MappingNotify, serial 34, NO sintético, ventana 0x0,
    solicite MappingKeyboard, first_keycode 108, recuento 1

Evento MappingNotify, serial 34, NO sintético, ventana 0x0,
    solicite MappingKeyboard, first_keycode 206, recuento 1

Evento MappingNotify, serial 34, NO sintético, ventana 0x0,
    solicite MappingKeyboard, first_keycode 133, recuento 1

Evento MappingNotify, serial 34, NO sintético, ventana 0x0,
    solicite MappingKeyboard, first_keycode 134, recuento 1

Y aquí está el error devuelto por xmodmap:

X Error de solicitud fallida: BadValue (parámetro entero fuera de rango para operación)
Código de operación principal de solicitud fallida: 118 (X_SetModifierMapping)
Valor en solicitud fallida: 0x17
Número de serie de solicitud fallida: 17
Número de serie actual en la secuencia de salida: 17

¿Alguna sugerencia sobre cómo puedo resolver esto?

Aliud Alius
fuente
¿En qué sistema operativo y versión? ¿Qué tipo de teclado amplio (PC / Mac / Sun / ...)? Intenta correr xeven una terminal, luego xmodmapen otra terminal. Debería ver algunas MappingNotifyestrofas xev, agregarlas a su pregunta. Además, en la xevventana, presione las distintas teclas involucradas y díganos a qué código clave y keyym corresponden (la clave "keycode 37 (keysym 0xffe3, Control_L)" parte de la salida xev).
Gilles 'SO- deja de ser malvado'

Respuestas:

7

Mirando la solución vinculada por Giles, esto es lo que funcionó para mí:

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

Mis teclas de opción ahora funcionan como teclas de control y mis teclas de Windows como teclas Alt.

Aliud Alius
fuente
3

El problema surge cuando intentas agregar un símbolo clave a un modificador que ya está agregado a otra tecla modificadora. Es vital saber que si agrega un keyym a un modificador, todos los demás keyyms que acompañan al keyym en caso de que se agreguen también a ese modificador.

Por ejemplo:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

puede resultar en

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

porque tienes algo como

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

en su ~ / .Xmodmap (Vea el mapeo actual del código clave al keyym mediante xmodmap -pke)

que producirá el error BadValue en cuestión cuando también intentes hacer algo como

add lock    = Caps_Lock

porque Caps_Lock ya está agregado al modificador mod5.

Fluir
fuente
2

Esta es otra solución a su problema, aunque en realidad no responde a su pregunta. Edite xorg.conf, insertando lo siguiente en la Sección "InputDevice":

 Option "XkbOptions" "ctrl:swapcaps"
dotplus
fuente