Por que meu arquivo ~ / .Xmodmap não é carregado no login?

15

Eu criei o seguinte arquivo ~/.Xmodmap conforme esta resposta .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

Em outras palavras, troque Delete e Menu e torne Caps Lock um Escape adicional.

Da próxima vez que eu entrei, o Ubuntu me perguntou se eu queria carregar ~/.Xmodmap como esperado. Eu carreguei, mas nada aconteceu (ou então ou em logins subseqüentes). Se eu executar manualmente xmodmap ~/.Xmodmap , isso funcionará como esperado.

Eu sei que isso funcionou no início da versão 10.10 beta, mas está falhando na minha nova instalação 10.10. Eu não tentei em nada antes de 10.10. Alguma idéia?

Editar: coloquei algumas instruções de depuração em /etc/gdm/Xsession para garantir que ~/.Xmodmap estava carregando e tudo começou a funcionar magicamente. Eu não mudei nada, exceto adicionar alguns ecos, e ainda está funcionando agora que reverti minhas alterações e reiniciei novamente. A coisa mais estranha que já vi.

Uma coisa que percebi é que a parte "remapear Caps Lock to Escape" do Xmodmap estava sempre funcionando. Foi apenas o Delete / Menu swap que falhou. Deixarei essa questão em aberto por enquanto, caso alguém mais tenha o mesmo problema, já que não sei porque o problema parou.

    
por Matthew Pirocchi 14.10.2010 / 17:31

5 respostas

10

Eu sei que é bobagem, mas como uma solução alternativa, você pode apenas iniciar automaticamente xmodmap ~/.Xmodmap .

Você também pode verificar /etc/gdm/Xsession para a linha usermodmap="$HOME/.Xmodmap" e, se não estiver lá, basta anexá-la ao final do arquivo. Se você é o único usuário do sistema, basta colocar suas alterações em /etc/X11/Xmodmap .

    
por turbo 21.11.2010 / 02:20
2

Tarde da festa, mas isso me deixou louco também; e, teimoso como sou, desistir não era uma opção.

Basicamente isso é o que eu tentei (como meu usuário ou root, se necessário)

    Apenas
  • ~ / .Xmodmap
  • ~ / .xsession, ~ / .xsessionrc
  • ~ / .gnomerc
  • ~ / .xprofile
  • ~ / .xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/ ( arquivos de configuração, não tocou em )

(Na verdade, adicionar o comando xmodmap a ~/.bashrc funcionou, mas é necessário iniciar um terminal sempre após o login)

Alguns anos atrás (?), xkb foi escolhido para lidar com mapeamento e configuração de chaves (interface com X), mas xmodmap também pode solicitar alterações relacionadas a chave em X, após xkb fazer seu trabalho durante a inicialização da sessão X.

O problema é quando essas configurações do xmodmap devem acontecer?
parece que os arquivos acima são processados cedo demais no processo, e X não estava pronto para aceitar mudanças no xmodmap, ou o xkb iria sobrescrevê-los.

Observação: eu adicionei alguns "rastreamento" para esses arquivos para garantir que eles estivessem sendo executados em algum momento!

Uma solução que parece funcionar

Eu não queria adicionar um arquivo .desktop inicialmente (um simples script de uma linha tinha que ser o suficiente), mas isso funciona, então aqui está.
A solução vem de Como remapear ou trocar teclas de teclado especiais no Linux? "solução 1"

Basicamente, crie o arquivo ~/.config/autostart/my-xmodmap.desktop e coloque nele:

[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 (note que eu não me incomodei em tentar ~/ ou $HOME que podem 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 arquivo ~/.Xmodmap neste caso (ou usar a opção -e , ou escolher outro nome de arquivo!). Sair e voltar.

Observe que você pode criar o programa inicial a partir de "Aplicativos de inicialização".

Outra solução seria esquecer o xmodmap e aprender como configurar xkb !

Editar (novamente)

Às vezes, talvez 25% dos logons, o xmodmap ainda parece não estar funcionando - enquanto o comando é realmente executado (um rastreador prova isso). A única conclusão a que chego neste momento é que o processo xkb é executado com atraso no processo de logon e pode terminar após a execução do xmodmap . Parece uma condição de corrida ... Então, finalmente, eu mudei o arquivo de área de trabalho de início automático exec line para

Exec=$HOME/bin/mystart &

(observe o & ) mystart é um script em um novo diretório bin criado 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 demora 5 segundos antes para executar o xmodmap e rastreia quando foi executado (no arquivo /tmp/xmodmap-has-run ).

Espero que isso seja tudo!

    
por Ring Ø 22.10.2017 / 12:03
2

Aqui está, talvez, uma resposta melhor: link

Você pode ter que ajustar um pouco para trabalhar para você, mas as instruções estão todas lá.

    
por Robert Massaioli 15.10.2010 / 07:02
2

Talvez você tenha um erro de sintaxe no seu arquivo ~/.Xmodmap ?

Tente executar:

$ xmodmap ~/.Xmodmap

Isso deve causar um erro se houver algum.

    
por gpmcadam 22.03.2011 / 20:14
0

Eu tive o mesmo problema estranho, tentando iniciar o meu Xmodmap enquanto fazia login na minha sessão (Ubuntu 13.04). Eu finalmente fiz isso funcionar com um arquivo .xinitrc na minha pasta Home, onde coloquei meu comando, mas com caminhos absolutos para ele, ou seja:

/ usr / bin / xmodmap / home / MYNAME /.Xmodmap

Então eu tive que reiniciar (não apenas relogar) para que ele fosse executado.

    
por greguti 08.07.2013 / 11:54