xmodmap permanente no Ubuntu 13.04

65

Eu não posso fazer o xmodmap rodar no login no Ubuntu 13.04. Eu pesquisei por aí, inclusive no askubuntu e todas as respostas que encontrei não funcionam.

Eu tenho um arquivo chamado .Xmodmap na minha pasta pessoal que contém os mapeamentos desejados. Se eu executar manualmente, funciona bem, então não há erro lá. Para que seja executado na inicialização, tentei:

  1. Usando vários .xinitrc contendo um dos seguintes comandos:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then e xmodmap ~/.Xmodmap e fi
  2. Usando .Xresources em vez de .xinitrc com as mesmas variações.

  3. Definindo como um aplicativo de inicialização.

Nenhuma das alternativas acima funciona no Ubuntu 13.04 (64 bits). Eu também vi algumas idéias sobre como alterar globalmente os mapeamentos de teclado, mas a maioria deles não era aplicável no Ubuntu 13.04 (ou seja, os arquivos correspondentes não existiam onde especificado) e eu prefiro não tocar nas configurações globais de qualquer maneira.

    
por Alexander Karatarakis 27.07.2013 / 14:37

9 respostas

72

O Ubuntu não usa mais xmodmap , mas usa xkb (pelo que entendi, isso facilita layouts de teclado por janela, entre outras coisas).

Os arquivos de mapa do sistema estão em

/usr/share/X11/xkb/symbols/

Os mapas parecem ser carregados hierarquicamente, com o pc map como raiz e qualquer idioma (por exemplo, en ) como um filho da raiz.

No meu caso particular, eu troquei fisicamente Page Up por Home e Page Down por End no meu teclado, então mudei de forma grosseira para o pc map de todo o sistema, como segue:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

NOTA: Para forçar o Xorg a usar seu novo mapa de teclado, talvez seja necessário remover os mapas pré-compilados existentes (* .xkm) em

/var/lib/xkb/

e reinicie o Xorg.

Existem vários recursos em xkb , mas este está relacionado ao Ubuntu.

    
por Daniel 19.09.2013 / 09:08
12

Para mim, a configuração do xkb é muito complicada se você quiser remapear 1 ou 2 teclas de uma maneira não disponível nas configurações do sistema. Além disso, a solução deve permanecer no lado do usuário, sem editar '/ usr / share / X11 / xkb / symbols /' etc. Forçar a carga 'xmodmap ~ / .Xmodmap' usando o Startup Applications só funciona até você suspender, alterar usuários ou altere o layout do teclado. Então, como o holocronweaver sugere, com trechos de código que eu encontrei, eu fiz um script python para ser carregado na inicialização da sessão, que recarrega o '~ / .Xmodmap' quando necessário.

Verifique o relatório de erros # 1243642 (comentário # 6) e faça o download aqui .

    
por dedalu 21.08.2014 / 16:58
6

Eu tive esse problema no Ubuntu 14.04 e encontrei a solução aqui . Aparentemente, o Ubuntu não é capaz de configurar o teclado imediatamente após o login, mas é um pouco mais tarde. Então, se você adicionar um comando

sleep 4 && xmodmap ~/.Xmodmap &

para ~/.bash_profile , então deve funcionar (funciona para mim).

EDIT: Isto parece funcionar apenas após o login, não após o arranque. Vou ter que investigar isso mais tarde.

    
por dremodaris 11.09.2014 / 17:45
4

Converte Caps Lock em Esc para vim use

Aqui está minha variante de um script de inicialização de mapeamento de chave. Ele converte Caps Lock em Esc em qualquer teclado para uso com vi , vim ou gvim .

Ao contrário da resposta de q4w56 , esta resposta não usa nenhum loop while; do infinito. Caso contrário, um núcleo do meu processador dual core atingiria 42% a cada 5 segundos, reduzindo seriamente a carga da bateria do meu laptop.

#!/bin/bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

Salve como um script. Torne o arquivo executável com chmod +x . Adicione o nome do script e a localização a Session and Startup → Application Autostart (no Xubuntu).

O comportamento do teclado para esse usuário permanecerá persistente por meio da reinicialização e do logout, mas não será suspenso. Persistência através da suspensão pode ser alcançada , mas infelizmente somente no nível do sistema, não prontamente no nível do usuário.

Razão para este remapeamento de teclado

No mundo da computação de hoje, resta muito pouco uso para a tecla Caps Lock . Em geral, deve-se evitar o uso de ALL CAPS em virtude de ambos netiqueta e a separação da apresentação e do conteúdo . Além disso, acertar acidentalmente a tecla Caps Lock enquanto edita o texto com vim nem sempre é imediatamente anotado, mas invariavelmente resulta em um pouco vim behavior mais adiante. Desativar a tecla Caps Lock e reutilizá-la como uma tecla fácil de alcançar Esc resulta em uma dupla vitória para vim use.

    
por Serge Stroobandt 16.04.2016 / 23:22
3

Eu tive o problema também no Ubuntu 16.04 com fcitx, e tive a solução no wiki fcitx , mas precisa fcitx tem 4.2.7 ou posterior

  • touch ~/.Xmodmap
  • escreva a configuração
  • reinicialize e o fcitx tentará carregá-lo automaticamente

Também há algumas explicações para o motivo.

    
por Bluethon 08.06.2016 / 09:35
3

@ A resposta de Daniel me indicou o caminho certo, mas eu gostaria de estender isso.

Funciona para mim no Linux Mint 17.2 e no Ubuntu 16.04.

Eu tentei todas as reviravoltas que pude pensar em continuar usando xmodmap , mas todas falharam quando o sistema entrou no modo de suspensão. O mesmo vale para os scripts de inicialização e aplicação que usam setxkbmap nos casos em que o daemon * settings (para mim é xfce4) é executado depois do script --- e a ordem não pode ser realmente influenciada.

O que eu finalmente consegui tem os seguintes ingredientes:

1) Escreva um arquivo de mapeamento de teclado mínimo para /usr/share/X11/xkb/symbols . Vamos chamar o arquivo mylayout Pode ser tão simples quanto

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic é apenas um nome, vamos encontrá-lo mais tarde.
  • O name[Group1] da mesma forma é apenas um nome que parece, mas não terá papel depois.
  • include "us" inclui o teclado simples. Na verdade us é outro arquivo no mesmo diretório. Este é o layout do teclado que estamos adaptando. Escolha um diferente, conforme necessário. Nota: sem ponto e vírgula para terminar esta linha.
  • A linha key é uma adaptação do teclado, mais pode seguir. O <AE03> pode ser encontrado nos arquivos em /usr/share/X11/xkb/keycodes . Use o programa xev para descobrir que a tecla "3" possui um código de acesso 12 e no arquivo de códigos de tecla Xfree86 é mapeado para <AE03> .
  • Finalmente, outra diretiva include para ativar outra opção de teclado, neste caso eu quero que a tecla Alt correta seja a tecla de deslocamento de nível 3, ou seja, a chave que dá acesso ao sinal sterling que eu defini acima. level3 é apenas um nome de arquivo na mesma pasta com ralt_switch uma seção dele. Dê uma olhada e escolha o que você precisa incluir.

2) Eu fiz não colocar o mylayout na pasta do sistema. Em vez disso, fiz apenas um link suave da pasta do sistema para uma pasta do meu gosto para ver imediatamente que isso não é software de estoque.

3) Além disso eu fiz não consertar evdev.xml , novamente para evitar hassles de atualização. Mas isso seria necessário para encontrar mylayout no editor de configuração de teclado (para xfce4 é xfce4-keyboard-settings ). Em vez disso, usei xfce4-settings-editor e alterei keyboard-layout->XkbLayout para mylayout (o nome do arquivo) e XkbVariant para basic (veja acima). Depois, mylayout/basic é exibido no editor de configurações do teclado também. Uma entrada em evdev.xml parece ser necessária apenas para poder selecionar o layout.

Dessa forma, as configurações do teclado agora sobrevivem ao modo de suspensão e são reinicializadas.

Mais informações podem ser encontradas aqui: link .

Outra abordagem para corrigir o problema do modo de suspensão (não experimentado por mim) pode ser encontrada aqui: link .

UPDATE: trabalhei com o Mint 18.3 no mesmo momento em que mudei as configurações no xfce4-settings-editor como descrito acima.

    
por Harald 06.11.2016 / 13:09
2

REVISÃO

Uma atualização no início de 2018 quebrou a persistência - o recarregamento automático do mapa de chaves após a suspensão ou hibernação. Como os métodos que usavam scripts /etc/pm/sleep.d pararam de funcionar (obsoletos?), Isso deixou apenas a maneira mais recente, usando / lib / systemd / system-sleep e scripts ligeiramente diferentes (que começaram a trabalhar em mapas de teclado!).

Portanto, este post é atualizado para o método mais recente de persistência e para incluir o carregamento inicial normal de keymaps, que também começou a funcionar. A rotina para converter um arquivo .Xmodmap em .xkbmap permanece inalterada.

Observe que esta é uma solução por usuário. Para uma resposta por dispositivo, consulte como aplicar um mapa de teclado a um único dispositivo . Este método pode ser adaptado para uso aqui.

Primeiro, modifique o arquivo .Xmodmap conforme desejado. Estes são mais fáceis de editar diretamente do que os arquivos .xkbmap. Quando é carregado:

% bl0ck_qu0te%

depois, converta para um arquivo .xkb:

% bl0ck_qu0te%

Para carregar automaticamente na inicialização, abra Aplicativos de inicialização, clique em Adicionar e, na linha de comando, insira:

% bl0ck_qu0te%

("user" é substituído pelo nome de usuário atual.) Para Name, talvez insira Load Keyboard Map. Adicione um comentário, se desejado, e pressione Salvar.

O mapa de teclado agora será carregado toda vez que o sistema for inicializado, mas não sobreviverá a uma suspensão ou hibernação. Para isso, crie um novo arquivo em / lib / systemd / system-sleep, talvez chamado 60_xkbmap, que contém:

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( Ref. ) Como acima, substitua "user" pelo nome de usuário atual.

O mapa de teclado agora deve ser carregado automaticamente e permanecer persistente. Nota:

  • Aplica-se à versão atual do LTS, 16.04, e provavelmente às versões posteriores também.
  • Extraído do post 14 do encadeamento de bugs acima ligado.
  • Comentários anteriores aplicados à postagem original.
por u2n 08.12.2016 / 05:16
0

Isso me fez tropeçar também quando atualizei do Ubuntu 12.04 para o 13.04.

Felizmente, essa configuração é agora (ou talvez sempre) facilmente acessível nas preferências do Teclado e pode ser alterada com alguns cliques do mouse.

  1. Vá para Configurações do sistema > Layout do teclado > Opções ...
  2. Nas Opções de layout de teclado, clique na seta para exibir as opções ▸ Ctrl key position .
  3. Coloque a marca de verificação em Alternar Ctrl e Caps Lock .

Lá vai você: Controle Esquerdo e Caps Lock trocaram de posição.

Não se esqueça de excluir ~/.Xmodmap depois de fazer a alteração.

    
por glts 05.10.2013 / 14:27
0

Acho que adicionar esse script à inicialização satisfaz:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

Eu tentei usar xmodmap ./Xmodmap , mas toda vez que ele é executado, um atraso perceptível ocorrerá.

    
por golopot 23.10.2014 / 13:29

Tags