Faça o Terminal reconhecer PageUp e PageDown quando remapeado para chaves diferentes

2

Eu entendo que o Terminal por padrão não suporta PgDn e PgUp . Eu não tenho PgDn e PgUp no meu teclado, mas eles são remapeados para chaves diferentes atualmente e, portanto, Shift + PgDn não funciona. Eu também tentei Fn + Acima . Como posso fazer o Terminal reconhecer minhas chaves de paginação remapeadas?

    
por William 11.10.2016 / 03:15

3 respostas

6

(comentário: você encontrou o XKB! parabéns, é um buraco de coelho para cair. note que sua solução vai se surpreender na próxima vez que o pacote xkb-data do ubuntu atualizar esse arquivo, e afetará qualquer outro teclado você conecta que usa a mesma configuração.)

O XKB segue um modelo chamado RMLVO - Regras, Modelo, Layout, Variante, Opções. Sua solução altera um arquivo de modelo do sistema, mas uma solução melhor seria encontrar ou criar uma opção para adicionar suas substituições. ( evdev é a regra padrão para a maioria das distribuições, e a maioria dos teclados externos usa um modelo pc , embora modelos internos de notebooks possam ter variações específicas que já estão próximas ao seu usecase. Um teclado padrão US QWERTY usará o us layout sem variante, embora você possa escolher o intl ou altgr-intl variants se você trabalha com outros idiomas.

As opções são substituições específicas para a funcionalidade básica. Se você quiser desativar o CapsLock porque essa tecla é uma porcaria, já existe uma opção para isso ( caps:none ), ou você pode configurá-lo para ser uma chave Escape extra ( caps:escape ). Você pode ver as substituições específicas em /usr/share/X11/xkb/symbols/caps ; cada estrofe é uma opção diferente que você pode ativar em tempo de execução.

Se você setxkbmap -print você deve obter uma lista de sua configuração atual do XKB:

$ setxkbmap -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"};
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

Crie seu arquivo de substituição:

$ mkdir -p .config/xkb/symbols
$ touch .config/xkb/symbols/pgupdown

Agora edite o novo arquivo com seu editor favorito e inclua o seguinte:

// mapping PgUp and PgDown to other keys
partial alphanumeric_keys
xkb_symbols "rwinmenu" {
    key <RWIN> { [ Prior     ]   };
    key <MENU> { [ Next      ]   };
};

// same but switched
partial alphanumeric_keys
xkb_symbols "menurwin" {
    key <MENU> { [ Prior     ]   };
    key <RWIN> { [ Next      ]   };
};

Agora crie um mapa de teclado básico:

$ setxkbmap -print > ~/.config/xkb/mymap

Edite esse arquivo e adicione sua nova opção à lista de símbolos no formato +optionfile(function) :

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete" };
    xkb_compat    { include "complete"};
    xkb_symbols   { include "pc+us+inet(evdev)+pgupdown(rwinmenu)" };
    xkb_geometry  { include "pc(pc105)" };
};

Se você decidir mais tarde que prefere o PgUp na tecla Menu, basta substituir rwinmenu por menurwin e está pronto.

Agora você pode carregar esse arquivo com xkbcomp :

$ xkbcomp -I$HOME/.config/xkb $HOME/.config/xkb/mymap $DISPLAY

Inicie o xev (do pacote x11-utils ) e pressione as teclas para garantir que as alterações sejam carregadas:

# sed to scrape out non-kbd events; xev is pretty spammy
$ xev | sed -ne '/^KeyPress/,/^$/p'

Se você conseguiu tudo nos lugares certos, sua chave de Menu deve estar enviando os eventos Avançar, e a tecla Win_R enviando Prior. Se isso funcionar, você pode adicionar o comando xkbcomp acima ao seu .xinitrc ou .xprofile , para que ele seja executado quando você fizer login ou iniciar o X.

... a menos que você esteja usando o Gnome. (e / ou possivelmente o KDE.) Então, nós iremos mais adiante na toca do coelho, e descobriremos como incorporar essa nova opção nos arquivos do sistema para que os DEs possam pegá-la como uma opção padrão. Essencialmente, isso envolverá

  1. colocando seu arquivo de opções em /usr/share/X11/xkb/symbols/ (é por isso que pgupdown foi uma boa opção de opção, pois não há um arquivo de símbolo preexistente com esse nome)
  2. e, em seguida, adicionando linhas em /usr/share/X11/xkb/rules/evdev* (para mapear o formato optionsfile:function da linha de comando para o +optionsfile(function) usado por xkbcomp )
  3. e finalmente definindo o DE para usar seu layout e opções preferidos.

Etapa 2: Se você precisar seguir esse caminho, talvez seja necessário executar a etapa 2 novamente após qualquer atualização relacionada a xkb.

# in /usr/share/X11/xkb/rules/evdev
# find the line that starts "! option = symbols" and add new lines:
  pgupdown:rwinmenu = +pgupdown(rwinmenu)
  pgupdown:menurwin = +pgupdown(menurwin)

# in /usr/share/X11/xkb/rules/evdev.lst
# find the line that starts "! option" and add a new line:
  pgupdown:rwinmenu          PgUp on RWin, PgDown on Menu
  pgupdown:menurwin          PgUp on Menu, PgDown on RWin

# in /usr/share/X11/xkb/rules/evdev.xml
# .... ummm .... ¯\_(ツ)_/¯  .... sorry! ....

Etapa 3: verifique se localectl está disponível em seu sistema. localectl pode configurar os teclados do console virtual, além de configurar um teclado X11 padrão do sistema. Como as duas opções estão configuradas nos arquivos de regras, você pode usar rwinmenu ou menurwin nesses comandos.

$ localectl set-x11-keymap us pc "" pgupdown:rwinmenu
#  format               [layout] [model] [variant] [option1,...,optionN]

Para o Gnome, você precisará usar dconf-editor ou gsettings :

# set layout/variant
$ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us')]"

# set options
$ gsettings set org.gnome.desktop.input-sources xkb-options "['pgupdown:rwinmenu']"

Outra opção para o Gnome pode ser desativar suas configurações de teclado; isso deve permitir que a opção localectl ou a opção user-config permaneça em vigor:

$ gsettings set org.gnome.settings-daemon.plugins.keyboard active false

Solução de problemas: Se suas alterações não parecem estar sendo escolhidas e você tem certeza de que conseguiu a formatação do arquivo, exclua todos os arquivos *.xkm de /var/lib/xkb/ . Estes são mapas de chaves pré-compilados em cache e podem estar atrapalhando.

Recursos:

por 18.01.2017 / 03:24
2

Mudar as chaves em / usr / share / X11 / xkb / símbolos / pc parece funcionar, não consegui obter a outra resposta acima para funcionar. Então você usa as novas chaves com o botão shift.

key <RWIN> {    [ Prior     ]   };
key <MENU> {    [ Next          ]   };
    
por 15.01.2017 / 02:35
0

O terminal padrão do Ubuntu suporta pgup e pgdn, os atalhos são [shift] + pgup e [shift] + pgdn. A maioria dos outros terminais que você tenta terá exatamente os mesmos atalhos, principalmente porque o pgup e o pgdn já são usados pelo bash para certas coisas, então você não pode realmente usá-lo.

edit: se você precisar remapear suas chaves pgp e pgdn, você pode seguir esta resposta em askubuntu para linux:

link

    
por 19.10.2016 / 22:53