Questão Como faço para remapear certas chaves ou dispositivos?


Eu estou procurando uma maneira de remapear certas chaves no Ubuntu.

isto é

Eu gostaria de mudar PgUp para Casa ou PgDown para Fim.

Existe um comando interno ou uma ferramenta para reatribuir chaves no Ubuntu / GNOME?


214
2018-02-05 13:20


origem


checkout minha resposta Aqui. Não vale a pena copiar e colar a mesma resposta. Talvez isso te ajudasse. - Rahul Virpara
Quaisquer ligações do tipo Emacs aqui para CTRL-P / N para etapas unitárias? - Léo Léopold Hertz 준영
Desde algum tempo xmodmap está deprimido! para obter uma configuração de todo o sistema você tem que usar xkb. Então edite o arquivo de idioma em /usr/share/X11/xkb/symbols/ para adicionar suas alterações lá. Vejo askubuntu.com/a/898462/34298 - rubo77


Respostas:


Aviso prévio: A partir de 2013, o Ubuntu e os derivados já não usam xmodmap, mas ao invés disso use xkb. Para mais informações, veja esta resposta. A resposta abaixo não é mais relevante para as versões atuais.


Para remapear certas teclas, você precisa de duas ferramentas. Primeiro xev (ferramenta de linha de comando) e segundo xmodmap (também ferramenta de linha de comando). Ambos devem estar disponíveis no Ubuntu sem instalá-los extra.

  1. Inicie a janela do terminal e execute xev. Agora está ativo e espera que você pressione uma tecla. Em seguida, pressione a tecla cujo comportamento você deseja alterar. isto é PgUp.

  2. xev irá produzir algumas informações sobre a tecla pressionada. A terceira linha é importante. Deve ser semelhante a:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    neste exemplo Prior é o nome do comportamento ao qual a tecla está atribuída no momento, o código numérico é o ID interno para reconhecer a chave. Agora faça isso com outra chave, por exemplo PgDown dê esta saída

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Aqui novamente a parte interessante para nós é keycode 115 e Next - o nome do comportamento.

  3. Agora, quando você quer trocar as duas chaves use xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Isso altera a chave com o código de tecla 110 no seu teclado para a ação Next. É bem simples.

    Note que se a chave que você está mapeando deve ter um significado diferente quando usada com o Mudança chave (por exemplo, para layouts de teclado britânico, Mudança+2 dá aspas), então você pode simplesmente listar o comando secundário após o primeiro. Por exemplo, se você quiser que a chave com o código 53 seja mapeada para a barra invertida normalmente, mas para o símbolo da barra quando usada com o deslocamento, você poderá:

     xmodmap -e "keycode 53 = backslash bar"
    

Informação adicional: A sequência desses mapeamentos é Chave, Shift + chave, mode_switch + chave, mode_switch + Shift + chave, AltGr + Key, AltGr + Shift + Key. Para pular uma coluna use NoSymbol. Além disso, Aqui é uma lista abrangente de todos os keyyms.

Nota: Estas alterações são apenas para a sessão X ativa e serão perdidas após a reinicialização. Quando você quiser salvar as alterações permanentemente, você deve executar os seguintes comandos após os seguintes:

xmodmap -pke >~/.Xmodmap

(cria um arquivo chamado .Xmodmap no seu diretório home (~))

Então você tem que criar um arquivo chamado .xinitrc no seu diretório home onde você coloca o comando xmodmap .Xmodmap dentro.

Agora você pode modificar .Xmodmap e corra xmodmap .Xmodmap do console para ver as alterações imediatamente. As mudanças na .Xmodmap vai persistir.

fonte: Ubuntu Foruns

Coisas bônus:

Se a chave que você está remapeando tiver um comportamento diferente dependendo de um estado ( como como as teclas no teclado numérico dependem do NumLock) você simplesmente tem que fazer xmodmap -pmpara obter uma lista de modificadores e faça:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Suponha, por exemplo, que você deseja obter um período em vez de uma vírgula no teclado numérico (útil para a maioria dos programadores), mas deseja manter o comportamento "excluir" quando o NumLock está desativado.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, Porque xmodmap -pm nos diz que mod2 é Num_Lock, os outros nomes são obtidos pressionando as teclas xev.


233
2017-12-17 18:46



xev não é capaz de pegar Fn pressões chave - om-nom-nom
Adorei como você explicou tudo ao invés de apenas deixar escapar a sintaxe com lugares para substituir - Programming Noob
A resposta selecionada não funcionou para remapear a tecla Caps-lock para mim no Ubuntu 12.10. Eu era capaz de fazer isso indo para Configurações do Sistema -> Teclado -> Configurações de Layout -> Opções, que tem uma lista de chaves e comportamentos alternativos. Trabalhou sem falhas no Unity e no terminal. - Allyl Isocyanate
Estranho, eu fiz tudo, mas meus keymappings ainda são redefinidos após o reinício. - Costa
Eu não acho que tenho um -event flag no Ubuntu 12.04. Ele lança um erro e não menciona "evento" em man xev. - isomorphismes


Se você está tentando mover uma tecla Shift, há algumas etapas extras:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

18
2018-02-05 14:04



+1 A resposta mais unix-y de todos aqueles para um modificador (eu já tinha feito muito, muito caminho de volta com o meu iBook 2, quando eu queria que a tecla enter tivesse a função de Control_R, mas tinha esquecido os detalhes). - rbrito
Uma resposta importante para usuários que usam teclados em laptops da Lenovo - Einar Ólafsson


Acabei de ter uma reflexão tardia .. Eu acho que você pode significar algo totalmente diferente por "remapear" .. mas vou deixar a minha resposta como é ... (eu não sei como re-atribuir uma chave para se comportar como outro)

ATUALIZAR: minha "reflexão tardia" foi confirmada; (Eu respondi a pergunta errada:) ... por favor, veja a resposta do Wiki da Comunidade do NES (aceita acima).

Existem duas maneiras gerais de remapear revincular uma chave.

  • localmente para um programa em particular
    (uma chave pode ser usada para coisas diferentes em diferentes aplicativos / janelas)
  • globalmente para um usuário específico
    (uma chave tem a mesma função em todas as janelas)

Para métodos 'locais para um programa', às vezes há uma maneira de alterar as combinações de teclas oferecidas pelo próprio aplicativo ... por exemplo.

Firefox tem um addon chamado keyconfig ... para algumas informações, veja isto Postagem MozillZine 

A maioria dos programas do Ubuntu são baseados no Gnome e existe um utilitário específico para modificar a tecla de atalho para qualquer item de menu desses aplicativos do Gnome ... Ele é chamado Editable Menu Accelerator ... É uma ferramenta muito 'delicada', mas bastante poderosa. Você pode ativá-la executando gconf-editor (via Terminal ou Alt + F2) ... navegue até desktop-gnome-interface e selecione can_change_accels .... Você pode então alterar os itens do menu para qualquer coisa virtual que você gosta (por programa / janela) ... Eu sugiro que você desative-o assim que você tiver feito o que você precisa ..

Caso contrário, você pode configurar as teclas de atalho globais. Eu uso um programa chamado xbindkeys  Install xbindkeys, e há também uma opção disponível através do Menu Principal - Preferências, chamado Keyboard Shortcuts 

Se você usar xbindkeys, você precisará adicioná-lo aos seus "Aplicativos de Inicialização" (Menu Principal - Preferências) ... Também (como sugerido por Stefano Palazzo) eu escrevi anteriormente uma descrição mais detalhada de xbindkeys em uma resposta sobre isso página askubuntu


16
2018-01-27 03:04



+1, muito legal! Uma sugestão: você deve integrar seu ótima resposta de outra pergunta neste, talvez também explique um pouco o formato de configuração dos xbindkeys. - Stefano Palazzo♦
O pouco sobre a atribuição de outras chaves poderia ser tratado por xdotool, confira a man page, eu usei para resolver este problema. - Stefano Palazzo♦
Eu recentemente encontrei uma outra abordagem com uma ferramenta chamada xmodmap em combinação com uma ferramenta chamada xev. Eu não sei quais são as diferenças entre xmodmap e xbindkeys, mas isso funciona muito bem para mim. algum conselho com ferramenta para preferir os dois nomes? Aqui está um guia passo a passo muito útil que descreve xmodmap e xev ubuntuforums.org/showpost.php?p=7675138&postcount=2 - NES
@NES .. Parece que eu abordei o ponto errado .. Você parece querer realmente remapear a forma como uma determinada tecla é interpretada pelo sistema operacional, ou seja, uma interpretação de teclado não padrão, enquanto eu tenho me referido a um interpretação de teclado padrão e simplesmente sobrecarregar as atribuições de tecla padrão. (Eu acho que o que você está depois é semelhante a trocar os botões esquerdo e direito do mouse) .. Bem, parece que a minha resposta foi boa para a coisa errada :) - Peter.O
sim, mas não tem problema. a resposta também é interessante. O guia passo a passo que eu postei o link acima foi o caminho certo. Então, vou postar uma resposta curta com a solução que outros usuários têm um bom guia. obrigado fred - NES


Aqui está como eu tentei mudar o mapeamento do ENTRAR chave para o MUDANÇA chave (e vice versa):

$ uname -a

RELATÓRIOS:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

RELATÓRIOS:

/usr/bin/xmodmap

$ which xev

RELATÓRIOS:

/usr/bin/xev

$ xev

(ignore as próximas cinquenta linhas ou mais)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

O importante é a terceira linha de cada pressionamento de tecla:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

REVERSE O MAPEAMENTO:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

SALVAR OS RESULTADOS:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

ADICIONAR

 xmodmap ~/.Xmodmap

$ sudo reboot

O principal problema foi que a reversão não funcionou. o ENTRAR chave foi mapeada para o SHIFT_R chave; mas o SHIFT_R chave não foi mapeada para o ENTRAR chave. Vai saber.


8
2018-01-20 05:30





Para fazer remapeamentos globais independentemente do X, você pode fazer uso de console de configuração (5) em vez de.

No meu caso eu queria remapear Caps Lock chave para D, desde o meu D-key está quebrado :)

Primeiro eu usei dumpkeys (1) para obter um modelo para um mapeamento, no caso do D-key, o bit interessante é o mapeamento para keycode 32 (no meu teclado); Note que existem dois espaços no padrão grep!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Para alterar o mapa para aplicar a Caps Lock (keycode 58 no meu teclado)

sed 's/32/58/' -i tempfile

Agora lê

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Para adicionar esse remapeamento ao mapa padrão, ele simplesmente precisa ser anexado ao arquivo de inclusão de remapeamento console-setup

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

e console-setup precisa ser reconfigurado (pular perguntas de baixa prioridade com -phigh)

sudo dpkg-reconfigure console-setup -phigh

Agora o remapeamento deve ser concluído e ser carregado automaticamente na inicialização.


6
2017-07-28 12:15





Passei um dia inteiro tentando criar um atalho para Ctrl+Pageup.

Eu tentei pela primeira vez xmodmap mas isso não pode gerar eventos modificadores. Por isso, é impossível criar um atalho que gere, por exemplo, o Control evento.

Eu então tentei xbindkeys com xmacro. Esse tipo de trabalho, mas xbindkeys não é capaz de capturar algumas combinações de teclas no meu sistema, como Alt + ___.

Então eu finalmente usei os Atalhos de Teclado da própria Unity -> Atalhos Personalizados para configurar meu atalho.

E em vez de xmacroEu usei agora xvkbd programa para gerar os eventos de teclado, mas isso é apenas uma preferência pessoal. Ambos xmacro e xvkbd trabalho quase o mesmo. Uma dica adicional é adicionar um parâmetro de atraso xmacro ou xvkbd para garantir que os eventos não sejam perdidos.


3





Para mim, o AutoKey, do Centro de Software, funcionou melhor. Tem intuitiva GUI, para adicionar nova ligação clique em New -> Phrase e

  1. Adicionar nome, clique em OK
  2. Na seção "Configurações de frase", verifique se o uso de colar está definido como teclado
  3. Adicionar tecla de atalho que você deseja usar
  4. Adicionar comando ao campo de texto, por exemplo, para emular a tecla de seta para a esquerda - seria <left> (lista de teclas especiais é Aqui).

0