Como posso remapear persistentemente as chaves no Ubuntu 16.04?


23

Isso está funcionando para a sessão atual:

costales@dev:~/Desktop$ xmodmap -e "keycode 166 = less"
costales@dev:~/Desktop$ xmodmap -e "keycode 167 = greater"

Então eu criei este arquivo de configuração:

costales@dev:~/Desktop$ cat ~/.Xmodmap 
keycode 166 = less
keycode 167 = greater
costales@dev:~/Desktop$ 

Mas não está funcionando após uma reinicialização. Como eu poderia forçar o remapeamento a sobreviver à reinicialização?


Apenas respondi isso usando xkbaqui: askubuntu.com/a/960097/554991 .
danwild 28/09

Respostas:


15

Estou usando o 16.04 há um tempo e parece usar o sddm como seu gerenciador de desktop. Antes, era LightDM e GDM. Os dois predacessores estão documentados para carregar ~/.Xmodmapautomaticamente, mas não consigo encontrar nada explicitamente dizendo que o sddm faz.

Portanto, pode ser aconselhável forçá-lo a carregar um novo script. Você só precisa executar xmodmap ~/.Xmodmape pode fazer isso de várias maneiras:

Provavelmente, existem algumas outras maneiras de gerenciar isso, essencialmente fazendo a mesma coisa.


2
Obrigado pela dica! Adicionar à inicialização não funcionou e ~ / .xinitrc não sai. Mas acrescente "xmodmap ~ / .Xmodmap" a ~ / .bashrc funcionou! :)
Costales 24/03

1
Adicioná-lo através das ferramentas gráficas de inicialização (que cria uma nova entrada ~/.config/autostart) funciona cerca da metade do tempo. Eu reiniciei cerca de 10 vezes agora e 5 vezes o comando foi executado e as outras 5 vezes não. :-(
Alexander Rechsteiner

1
@ Alex Rechsteiner: Este parece ser um problema no Ubuntu 16.04. Eu tenho mexido com comandos de inicialização e remapeamento de chave, e o comportamento parece muito inconsistente. Eu não sou um especialista nesse tipo de coisa, mas parece totalmente ridículo que isso esteja acontecendo ...
nicorellius

6

Eu adicionei um arquivo /etc/X11/Xsession.d/80_xmodmapcom este conteúdo:

#!/bin/sh
# Set custom keycodes
#
# This file is sourced by Xsession(5), not executed.
# The "|| true" is to ensure that the Xsession script does not terminate on error

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; then
        if [ -f "$USRMODMAP" ]; then
                /usr/bin/xmodmap "$USRMODMAP" || true
        fi
fi

Isso funciona sempre.


Parece funcionar, mas estas são as mensagens que recebo em erros .xsessions: .Xmodmap: 1: keyym ruim na lista de modificadores de remoção 'Caps_Lock', nenhum código de chave correspondente. Este é o meu .Xmodmap: $ cat .Xmodmap remove Lock = Caps_Lock keycode 9 = Escape keycode 66 = Escape
MaikoID 25/16

4

abra as propriedades da sessão do gnome. adicione comando e nome. O arquivo da área de trabalho será criado em ~ / .config / autostart.

remenber: use o caminho absoluto , por exemplo, /home/xxx/.Xmodmap. nunca use '~' como o diretório da sua casa.


2

Na minha longa experiência com remapeamento chaves no Ubuntu, a solução definitiva é a de modificar um arquivo chamado evdevno /usr/share/X11/xkb/keycodes.

Execute este comando no prompt de comando.

sudo gedit /usr/share/X11/xkb/keycodes/evdev

Lembre-se de que o gedit é um editor de texto do Ubuntu, para que você possa usar o nano ou vim em vez do gedit.

O arquivo está no formato: ALIAS: CODE. Você pode trocar botões trocando códigos de teclas diferentes. Por exemplo, para trocar RCONTROL por RETURN, edite duas linhas no evdev para isso:

<RTRN> = 105;

<RCTL> = 36;

Para saber o código numérico de um botão, execute xevo terminal.

Consulte a documentação para obter mais informações. https://buildmedia.readthedocs.org/media/pdf/python-evdev/latest/python-evdev.pdf


1

Navegar para

/usr/share/X11/xkb/symbols

Com privilégios sudo, em um editor, abra o layout que você deseja editar. Substitua os valores.

Após a reinicialização, as alterações serão aplicadas.


Aqui está um exemplo que eu uso para remapear meu teclado devido a problemas de hardware do teclado.

exemplo de remapeamento do teclado


2
Essas edições serão substituídas na próxima vez que os pacotes que possuem esses arquivos forem atualizados.
Muru

Isso pode ser verdade, mas eu duvido que estes especificamente sejam atualizados com muita frequência. Estou satisfeito com esta solução há alguns meses desde que resolvi o problema e nem uma vez precisei fazer algo adicional. E para evitar isso, você pode salvar o arquivo e substituí-lo no caso de um evento ou, (o que parece mais seguro), apenas recriar o processo.
quaeched

1

Depois de pesquisar no Google, consegui resolver o remapeamento das chaves defeituosas do meu laptop. Todas as teclas com defeito no meu Thinkpad T400 estão funcionando bem após o remapeamento. Além disso, é permanente, sem uma carga extra no núcleo da CPU.

  • Primeiro encontre o layout do teclado ou o código da tecla usando o comando abaixo.

    xevv -event keyboard 
    
  • Por exemplo, no meu código-chave do Thinkpad T400, encontrado da seguinte maneira:

    Keycode of "z" key is 52
    Keycode of "x" key is 53
    Keycode of "c" key is 54
    Keycode of "v" key is 55
    Keycode of "F6" key is 72
    Keycode of "F10" key is 76
    Keycode of "F11" key is 95
    Keycode of "F12" key is 96 
    
  • Remapeando as teclas de caracteres "z" "x" "c" "v" atribuindo as teclas de função "F6" "F10" "F11" "F12".

  • Modifique as linhas como abaixo (faça backup do arquivo antes de fazer alterações facilmente na reversão, se algo der errado).

    sudo vi /usr/share/X11/xkb/keycodes/evdev
    
  • Encontre as linhas e altere o valor como abaixo:

    <AB01> = 72;
    <AB02> = 76;
    <AB03> = 95;
    <AB04> = 96;
    
  • Comente estas linhas ou remova as linhas:

    //  <FK06> = 72;
    //  <FK10> = 76;
    //  <FK11> = 95;
    //  <FK12> = 96;
    
  • Salvar e sair.

  • Remapeando chaves especiais.

  • Faça backup do arquivo antes de fazer alterações na reversão, se algo der errado.

    cd /usr/share/X11/xkb/symbols/
    
    sudo vi pc
    
  • Adicione ou modifique as linhas abaixo na função "xkb_symbols" editing "{"

    key [SCLK] {    [  Prior        ]   };
    key [PAUS] {    [  Next         ]   };
    
  • Salvar e sair.

  • Limpar cache.

    sudo rm -rf /var/lib/xkb/*
    
  • Reinicie.


Eu remapeei uma tecla de seta quebrada (cursor) para outra tecla usando esta técnica. É simplesmente (xev) e pressione nova tecla para obter seu scancode, depois edite / usr / share / X11 / xkb / keycodes / evdev para substituir o código original da tecla de seta pelo novo código e remover a nova linha da tecla de seta pelo original scancode. Comentei onde quer que eu fizesse uma alteração e mantive um backup do arquivo. Após uma reinicialização, ele funciona perfeitamente, incluindo combinações de shift / ctrl / alt com a nova tecla de seta. E a alteração deve ser mantida, mesmo ao atualizar pacotes e atualizações de versão do SO.
Matthew

1

Editor Gráfico

gnome-tweaks > Teclado e mouse> Opções adicionais de layout

Mapas principais


0

Como os arquivos .Xmodmap são muito mais fáceis de editar do que o xkb, eu uso o .Xmodmap como um arquivo 'fonte', depois o converto em xkb (o padrão atual) e carrego automaticamente na inicialização usando o método .bashrc.

São alguns passos simples publicados aqui .

Funciona perfeitamente e usando o xkb à prova de futuro quando o suporte ao .Xmodmap é descartado.

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.