Como faço para remapear certas chaves ou dispositivos?

230

Estou procurando uma maneira de remapear certas chaves no Ubuntu.

i.e.

Eu gostaria de mudar PgUp para Home ou PgDown para End .

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

    
por NES 05.02.2011 / 14:20

8 respostas

246

Aviso: A partir de 2013, o Ubuntu e os derivativos não usam mais o xmodmap , mas usam xkb . Para mais informações, consulte 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. Ou seja, PgUp .

  2. xev gerará 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 chave está atribuída no momento, o código numérico é o ID interno para reconhecer a chave. Agora faça isso com outra chave, ou seja, PgDown dê essa 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ê quiser 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 a tecla Shift (por exemplo, para layouts de teclado britânico, Shift + 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 shift, você pode fazer:

     xmodmap -e "keycode 53 = backslash bar"
    

Informações adicionais: A sequência desses mapeamentos é Chave , Shift + Chave , mode_switch + Chave , mode_switch + Shift + Tecla , AltGr + Chave , AltGr + Shift + Tecla . 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, execute os seguintes comandos depois dos que estão acima:

xmodmap -pke >~/.Xmodmap

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

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

Agora você pode modificar .Xmodmap e executar xmodmap .Xmodmap do console para ver as alterações imediatamente. As alterações em .Xmodmap persistirão.

fonte: Fóruns do Ubuntu

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 -pm para obter uma lista de modificadores e então fazer:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Suponha, por exemplo, que você deseja obter um ponto em vez de uma vírgula no teclado numérico (útil para a maioria dos programadores), mas deseja manter o comportamento de "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 em xev .

    
por NES 08.02.2015 / 11:17
20

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
    
por cmcginty 17.12.2012 / 19:46
16

Acabei de fazer uma reflexão tardia .. Acho que você pode significar algo totalmente diferente por "remapear" ... mas deixarei minha resposta como está ... (não sei como reatribuir uma chave para se comportar como outra)

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

Existem duas maneiras gerais de remapear a chave.

  • localmente para um programa específico
    (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 este Publicação 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 Gnome ... Ele é chamado Editable Menu Accelerator ... É uma ferramenta muito 'sensível', mas bastante poderoso .. Você pode ativá-lo executando gconf-editor (via Terminal ou Alt + F2) ... navegue até desktop - gnome - interface e selecione can_change_accels .... Você pode então altere os itens do menu para qualquer coisa virtual que você goste (por programa / janela) ... sugiro que você o desative assim que tiver feito o que precisa ..

Caso contrário, você pode configurar teclas de atalho globais. Eu uso um programa chamado xbindkeys ,ehátambémumaopçãodisponívelnomenuprincipal-Preferences,chamadaKeyboardShortcuts

Sevocêusarxbindkeys,vocêprecisaráadicioná-loaosseus"Aplicativos de inicialização" (Menu Principal - Preferências) ... Também (como sugerido por Stefano Palazzo) Eu já havia escrito uma descrição mais detalhada do xbindkeys em uma responder sobre isso askubuntu page

    
por Peter.O 05.02.2011 / 15:04
8

Aqui está como eu tentei mudar o mapeamento da tecla ENTER para a tecla SHIFT (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 que importa é 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"

SALVE OS RESULTADOS:

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

ADICIONAR

 xmodmap ~/.Xmodmap

$ sudo reboot

O principal problema foi que a reversão não funcionou. A tecla ENTER foi mapeada para a tecla SHIFT_R ; mas a chave SHIFT_R não foi mapeada para a tecla ENTER . Vai a figura.

    
por Bill Davis 27.01.2012 / 04:04
7

Para fazer remapeamentos globais independentemente do X, você pode usar o console-setup (5) .

No meu caso eu queria remapear a tecla Caps Lock para D , já que minha tecla D está quebrada:)

Primeiro eu usei dumpkeys (1) para obter um template para um mapeamento, no caso da tecla D , 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 (código-chave 58 no 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 para console-setup

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

e console-setup precisam ser reconfigurados (ignorando questões 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.

    
por arand 09.01.2014 / 13:09
3

Eu 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. Portanto, é impossível criar um atalho que gere, por exemplo, o evento Control .

Eu 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 atalhos de teclado do Unity - > Atalhos personalizados para configurar meu atalho.

E, em vez de xmacro , usei o programa xvkbd para gerar os eventos de teclado, mas isso é apenas uma preferência pessoal. Tanto xmacro quanto xvkbd funcionam quase da mesma maneira. Uma dica adicional é adicionar um parâmetro de atraso em xmacro ou xvkbd para garantir que os eventos não sejam perdidos.

    
por HRJ 20.01.2014 / 06:30
2

Para mim, o AutoKey do Software Center funcionou melhor. Tem GUI intuitiva, para adicionar nova ligação, clique em Novo - > Frase 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. Adicione uma tecla de atalho que você deseja usar
  4. Adicione o comando ao campo de texto, por exemplo, para emular a tecla de seta para a esquerda - seria <left> (a lista de teclas especiais é aqui ).
por bruddha 28.07.2018 / 14:15
0

Se você precisar remapear uma chave apenas para um programa específico, acabou de adicionar este recurso a hax11.

I'd like to change PgUp to Home or PgDown to End.

Para fazer isso com o hax11, abra o arquivo de configuração do perfil do programa em ~/.config/hax11/profiles (por exemplo, ~/.config/hax11/profiles/usr\lib\firefox\firefox ) e adicione:

Enable=1
MapK112=K110
MapK117=K115
    
por 15.04.2019 / 12:33