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 xmodmap
comando ~/.bashrc
funcionou, mas é necessário iniciar um terminal toda vez após o login)
Alguns anos atrás (?), xkb
Foi escolhido para lidar com o mapeamento e configuração de chaves (interface com o X), mas xmodmap
também pode solicitar alterações relacionadas a chaves no X, depois de ter xkb
feito 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 .desktop
arquivo 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.desktop
arquivo e coloque-o:
[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true
substitua me
pelo seu nome de usuário (observe que eu não me incomodei em tentar ~/
ou $HOME
que 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 ~/.Xmodmap
arquivo nesse caso (ou use a -e
opçã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 xmodmap
ainda parece não funcionar - enquanto o comando é realmente executado (um rastreador prova isso). A única conclusão a que chego neste momento é que o xkb
processo é executado mais tarde no processo de logon e pode terminar após a xmodmap
execução. Parece uma condição de corrida ... Então, finalmente, mudei a exec
linha de arquivo de inicialização automática para
Exec=$HOME/bin/mystart &
(observe o &
)
mystart
é um script em um novo diretório bin
que 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!