Como troco as teclas Alt e Windows com o xmodmap?

9

Eu tenho um teclado Mac onde as teclas Alt / Win (ou seja, Option / Command) são invertidas em comparação com um teclado normal do PC, e eu gostaria de trocá-las. Ainda não tive sorte com o xmodmap. A configuração padrão é a seguinte:

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)

Atualmente, as teclas alt esquerda / direita são códigos de tecla 64 e 108, enquanto as teclas esquerda / direita do Windows são 133 e 134.

Eu aprecio qualquer ajuda!

Daniel Schuler
fonte
Para mim, isso troca os dois pares de Alt e Win: setxkbmap -device 8 dvorak -option altwin:swap_alt_win,ctrl:nocaps. Eu só quero o Alt e o Win certos trocados. Isso não "cancela" a troca à esquerda: setxkbmap -device 8 dvorak -option altwin:swap_lalt_lwin,altwin:swap_alt_win,ctrl:nocaps. Aparentemente não há altwin:swap_ralt_rwin opção, de acordo com man xkeyboard-config.
Peter Becich

Respostas:

10

Este é o meu 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

Você terá que modificar seu .xsession ou .xinitrc para chamar xmodmap .Xmodmaprc

Christophe Devine
fonte
6

Eu consegui isso no Ubuntu 13.04 combinando a resposta de Christophe (que me ajudou, mas não funcionou para os modificadores e eu não preciso de graves e til para serem chaves mortas), outra resposta sobre o setxkbmap , jogando com diferentes opções em configurações de teclado-layout de opções (mesmo olhando para o Código fonte ) e inspecionando a configuração atual usando o comando setxkbmap -query (que você também deve executar, para verificar o modelo específico do teclado e os códigos de layout, pois eles podem ser diferentes).

Eu tenho um script que eu chamo quando mudo para um teclado da Apple (a opção crucial sendo altwin:swap_lalt_lwin para trocar as teclas modificadoras Alt e Super):

# 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"

E outro que eu chamo quando estou de volta em um 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"

Note que eu adicionei as configurações

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

para habilitar a terminação de sessão do Gnome ctrl + alt + backspace, acesso de chave de nível 3 usando a tecla de vitória direita, mudança de layout pressionando ambas as teclas shift e transformou meu Caps Lock em um Ctrl adicional (respectivamente). Você pode querer excluir alguns ou todos eles.

Você pode usar AutoKey para vincular a chamada a algum atalho de teclado ou chamá-lo de seu .profile ou .bashrc se você usar o teclado da Apple o tempo todo.

metakermit
fonte
1
Muita bla bla. Se vocês só quer trocar alt esquerda e super chave , use este comando: setxkbmap -option altwin:swap_lalt_lwin e se você quiser alternar as teclas alt e super esquerda e direita, use este comando: setxkbmap -option altwin:swap_alt_win.
erik
Boa resposta. Mas como eu faço exatamente isso apenas para ganhar certo e certo alt (AltGr)? Recentemente, ganhei um unicomp, onde a vitória certa está ao lado da barra de espaço em vez do AltGr, como estou acostumado a
cessor
2

Você também pode definir o hid_apple opções do módulo do kernel para modificar apenas o teclado da apple, mas não os teclados normais do PC. Não há necessidade de usar xkbmap ou Xmodmapr. Basta criar o arquivo /etc/modules.d/hid_apple.conf com o conteúdo

options hid_apple iso_layout=0 fnmode=2 swap_opt_cmd=1

fnmode=2 mapeia as teclas de função para F1...F12 sem a necessidade de pressionar Fn. Omitir, se você preferir as teclas de mídia. Veja o Wiki do Arch para mais.

Permanentemente no 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
fonte
2

Eu descobri que no Ubuntu 16.04 que usa xkb e gnome você precisa de alguns passos extras quando comparado ao Christopher Devine's answer resposta acima se você quiser manter todo o comportamento de atalho para as teclas alt e super. Esta foi a solução mais fácil que encontrei.

Para obter os números dos seus códigos, na linha de comando $ xev e digite as chaves para as quais deseja obter o número. Para mais informações, veja este post: Uso xev e xmodmap

Fazendo isso me dá: Super_L tem código de acesso 133 Alt_L tem código de acesso 64

Então, para trocar o Comando do Windows aka (no Mac), também conhecido como Super key pela tecla Alt esquerda, eu faço:

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

As duas últimas linhas adicionam o mod1 e mod4 de volta ao keysym para Alt_L e Super_L assim que foram removidos. Se isso não for feito, perco os atalhos associados à superchave (pesquisa) e também interrompe a combinação alt + tab para alternar entre as janelas.

Você pode adicionar esses comandos em um arquivo como .xmodmap e depois $ xmodmap .xmodmap irá executá-los.

Como alternativa, você pode executá-los sequencialmente na linha de comando, como: $ xmodmap -e <expression here>

Se você quiser retornar aos mapeamentos de teclas padrão, poderá inverter os números no código acima, 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

ou no Ubuntu eu apenas corro: $ setxkbmap

Trevor Owens
fonte