Como fazer com que as chaves Hyper e Super não façam a mesma coisa?

8

Eu usei o xkb para remapear a tecla direita do Windows (RWIN) para Hyper_R porque eu quero usá-lo com a AutoKey para alguns atalhos especiais. Eu fiz isso editando

/usr/share/X11/xkb/symbols/pc

modificando a linha RWIN:

  key <RWIN> {  [ Hyper_R   ]   };

( Aqui está a resposta que me guiou )

Pelo que sei, isso funciona e a tecla correta do Windows agora aciona o Hyper_R. No entanto, parece que no Ubuntu (Xubuntu para ser exato), Hyper e Super de alguma forma estão fazendo a mesma coisa. O Super + e inicia o editor e o Hyper + e também.

Não sei por que isso ocorre ou onde posso mudar esse comportamento. Eu quero que Hyper e Super sejam modificadores diferentes.

Alexander Rechsteiner
fonte
Havia uma coisa sobre ele aqui , embora eu não acho que o diálogo já existe em 13.10 ...
Wilf
Mas isso tem que ser configurável em algum lugar, certo?
Alexander Rechsteiner
Você pode encontrá-los em #dconf-editor
2020 Wilf
1
Obrigado, mas sem sorte lá. Porra, essa coisa toda de remapeamento de teclado no Linux me dá diabetes.
Alexander Rechsteiner
+1: concord (na parte do diabetes). Não consegui encontrar um guia detalhado, detalhado e detalhado sobre como o teclado é gerenciado no Ubuntu. Há uma série de interações entre o gnome-control-center, o gnome-tweak-tool, xkbd, xmodmap que são bastante complexas e, pior, não documentadas. Se você encontrar algum link, compartilhe-o! (Embora eu suspeite que quase ninguém o saiba de verdade. Veja a impossibilidade de corrigir bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/… )
Rmano

Respostas:

11

Por alguma razão, o Ubuntu atualmente atribui Super e Hyper ao Mod4. Você pode ver isso em / usr / share / X11 / xkb / symbols / pc:

 key <SUPR> {   [ NoSymbol, Super_L ]   };
 modifier_map Mod4   { <SUPR> };

 key <HYPR> {   [ NoSymbol, Hyper_L ]   };
 modifier_map Mod4   { <HYPR> };

Consegui mudar isso para colocar super e hiper em modificadores separados sem precisar ser root ou modificar qualquer arquivo do sistema. Não tenho certeza se essa é a melhor maneira, pois definitivamente não sou um especialista em xkb, mas é uma maneira que tem sido confiável para mim.

Primeiro, crie um arquivo de símbolos locais. Eu tenho o meu em $ {HOME} /. Config / xkb / symbols / local. Isso atribui Super ao Mod3 e Hyper ao Mod4.

default  partial modifier_keys
xkb_symbols "superhyper" {

    modifier_map Mod3 { Super_L, Super_R };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod3   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
};

Em seguida, recompile o mapa existente para adicionar um "local":

setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY}

Coloque isso em um script para ser executado quando você efetuar login. Você pode executá-lo como um usuário comum.

ergosys
fonte
É possível apenas editar esse arquivo no local para alterar o HYPR para Mod3?
Alex Moore-Niemi
3
Você consegue fazer isso. Os benefícios de não editar no local é que uma atualização do sistema não substituirá suas alterações.
ergosys
Para mim, eu tinha brevemente trabalhar com raw.githubusercontent.com/jabbalaci/dotfiles/master/.Xmodmap embora ele continua misteriosamente parar ...
Alex Moore-Niemi
Também uma desvantagem do método da minha resposta que eu descobri é que, se o teclado estiver desconectado ou perder a comunicação USB devido a uma falha aleatória, o script deverá ser executado novamente. Provavelmente existe uma maneira de executá-lo automaticamente, mas ainda não o examinei. Felizmente, o problema aleatório acontece apenas uma vez por mês para mim. Se você editar os arquivos do sistema, isso não deve ser um problema. Portanto, existem vantagens e desvantagens.
ergosys
1
Eu também uso isso. Já existe uma configuração enlatada para ele, então eu uso: setxkbmap -option 'caps: hyper'
ergosys
3

Com xmodmapvocê pode alterar esse comportamento com 2 comandos:

## Hyper_L is mod4 by default, we will "move" it to Mod3
xmodmap -e "remove mod4 = Hyper_L"
xmodmap -e "add mod3 = Hyper_L"
Alex Stragies
fonte