Tarde para a festa, mas isso também me deixou louco; e, teimoso como sou, desistir não era uma opção.
Basicamente, foi isso que tentei (como meu usuário ou root, se necessário)
- ~ / .Xmodmap apenas
- ~ / .xsession, ~ / .xsessionrc
- ~ / .gnomerc
- ~ / .xprofile
- ~ / .xinitrc
- /etc/X11/Xsession.d/myscript
- /usr/share/X11/xorg.conf.d/ ( arquivos de configuração, não tocou nele )
(Na verdade, a adição do xmodmapcomando ~/.bashrcfuncionou, mas é necessário iniciar um terminal toda vez após o login)
Alguns anos atrás (?), xkbFoi escolhido para lidar com o mapeamento e configuração de chaves (interface com o X), mas xmodmaptambém pode solicitar alterações relacionadas a chaves no X, depois de ter xkbfeito seu trabalho durante a inicialização da sessão do X.
O problema é quando essas configurações do xmodmap devem acontecer?
Ele parece esses arquivos acima são processados muito cedo no processo, e quer X não estava pronto para aceitar xmodmap alterações ou xkb iria substituí-los.
Nota: adicionei alguns "rastreamentos" a esses arquivos para garantir que eles realmente estavam em execução em algum momento!
Uma solução que parece funcionar
Eu não estava interessado em adicionar um .desktoparquivo inicialmente (um script simples de uma linha precisava ser suficiente), mas isso funciona, então aqui está.
A solução vem de Como remapear ou trocar teclas especiais do teclado no Linux? "solução 1"
Basicamente, crie um ~/.config/autostart/my-xmodmap.desktoparquivo e coloque-o:
[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
substitua mepelo seu nome de usuário (observe que eu não me incomodei em tentar ~/ou $HOMEque pode funcionar igualmente bem no lugar de /home/me, e o caminho completo do xmodmap provavelmente não é necessário ...) e adicione o bit exec
chmod +x ~/.config/autostart/my-xmodmap.desktop
Os comandos xmodmap devem estar em um ~/.Xmodmaparquivo nesse caso (ou use a -eopção ou escolha outro nome de arquivo!). Saia e entre novamente.
Observe que você pode criar o programa inicial a partir de "Aplicativos de inicialização".
Outra solução seria esquecer o xmodmap e aprender a configurar xkb!
Editar (novamente)
Às vezes, talvez 25% dos logons, o xmodmapainda parece não funcionar - enquanto o comando é realmente executado (um rastreador prova isso). A única conclusão a que chego neste momento é que o xkbprocesso é executado mais tarde no processo de logon e pode terminar após a xmodmapexecução. Parece uma condição de corrida ... Então, finalmente, mudei a execlinha de arquivo de inicialização automática para
Exec=$HOME/bin/mystart &
(observe o &)
mystarté um script em um novo diretório binque criei que contém
#!/bin/bash
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run
e
chmod u+x ~/bin/mystart
O script dorme 5 segundos antes para executar o xmodmap e rastreia quando ele foi executado (no arquivo /tmp/xmodmap-has-run).
Espero que seja tudo!