Bloq Mayús como tecla modificadora para mapas de teclas de aplicaciones

11

Soy desarrollador y actualmente estoy usando Ubuntu Linux con PyCharm IDE para el desarrollo del sitio web. Para mejorar el rendimiento de escritura, considero cambiar CapsLock a Hyper_L y asignarlo a mod3 usando xmodmap. Después de esto, quiero asignar mod3 para la tecla 'i' a 'Arriba'. Hasta ahora lo que hice es:

xmodmap -e "keysym Caps_Lock = Hyper_L"

la salida es así:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

luego elimino Hyper_L de mod4

xmodmap -e "remove Mod4 = Hyper_L"

Luego intenté asignar Hyper_L a mod3

xmodmap -e "add Mod3 = Hyper_L"

Sin embargo, recibí el siguiente error:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Entonces, ¿cuál era el problema aquí? ¿Cómo puedo hacer que funcione? ¿Mi enfoque es correcto? ¿O debería usar un enfoque diferente para usar mod3 para claves personalizadas?

PD: Estoy usando el teclado Microsoft Natural Ergonomic 7000

Khamidulla
fuente

Respuestas:

20

Hay miles de millones de respuestas en Internet, la mayoría de ellas confusas.

La clave es que debe asignar el 'código clave 66' a su hiperclave, eliminar la asignación de esa clave de otros mod {1,2,4,5} (solo si está presente) y luego configurar mod3.

Abra ~ / .Xmodmap y coloque lo siguiente:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Ejecuta esto

xmodmap ~/.Xmodmap

Si algo sale mal, puede restablecer su teclado con:

setxkbmap -layout us

Las causas probables de que algo explote es que Hyper_L está mapeado en otro lugar. Solucione esto ejecutando xmodmap sin argumentos para descubrir qué más está vinculado a Hyper_L. Cuando sepa lo que necesita eliminar, arroje un 'remove BINDING = Hyper_L' en su archivo .Xmodmap.

El archivo .Xmodmap se cargará cuando abra sesiones X11, debe tener esta asignación en su lugar la próxima vez que inicie sesión o reinicie.

Esta configuración funciona para mi configuración de ubuntu 14.04. Si tiene un * nix diferente y esto no funciona, publique lo que hizo para solucionarlo aquí y lo incorporaré en la respuesta.

heythethew
fuente
@antindexer, ¿funcionó para usted?
heymatthew
Intenté bastantes respuestas, y esta es la que me funcionó. Al menos, lo hizo en una instalación de Linux de metal desnudo. Curiosamente, falla en QEMU / KVM, trabajando solo en presiones alternativas de la tecla de bloqueo de mayúsculas.
Diagon
0

Sé que esta pregunta es bastante antigua, pero necesito compartir mi solución, ya que (frustrantemente) la respuesta de heymantthew no funcionó para mí. Lo que terminó trabajando para mí:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Esto habilitará el bloqueo de mayúsculas como la tecla mod3, establecerá el diseño en "us" y establecerá la variante en "intl". Si usa un shell interactivo como fish, puede presionar tab después de "-layout", "-option" o "-variant" para obtener una lista completa de los posibles parámetros.

Más antecedentes: probé el enfoque xmodmap hace un año en una máquina Ubuntu que ejecuta el administrador de ventanas i3, cambiando del entorno estándar de gnome. Modifiqué el diseño del teclado "us" xkb, específicamente el internacional con teclas muertas. Funcionó bien al usar gnome-desktop-manager (hay una opción para configurar el bloqueo de mayúsculas como la tecla mod3), pero no pude haz que funcione con xmodmap. Este fue mi error: pensé que la GUI de gdm estaba usando xmodmap para asignar el bloqueo de mayúsculas a mod3, pero en realidad estaba configurando esta opción X11. Ahora que cambié a Arch me vi obligado a resolverlo.

Recomiendo a cualquiera que esté planeando jugar con esto para leer las páginas de manual en localectl, xmodmap, setxkbmap y probar diseños agregando una parte de suspensión y reversión:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

Esto me ahorró una buena cantidad de tiempo.

Sin embargo, todavía no entiendo cómo es que el enfoque xmodmap no funciona. Espero que esto ayude a alguien.

Mark IO
fuente