xkb não está carregando a configuração do microsoft4000

1

Talvez eu esteja perdendo algo, mas parece que o xkb não está carregando a seção microsoft4000 de / usr / share / X11 / xkb / symbols / inet.

$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      microsoft4000
layout:     us
options:    caps:escape
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+us+inet(evdev)+capslock(escape)
geometry:   microsoft(natural)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)+capslock(escape)"    };
    xkb_geometry  { include "microsoft(natural)"    };
};

Agora, no inet, há uma seção do microsoft4000 keyboard

// Microsoft Natural Ergonomic Keyboard 4000 
partial alphanumeric_keys
xkb_symbols "microsoft4000" {
    include "inet(media_nav_common)"
    key <I192>  {       [ XF86Launch1           ]       };
    key <I193>  {       [ XF86Launch2           ]       };
    key <I194>  {       [ XF86Launch3           ]       };
    key <I195>  {       [ XF86Launch4           ]       };
    key <I196>  {       [ XF86Launch5           ]       };
//  Missing because of lack of support from kbd driver: Zoom in and
//  slider.
};

Mas parece ser ignorado. Se eu monitorar as teclas digitadas com o xev, aperte as teclas 1-5, e recebo o seguinte:

$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", ,  }'
192 XF86Launch5
193 XF86Launch6
194 XF86Launch7
195 XF86Launch8
196 XF86Launch9

qual deve ser como XF86Launch1-5? Isso é um bug ou estou faltando alguma coisa?

Eu estou rodando no Ubuntu 16.04.

    
por Sasa 12.02.2017 / 02:42

1 resposta

2

A verdadeira questão é: você pode fazer as coisas que deseja fazer com essas chaves?

Eles são sempre as mesmas chaves depois de reiniciar ou relogar? Você pode configurá-los como atalhos (com e sem modificadores)? Se o XKB vê a chave como XF86Launch1 ou XF86Launch5 é menos importante que:

  • é consistentemente essa chave?
  • você pode dizer SoftwareX para fazer FunctionY quando essa tecla é pressionada? (inicie seu media player, maximize a janela atual ou qualquer outra função que você queira que a tecla execute)

É um erro?

  • Talvez. Certamente não está carregando os símbolos inet(microsoft4000) (essa é a seção microsoft4000 de /usr/share/X11/xkb/symbols/inet que você cita). Parece que isso pode ser incluído na definição do modelo ou como uma opção separada, mas não há uma regra para isso (em /usr/share/X11/xkb/rules/evdev* ). Mudar para o modelo microsoft7000 pode se aproximar do que você espera.

  • ... mas provavelmente não. A definição exata dessas chaves realmente não importa - contanto que elas sejam definidas como algo reconhecível e exclusivo umas das outras, o XKB fez o seu trabalho. Para esse fim, suas chaves parecem estar funcionando bem. Eu suspeito que a data dos símbolos inet(microsoft4000) de 2006-ish , mas foram substituídos mais tarde por inet(evdev) seção.

Você está vendo XF86Launch5 e assim por diante, porque a seção inet(evdev) define essas chaves:

    // Evdev Standardized Keycodes
    partial alphanumeric_keys
    xkb_symbols "evdev" {
        ...
        key <FK14>   {      [ XF86Launch5       ]       };
        key <FK15>   {      [ XF86Launch6       ]       };
        key <FK16>   {      [ XF86Launch7       ]       };
        key <FK17>   {      [ XF86Launch8       ]       };
        key <FK18>   {      [ XF86Launch9       ]       };
    };

... e /usr/share/X11/xkb/keycodes/evdev confirma que são traduzidos como códigos de tecla 192-196 :

    default xkb_keycodes "evdev" {
        ...
        <FK14> = 192;
        <FK15> = 193;
        <FK16> = 194;
        <FK17> = 195;
        <FK18> = 196;
        ...

Vamos carregar mesmo assim!

Primeiro, diga às configurações do GNOME para deixar o teclado em paz:

gsettings set org.gnome.settings-daemon.plugins.keyboard active false
# change false to true to reenable

Em seguida, execute isso para testes:

setxkbmap -print | 
  sed -e '/xkb_symbols/s/"[[:space:]]/+inet(microsoft4000)&/' | 
  xkbcomp - $DISPLAY

Esse canal despeja seu setxkbmap -print output, o sed adiciona a definição inet(microsoft4000) à linha de símbolos:

    xkb_symbols   { include "pc+us+inet(evdev)+capslock(escape)+inet(microsoft4000)"    };

... que é então canalizado para xkbcomp para compilação e instalação no Xserver. Agora xev deve mostrar as chaves XF86Launch1-5 .

Se isso funcionar, você pode fazer uma mudança permanente de duas maneiras.

  • Você pode deixar o gsettings desativado e adicionar o setxkbmap ... | sed ... | xkbcomp ... pipeline a um script $HOME/.xprofile que será executado no login. (Como alternativa, redirecione a saída do sed para $HOME/.config/my-xkb-map e você só precisará do comando xkbcomp no login.)

  • Você pode editar /usr/share/X11/xkb/rules/evdev* para adicionar o arquivo de símbolos como uma opção oficial. evdev é a conversão de opção para arquivo; evdev.lst lista uma descrição para cada opção; evdev.xml é uma versão XML das descrições. Eu acredito que você precisa acertar em evdev.xml para ferramentas GUI para mostrar a nova opção, mas apenas evdev.lst é necessário para setxkbmap entender. As alterações nesses arquivos de sistema podem ser substituídas por atualizações futuras, portanto, faça backups ou um script sed ou patch para adicioná-los novamente quando necessário.

XKB é ótimo! Vamos fazer com que essas chaves façam outra coisa completamente diferente!

Whoa lá, vaqueiro. Você certamente pode criar sua própria personalização , se desejar. Copie essa cláusula inet(microsoft4000) symbol para outro arquivo e defina essas chaves como quiser. F13 XF86AudioMicMute ?

Veja os recursos no final da resposta do superusuário para mais rabbitholes XKB.

    
por quixotic 24.03.2017 / 01:18