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


16

Eu criei o seguinte ~/.Xmodmaparquivo conforme esta resposta .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

Em outras palavras, troque Deletee Menu, e faça Caps Lockum adicional Escape.

Na próxima vez que entrei, o Ubuntu perguntou se eu queria carregar ~/.Xmodmapcomo esperado. Carreguei, mas nada aconteceu (nesse momento ou em logons subsequentes). Se eu executar manualmente xmodmap ~/.Xmodmap, funcionará conforme o esperado.

Eu sei que isso funcionou no início da versão 10.10 beta, mas está falhando na minha nova instalação da 10.10. Eu não tentei nada antes das 10h10. Alguma ideia?

Edit: Coloquei algumas instruções de depuração /etc/gdm/Xsessionpara garantir que ~/.Xmodmapestava carregando e tudo magicamente começou a funcionar. Não alterei nada, exceto adicionar alguns ecos, e ainda está funcionando agora que eu reverti minhas alterações e reiniciei novamente. A coisa mais estranha que eu já vi.

Uma coisa que percebi é que a parte "remapear Caps Lock to Escape" do Xmodmap estava sempre funcionando. Foi apenas a troca de Excluir / Menu que falhou. Deixarei esta questão em aberto por enquanto, caso mais alguém tenha o mesmo problema, pois na verdade não sei por que o problema parou.


Estou enfrentando esse mesmo problema, me deixando louco. Se eu descobrir a causa, postarei uma resposta.
Jorge Israel Peña

Respostas:


11

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

Além disso, você pode verificar /etc/gdm/Xsessiona linha usermodmap="$HOME/.Xmodmap"e, se não estiver, basta anexá-la no final do arquivo. Se você é o único usuário do sistema, faça as alterações /etc/X11/Xmodmap.


2
Como você "inicia automaticamente" os comandos?
miguel.martin

Consulte Início automático . O mais fácil é provavelmente adicionar uma entrada Settings->Session and Startupou algo nesse sentido.
Mateen Ulhaq,

Ou, por exemplo, adicione-o ao seu shell; portanto, se você abrir conchas com frequência, ele será executado. A primeira coisa que faço quando entro no Gnome é abrir um shell na maioria das vezes, e é dessa maneira que funciona.
trusktr

3

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!


A edição da confituração do xkb funcionou para mim: askubuntu.com/a/1090892/1021380
postrational

2

Aqui está, talvez uma resposta melhor: http://cweiske.de/howto/xmodmap/ar01s06.html

Você pode precisar ajustá-lo um pouco para trabalhar para você, mas as instruções estão lá.


11
Estas instruções são para o KDE, mas se eu olhar para o equivalente do Gnome ( /etc/gdm/Xsession), as linhas que o link diz para adicionar já estão nele.
Matthew

2

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

Tente executar:

$ xmodmap ~/.Xmodmap

Isso deve disparar um erro, se houver algum.


0

Eu tive o mesmo problema estranho, tentando iniciar o meu Xmodmap enquanto fazia login na minha sessão (ubuntu 13.04). Finalmente fiz funcionar com um arquivo .xinitrc na minha pasta Home, onde coloco 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.


2
Isso não funciona no Ubuntu 14.04, para mim.
miguel.martin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.