Como configuro o Xmodmap no login?


46

Como meu layout de teclado não combina comigo, eu corro xmodmapno login. O script é nomeado .profilee funciona OK, mas quebra a interface do Unity.

Quero saber onde colocar a xmodmaplinha para que ela seja executada no meu login e não quebre nada.

Eu já tentei colocá-lo nos arquivos .bash_logine .bash_profile, sem sucesso ( xmodmapnão define o teclado).

Quais são as minhas opções?


4
Como isso quebra a interface da unidade?
Djikik2

1
Gostaria de acrescentar que, se o tempo de execução do seu xmodmap for muito longo, você deverá remover todas as entradas que não modificou manualmente. Manter apenas as alterações no seu arquivo de entrada fará com que o xmodmap seja executado muito mais rápido.
user1071575

Respostas:


29

O local correto a ser colocado xmodmap ~/.Xmodmap(para que suas alterações sejam lidas na inicialização) está ~/.xinitrc(consulte a explicação abaixo), embora você possa alternativamente colocar o xmodmapcomando como um item de inicialização ( /usr/bin/xmodmap /home/user/.Xmodmap). Posso dizer que, para 12.04 (e presumivelmente 12.10), essas duas alternativas definitivamente funcionam, pois de qualquer forma elas são lidas após o login lightdm. (Alterei Return to Shift Right , e a alteração só entrou em vigor depois de inserir minha senha e fazer login).

Nota: se você estiver no Xfce, é indicado nas Perguntas frequentes oficiais do Xfce que talvez você precise criar um item de inicialização em vez de usá-lo ~/.xinitrc, e que talvez seja necessário atrasar a execução para que as xmodmapalterações não sejam sobrescritas setxkbmap. Você pode usar um atraso para conseguir isso em sua entrada de inicialização:

/bin/bash -c "sleep 20; /usr/bin/xmodmap /home/$USER/.Xmodmap"

(Para a entrada de inicialização, é necessário especificar caminhos absolutos)

Cada vez que setxkbmapé executado para alterar o layout do teclado, você precisará executar xmodmap ~/.Xmodmapnovamente no terminal.

Criando ~/.xinitrc

Crie um arquivo na sua pasta pessoal chamado .xinitrccom

touch .xinitrc

e coloque nele:

xmodmap ~/.Xmodmap

Seu Xmodmaparquivo não deve ter entradas no xmodmap -e " "estilo, pois é usado no terminal para definir temporariamente os valores. Ele deve ter entradas neste formato:

keycode 65 = Tab
keycode 23 = Space

Muitas vezes, é confuso qual dos vários Xarquivos (como .xprofile, .xinitrcetc) são lidos na inicialização, mas .xinitrcainda parece ser lido sob 12.04, enquanto .Xmodmapou .xinputrcnão são lidos por eles mesmos.


5
Observe que, se você fizer as alterações com xmodmap -e '..., poderá recuperar o formato correto para xmodmap .Xmodmapwith xmodmap -pke, que imprime o mapeamento atual - embora você queira filtrá-lo apenas para as linhas que se aplicam à alteração feita.
Barry Kelly

1
Isso não funcionou para mim. Eu criei .Xmodmap e .xinitrc | Então eu coloquei xmodmap ~ / .Xmodmap em .xinitrc E então dentro .Xmodmad tenho keycode 166 = Antes keycode 167 = Próxima
miguelmorales85

é .xinitrc não parece mais ser iniciado automaticamente no Ubuntu 17.10. Você precisará inicializá-lo automaticamente com este comando: / bin / bash -c "sleep 15 && /home/USERNAME/.xinitrc"
thebunnyrules

9

Estou usando o ElementaryOS (com seu gerenciador de janelas baseado no GNOME) e encontrei uma solução usando xdgscripts de inicialização automática. Muitos gerenciadores de janelas estão usando o xdg, portanto, assumo que essa abordagem também funcionará em outros ambientes. Pelo menos, deve funcionar com o GNOME.

O xdg executa scripts no ~/.config/autostartlogon em uma sessão X. Para carregar a configuração do xmodmap no login, adicione o seguinte script em ~/.config/autostart/xmodmap.desktop:

[Desktop Entry]
Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.Xmodmap
Exec=/usr/bin/xmodmap .Xmodmap
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application

Em seguida, efetue logout e logon novamente, e sua configuração do Xmodmap deveria ter sido carregada.

Se não estiver funcionando, tente executar o xmodmap no terminal para ver se é o xmodmap que reclama:

$ xmodmap ~/.Xmodmap

Se você não receber nenhum erro, execute o seguinte comando para depurar:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap

No Linux Mint 17 (baseado em: Ubuntu 14.04.5), a abordagem de inicialização automática funcionou perfeitamente para mim após a ~/.xinitrcfalha no uso de um arquivo. Como o hxpax apontou, os usuários do Mint (provavelmente a maioria / todos os Linux derivados do Debian) podem usar uma caixa de diálogo da GUI para adicionar entradas de início automático por meio de Main Menu --> Preferences --> Startup Applications.
mattst

2
Trabalhou no ubuntu 18.04
TooTone

2

Agora não tenho a interface de unidade à minha frente, mas tente clicar no botão Aplicativos no iniciador e digite startup. Deve haver um aplicativo chamado Aplicativos de Inicialização (ou alguns). Clique nele e adicione seu comando xmodmap (por exemplo xmodmap /home/thiago/.Xmodmap).


Eu tentei isso há um tempo atrás, mas não deu certo para mim. Estou no windows agora, mas tentarei novamente mais tarde e relato aqui se funcionar. thx
Thiago Moraes

2
@Thiago Moraes Este comando básico funciona (se não estiver, publique o erro)? xmodmap .Xmodmap
28511 djeikyb

+1 isso funciona. Para ser mais explícito eu usei o caminho completo para .Xmodmap
pwned

3
isso não funciona. Eu estou usando 16.04
miguelmorales85

@ miguelmorales85 o comando básico funciona no seu terminal? você tentou usar um caminho absoluto?
precisa saber é o seguinte

2

No Mint 17/18, posso conseguir que meus scripts sejam inseridos no Aplicativo de Inicialização, com 1 segundo de atraso.

Como o Mint 18 é derivado do Ubuntu 1604, acho que você pode fazer o mesmo ou instalar o painel de gerenciamento do Aplicativo de Inicialização primeiro, se não estiver lá.

Espero que ajude.


+1 funciona bem. Eu precisava de nenhum atraso no Linux Mint 17.
mattst

@mattst Sim, o atraso é opcional.
Hxpax

Eu precisava de um atraso de 5 segundos para que isso funcionasse. Eu usei o seguinte shell script de inicialização, portanto: gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Gerhard Hagerer

0

Eu não estava tendo muita alegria com nenhuma das sugestões acima (a opção .bashrc não era realmente viável, pois roda o xmodmap em todos os novos terminais)

Toquei em um script chamado xmodstartup.shna minha pasta pessoal

  #!/bin/bash           
  sleep 1;               
  echo "running xmodmap" 
  xmodmap ~/.Xmodmap     

com ele salvo, eu fiz sudo chmod +x xmodstartup.sh

simplesmente adicionei o arquivo executável à janela "preferências do aplicativo de inicialização" do gnome. bish bosh, layout em inglês e espanhol em altgr:)


-1

Colocar o xmodmap muda ~/.bashrcou /etc/bash.bashrcnão quebra nada.

A única desvantagem é que é necessário abrir um terminal após cada inicialização para ativá-lo.


3
Já estou fazendo isso, mas o problema é que, em todos os terminais que abro, esse comando é executado. É apenas um momento, mas é um pouco chato e eu preferiria uma solução real. thx enfim
Thiago Moraes
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.