¿Cómo cambio las teclas Alt y Windows con xmodmap?

9

Tengo un teclado Mac donde las teclas Alt / Win (es decir, Opción / Comando) están invertidas en comparación con un teclado de PC normal, y me gustaría intercambiarlas. No he tenido suerte con xmodmap hasta ahora. La configuración estándar es la siguiente:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (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)

Actualmente, las teclas alternativas izquierda / derecha son códigos de tecla 64 y 108, mientras que las teclas de ventana izquierda / derecha son 133 y 134.

Agradezco cualquier ayuda!

Daniel Schuler
fuente
Para mí, esto intercambia los dos pares de Alt y Win: setxkbmap -device 8 dvorak -option altwin:swap_alt_win,ctrl:nocaps. Solo quiero el intercambio correcto de Alt y Win. Esto no "anula" el canje izquierda: setxkbmap -device 8 dvorak -option altwin:swap_lalt_lwin,altwin:swap_alt_win,ctrl:nocaps. Aparentemente no hay altwin:swap_ralt_rwinopción, según man xkeyboard-config.
Peter Becich

Respuestas:

11

Este es mi Xmodmaprc:

! Exchange left Alt and left Win
remove mod1 = Alt_L
remove mod4 = Super_L
add mod1 = Super_L
add mod4 = Alt_L
! Exchange tilde and lesser/greater
keycode  94 = grave asciitilde dead_grave dead_tilde grave asciitilde
keycode  49 = less greater less greater bar brokenbar bar brokenbar
! Steve, your keyboard sucks

Tendrá que modificar su .xsession o .xinitrc para llamar a xmodmap .Xmodmaprc

Christophe Devine
fuente
7

Logré esto en Ubuntu 13.04 combinando la respuesta de Christophe (que me ayudó, pero no funcionó para los modificadores y no necesito grave y tilde para ser teclas muertas), otra respuesta sobre setxkbmap , jugando con diferentes opciones en la configuración. opciones de diseño de teclado (incluso mirando el código fuente ) e inspeccionando la configuración actual usando el comando setxkbmap -query(que también debe ejecutar, para verificar el modelo de teclado específico y los códigos de diseño, ya que pueden diferir).

Tengo un script que llamo cuando cambio a un teclado Apple (la opción crucial es altwin:swap_lalt_lwinintercambiar las teclas Alt y Super modificador):

# clear all options
setxkbmap -model "pc105" -layout "hr,us" -option ""  

# set the Apple keyboard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier,altwin:swap_lalt_lwin"

# swap the grave-tilde with less-greater key
#  - variant without dead keys
xmodmap -e "keycode  94 = grave asciitilde"
xmodmap -e "keycode  49 = less greater less greater bar brokenbar bar brokenbar"

Y otro que llamo cuando estoy de vuelta en un teclado normal:

# clear settings
setxkbmap -model "pc105" -layout "hr,us" -option ""

# pc keyobard
setxkbmap -rules "evdev" -model "pc105" -layout "hr,us" -option "terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier"

Tenga en cuenta que agregué la configuración

terminate:ctrl_alt_bksp,lv3:rwin_switch,grp:shifts_toggle,caps:ctrl_modifier

para habilitar la terminación de la sesión ctrl + alt + backspace Gnome, acceda a la tecla de nivel 3 usando la tecla win derecha, cambie el diseño presionando ambas teclas shift y convierta mi Bloq Mayús en un Ctrl adicional (respectivamente). Es posible que desee excluir algunos o todos ellos.

Puede usar AutoKey para vincular la llamada a algún atajo de teclado, o llamar desde su .profileo .bashrcsi usa el teclado de Apple todo el tiempo.

metakermit
fuente
1
Un montón de bla bla. Si simplemente deseas cambiar Alt izquierdo y la clave súper , utilice este comando: setxkbmap -option altwin:swap_lalt_lwiny si desea cambiar tanto las teclas súper izquierda y derecha y Alt, utilice este comando: setxkbmap -option altwin:swap_alt_win.
erik
Buena respuesta. Pero, ¿cómo hago exactamente eso para ganar correctamente y alt (AltGr) correcto? Recientemente obtuve un unicomp, donde la victoria correcta está al lado de la barra espaciadora en lugar de AltGr, como estoy acostumbrado
evaluador
6

Descubrí que en Ubuntu 16.04 que usa xkb y gnome, necesita algunos pasos adicionales en comparación con la respuesta de respuesta de Christopher Devine anterior si desea retener todo el comportamiento de atajo para las teclas alt y super. Esta fue la solución más fácil que encontré.

Para obtener sus números de código $ xev clave , en la línea de comando y escriba las teclas para las que desea obtener el número. Para obtener más información al respecto, consulte esta publicación: uso de xev y xmodmap

Hacerlo me da: Super_Ltiene el código clave 133 Alt_Ltiene el código clave 64

Entonces, para intercambiar Windows aka Command (en Mac) aka Super key con la tecla Alt izquierda que hago:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 133 = Alt_L
keycode 64 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L

Las últimas dos líneas agregan el mod1 y el mod4 de nuevo al teclado para Alt_L y Super_L justo cuando se eliminaron. Si esto no se hace, pierdo los accesos directos asociados con la súper tecla (búsqueda) y también se rompe el combo alt + tab para cambiar entre ventanas.

Puede agregar estos comandos en un archivo como .xmodmap y luego $ xmodmap .xmodmapejecutarlos.

Alternativamente, puede ejecutarlos secuencialmente en la línea de comando como: $ xmodmap -e <expression here>

Si desea volver a las asignaciones de teclas predeterminadas, puede revertir los números en el código anterior, como:

remove mod1 = Alt_L
remove mod4 = Super_L
keycode 64 = Alt_L
keycode 133 = Super_L
add mod1 = Alt_L  
add mod4 = Super_L

o en Ubuntu solo ejecuto: $ setxkbmap

Trevor Owens
fuente
tuvo un problema dentro de intellij donde la tecla alt no se reconoce al intercambiar teclas con mod1 y mod4. Pero esto restablecer el código clave funciona muy bien en intellij. Gran trabajo
Jimubao
2

También puede configurar las hid_appleopciones del módulo del kernel para modificar solo el teclado de Apple, pero no los teclados de PC normales. No es necesario usar xkbmap o Xmodmapr. Simplemente cree el archivo /etc/modules.d/hid_apple.confcon el contenido

options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1

fnmode=2asigna las teclas de función F1...F12sin la necesidad de presionar Fn. Omita si prefiere las teclas multimedia. Ver Arch Wiki para más.

Permanentemente en Ubuntu :

echo options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1 | sudo tee -a /etc/modprobe.d/hid_apple.conf
sudo update-initramfs -u -k all
sebastian
fuente
0

Recomiendo no usar xmodmap en el futuro debido a que no funciona en Wayland, pero aparte de eso, setxkbmap o xkbcomp sería el mejor método para usar en el futuro y mi proyecto Kinto lo usa.

Kinto intercambiará las teclas que desee, pero también escuchará qué aplicación está utilizando, de modo que pueda mantener el mapa de teclas correcto para las aplicaciones de terminal aún para que coincida con su experiencia de estar en una Mac.

Aquí están los enlaces relevantes, pero también incluiré el corazón de lo que hace Kinto también, menos los mapas de teclas personalizados y la capacidad de mapas de teclas alternativos, para que tenga una idea de lo que Kinto realmente hace.

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

Contenido esencial

# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all

# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
R Ben R
fuente