Troque alt e super

27

Eu tenho um Macbook Air que roda Linux. Quero trocar as teclas alte supernos dois lados do teclado.

Como faço isso com as ferramentas cli?

Atualizar

Seguindo a resposta de Drav Sloan, usei o seguinte:

keycode 64 = Alt_L
keycode 133 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

keycode 108 = Alt_R
keycode 134 = Super_R
remove Mod1 = Alt_R
remove Mod4 = Super_R
add Mod1 = Super_R
add Mod4 = Alt_R

fonte
11
Estranhamente, as coisas funcionaram para mim (mac air) quando eu peguei apenas as 6 primeiras linhas e não o bototm uma vez em um arquivo e executei o arquivo xmobmap nele. Com os resultados, tive erros.
Leo Ufimtsev

Respostas:

20

Uma maneira de conseguir isso é via xmodmap. Você pode executar xevpara obter os principais eventos. Ao executar, xevuma caixa deve aparecer e você pode focalizá-la e pressionar as teclas que deseja trocar. Ele deve gerar detalhes semelhantes aos da Altchave:

KeyPress event, serial 28, synthetic NO, window 0x8800001,
  root 0x25, subw 0x0, time 2213877115, (126,91), root:(1639,475),
  state 0x0, keycode 14 (keysym 0xffe9, Alt_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Estou em um PC e não tenho uma "Chave de Comando", mas tenho o equivalente "Chave do Windows", e o xev fornece:

KeyPress event, serial 28, synthetic NO, window 0x8000001,
  root 0x25, subw 0x0, time 2213687746, (111,74), root:(1624,98),
  state 0x0, keycode 93 (keysym 0xffeb, Super_L), same_screen YES,
  XLookupString gives 0 bytes: 
  XmbLookupString gives 0 bytes: 
  XFilterEvent returns: False

Como o xmodmap não tem idéia statee pode facilmente quebrar os mapeamentos de teclas, sugiro que você faça:

xmodmap -pke > defaults

Em seguida, criamos um arquivo xmodmap:

keycode 14 = Alt_L
keycode 93 = Super_L
remove Mod1 = Alt_L
remove Mod4 = Super_L
add Mod1 = Super_L
add Mod4 = Alt_L

Observe como estou usando os códigos de chave xevretornados. Também aqui estou substituindo apenas as teclas super e alt esquerdas (e deixando as corretas em seu antigo comportamento). Então podemos simplesmente executar xmodmap, para definir estas chaves:

$ xmodmap -v modmap.file
! modmap:
! 1:  keycode 14 = Alt_L
        keycode 0xe = Alt_L
! 2:  keycode 93 = Super_L
        keycode 0x5d = Super_L
! 3:  remove Mod1 = Alt_L
! Keysym Alt_L (0xffe9) corresponds to keycode(s) 0xe
        remove mod1 =  0xe
! 4:  remove Mod4 = Super_L
! Keysym Super_L (0xffeb) corresponds to keycode(s) 0x5d
        remove mod4 =  0x5d
! 5:  add Mod1 = Super_L
        add mod1 = Super_L
! 6:  add Mod4 = Alt_L
        add mod4 = Alt_L
!
! executing work queue
!
        keycode 0xe = Alt_L
        keycode 0x5d = Super_L
        remove mod1 =  0xe
        remove mod4 =  0x5d
        add mod1 = Super_L
        add mod4 = Alt_L

Você pode executar sem a opção -v(detalhada) para execução silenciosa, mas acho útil se você cometeu erros no seu arquivo modmap. Se tudo der errado, basta reaplicar seus padrões:

xmodmap defaults

O Modmap geralmente é executado na inicialização do X, portanto, você pode aplicá-los como padrões se inserir seus comandos modmap ~/.xmodmaprc.

Drav Sloan
fonte
Existe uma maneira de fazer isso setxkbmap? Eu gostaria de usar a setxkbmap -option compose:raltopção junto com isso.
Eu usei a solução swap_opt_cmd em outra resposta, mas essa merece um voto positivo porque é muito completa e claramente escrita. Bravo, senhor.
John John Franklin
Obrigado. Eu tenho bagunça xmodmap-se e apreciar se você poderia ajudar askubuntu.com/questions/1026246/...
Tim
26

Se você deseja fazer isso em um teclado Apple, tente o seguinte:

echo 1|sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

Para que isso funcione para uma versão inferior do Linux, você pode tentar isso: http://blog.chaselambda.com/2014/10/09/apple-keyboard-on-linux-3.8.html

theicfire
fonte
Embora as outras respostas também funcionem, esta é a solução para o Mac Books; funcionou como um encanto!
sinisterstuf
11
Por que esse não é o padrão ?!
John John Franklin
Não tenho acesso de gravação a este arquivo. :-(
itmuckel
11
@ Micha90 - você precisa usar tee: echo "1" | sudo tee /sys/module/hid\_apple/parameters/swap\_opt\_cmd
jaustin 06/11
2
Spend one hour configuring xmodmap. It works. Then see the 2nd answer...
Bilow
17

Se você deseja trocar apenas a tecla alt e a tecla super esquerda, execute o comando no seu terminal:

setxkbmap -option altwin:swap_alt_win

Para restaurar o comportamento padrão, basta usar:

setxkbmap -option

Nota: Isso é temporário. Se você deseja os efeitos permanentemente, adicione-o ao seu arquivo de inicialização.

coljamkop
fonte
4
Essa deve ser a solução aceita, pois é limpa e usa uma função integrada. Você deveria ter mencionado que, para restaurar o comportamento padrão, você poderia apenas usar setxkbmap -option. E se você só quer trocar Alt esquerdo e super-chave , em seguida, use o comando: setxkbmap -option altwin:swap_lalt_lwin.
Erik
11
Eu tenho o teclado da Logitech e isso funcionou para alternar a tecla do Windows (Super_L) com o alt esquerdo (Alt_L). Obrigado!
Derek
4
$ xmodmap -pke

Anote quais códigos de teclas alt e super estão vinculados e, em sua pasta pessoal, abra / crie um novo arquivo .xmodmaprc. Por exemplo, minhas teclas super / alt estão vinculadas como tal

keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R Alt_R Meta_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R

Mas, para trocar as chaves, coloque o seguinte em .xmodmaprc

keycode  64 = Super_L NoSymbol Super_L
keycode 108 = Super_R NoSymbol Super_R
keycode 133 = Alt_L Meta_L Alt_L Meta_L
keycode 134 = Alt_R Meta_R Alt_R Meta_R
cepkos
fonte
Substituir as associações de código / função-chave ... simples e funciona. Gostaria de saber se existe alguma desvantagem em comparação com a remove ...solução.
Anel Ø
Lembre-se de que você pode usar greppara filtrar a saída xmodmap -pke | grep -i "super\|alt", facilitando a visualização do que você precisa.
Benjamin R
0

Se você é uma das pessoas infelizes como eu, que não conseguiu que o xmodmap alternasse Alt com a tecla Ctrl certa, talvez isso ajude.

Se você pressionar Alt e e à direita e obter é, então esta solução é para você (precisa ser aprimorada).

Execute isso no terminal (verifique seus códigos de chave com xev):

xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"

Em seguida, coloque esse código no seu .Xmodmap:

remove Control = Control_R
remove Mod1 = Alt_R
keycode 105 = Alt_R
keycode 108 = Control_R
add Control = Control_R
add Mod1 = Alt_R

Esse código define sua chave Alt_Gr como Alt_R e, em seguida, alterna Alt_r com Ctrl_R.

Se você deseja que isso permaneça após o logout, coloque os seguintes comandos em qualquer um dos seus arquivos de shell de inicialização, por exemplo ~ / .profile:

if [ -f $HOME/.Xmodmap ]; then
  xmodmap -e "keycode 108 = Alt_R Meta_R Alt_R Meta_R"
  /usr/bin/xmodmap $HOME/.Xmodmap
fi

fontes: question1 question2

Mugur 'Bud' Chirica
fonte