(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á
- colocando seu arquivo de opções em
/usr/share/X11/xkb/symbols/
(é por isso quepgupdown
foi uma boa opção de opção, pois não há um arquivo de símbolo preexistente com esse nome) - e, em seguida, adicionando linhas em
/usr/share/X11/xkb/rules/evdev*
(para mapear o formatooptionsfile:function
da linha de comando para o+optionsfile(function)
usado porxkbcomp
) - 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: