Problema: Quiero modificar/redefinir la distribución de mi teclado (pc105 se) para que cuando presione ciertas teclas con mod3 (super) y mod4 (hyper), se devuelva un carácter diferente al habitual.
P.ej
El código clave 61 produce 'menos' (-) cuando se presiona normalmente y 'guión bajo' (_) cuando se presiona con mayúsculas. Cuando se presiona con el primer grupo de modificadores (AltGr), se producen 'dead_belowdot' y 'dead_abovedot' (sin/con mayúscula).
Lo que quiero es una paréntesis izquierda o paréntesis derecha (sin/con mayúsculas) cuando presiono la tecla con la tecla Super (win) también presionada, y barra diagonal/barra invertida para la tecla Hyper (que he configurado para Bloq Mayús).
Intenté agregar un .Xmodmap
a mi directorio de inicio y ejecutarlo
xmodmap ~/.Xmodmap
usando la siguiente sintaxis
keycode 61 = minus underscore a b c d e f g h i j k l m n o p
Sin embargo, eso hará que AltGr dé como resultado c/d, mientras que ganar/bloqueo de mayúsculas solo dará como resultado -/_
También intenté modificar /usr/share/X11/xkb/symbols/se directamente y probé los siguientes cambios:
key <BKSL> { [apostrophe, asterisk, acute, multiply], [a,b,c,d], [e,f,g,h], [i,j,k,l]};
Pero todo lo que sucede es ' * ´ × ' * ' * (para normal, altgr, win y mayúsculas respectivamente). yo también lo he probado
key <BKSL> { [apostrophe, asterisk, acute, multiply, a,b,c,d, e,f,g,h, i,j,k,l]};
Pero tan pronto como hay más de cuatro campos especificados, parece que la clave se rompe por completo y la clave vuelve al comportamiento predeterminado de pc105 (¿nosotros?).
Como no pude encontrar nada en stackoverflow, superusuario o Google sobre cómo lidiar con mi escenario, pregunto aquí.
Este es mixmodmap -pm
xmodmap: up to 3 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3 Hyper_L (0x42), Hyper_L (0xcf)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Respuesta1
Dos años después, finalmente me siento orgulloso de responder mi propia pregunta.
He descubierto que el método más fácil, confiable y extensible es confiar únicamente en xmodmap
.
1. Obtenga códigos clave de claves especiales
Ejecute xev
para determinar el código de las teclas que desea utilizar como conmutadores de modo. Luego presione las teclas que le interesen y anote laskeycode
$ xev
KeyRelease event, serial 40, synthetic NO, window 0x2600001,
root 0x2a6, subw 0x0, time 1221887800, (885,743), root:(3447,805),
state 0x2010, keycode 66 (keysym 0xff7e, Mode_switch), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
El código clave está en la tercera línea, código clave 66.
Para mí, estas fueron las claves que me interesaban especialmente y sus códigos de clave correspondientes:
Caps Lock
, código clave 66Pause|Break
, código clave 128Left Windows key
, código clave 133Num Lock
, código clave 77
2. Establecer teclas de cambio
Esta es la configuración por la que he optado, pero puedes elegir tu propia configuración. He guardado esto en un archivo $HOME/.xmodmap
.
~/.xmodmap
keycode 66 = Mode_switch
keycode 127 = Multi_key
keycode 133 = Super_L
...
De esta manera me he vinculado Caps Lock
a Mode_switch
, Pause Break
a y la tecla Compose
izquierda a . La clave es particularmente útil ya que permite combinar dos claves para ligar. Por ejemplo, seguido de y da como resultado el signo de marca registrada .Win
Super_L
Compose
Compose
T
M
™
3. Obtenga enlaces de mapas de teclas actuales dexmodmap
Para no destruir la distribución de mi teclado, quería mantener mis teclas lo más parecidas posible a mi distribución original. Para hacer eso, imprimí el mapa de teclas actual y busqué los códigos de teclas que quería cambiar.
$ xmodmap -pke | ag 'keycode 51'
Por supuesto, puedes usar grep
o ack
, dependiendo de la herramienta que prefieras usar.
$ xmodmap -pke | grep 'keycode 41'
$ xmodmap -pke | ack 'keycode 31'
La salida de esto está en el mismo formato que el que usted especifica en su ~/.xmodmap
ejemplo:
keycode 31 = i I i I rightarrow idotless rightarrow idotless i I rightarrow idotless i I rightarrow idotless
4. Haga una copia de seguridad de su existentexmodmap
En caso de que algo salga mal, nunca es mala idea tener la corriente xmodmap
disponible para recurrir fácilmente.
$ xmodmap -pke > ~/.xmodmap.bak
5. Agrega personajes al segundo, tercer y cuarto nivel de tus claves.
Según tengo entendido, el formato del .xmodmap
archivo es el siguiente:
keycode <keycode> = <1st level> <Shift+1st> <2nd level> <shift+2nd> <3rd level> <shift+3rd level> <4th level> <shift+4th> ...
Ahora, no entiendo todos esos niveles pero Mode_Switch
( Caps Lock
en mi caso) te dará el nivel 2 y Alt Gr
me da el nivel 3, y eso es prácticamente todo lo que me interesa, así que dejé el resto de esa línea como estaba en mi ~/.xmodmap.bak
y simplemente cambié las columnas 3, 4, 5 y 6 (nivel 2 y 3, más turno) a caracteres válidos (Consulte aquí para obtener una lista de caracteres válidos.).
~/.xmodmap
...
keycode 51 = apostrophe asterisk dollar ampersand acute multiply acute multiply apostrophe asterisk acute multiply apostrophe asterisk acute multiply
keycode 59 = comma semicolon parenleft parenright dead_cedilla dead_ogonek dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek
keycode 60 = period colon bracketleft bracketright periodcentered dead_abovedot periodcentered dead_abovedot period colon periodcentered dead_abovedot period colon periodcentered dead_abovedot
keycode 61 = minus underscore braceleft braceright slash backslash braceleft braceright
keycode 65 = space space space space space underscore space space
...
6. Pon a prueba tu.xmodmap
Ahora xmodmap
ejecute .xmodmap
y pruebe su nueva distribución de teclado.
$ xmodmap /home/user/.xmodmap
7. Asegúrese de que la distribución de su teclado esté cargada en x init
Agregué esto a mi $HOME/.xinitrc
:
~/.xinitrc
...
[-f $HOME/.xmodmap] && xmodmap $HOME/.xmodmap
...
¡Espero que esto haya sido útil!