Remapear as teclas de função do Microsoft Sculpt Mobile Keyboard no Linux

0

Situação

Eu tenho um Microsoft Mobile Keyboard, que é conectado via Bluetooth. No meu laptop um xUbuntu 16.04 está sendo executado.

As teclas F1 a F12 do Teclado Móvel do Sculpt funcionam como teclas de função Reproduzir / Pausar , Mudo ... Para usar as teclas F1 para F12 conforme pretendido, é necessário pressionar as teclas Fn , que estão à direita. Isto é bastante desconfortável se você quiser pressionar ALT + F4 .... Eu gostaria de mudar permanentemente para as teclas Fx (ou bloquear a tecla Fn ). Adicionalmente, eu gostaria de trocar as chaves PageUp e PageDown contra Home e End .

Solução do Windows

Use o AutoHotKey conforme descrito em

Solução que não funciona

A resposta se aplica a outro teclado

Linux Solution para outros teclados (não funciona)

Deve ser possível alterar ou alternar as chaves com as ferramentas de linha de comando xkbcomp ou setxkbmap , conforme descrito aqui:

Com base nessas perguntas e respostas, usei xev para encontrar os nomes das chaves (identificadores de XKB) das chaves em questão. Eu queria criar o seguinte mapeamento:

# F1 to F5 (F5 probably does not work)
I172 -> FK01
MUTE -> FK02
VOL- -> FK03
VOL+ -> FK04
FIND -> FK05

# F11 and F12
FK22 -> FK11
FK23 -> FK12

# switch Page Up and Page Down with Home and End
PGUP -> HOME
HOME -> PGUP
PGDN -> END
END  -> PGDN

Assim, criei o código apropriado:

xkb_symbols "remote" {
    key <I172> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
    };
    key <MUTE> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
    };
    key <VOL-> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
    };
    key <VOL+> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
    };
    key <FIND> {
            type= "CTRL+ALT",
            symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
    };
    key <FK22> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
    };
    key <FK23> {
            type= "CTRL+ALT",
            symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
    };
    key <PGDN> { [ End ] };
    key <END> { [ Next ] };
    key <PGUP> { [ Home ] };
    key <HOME> { [ Prior ] };
};

E adicionou-o à definição de mapa de chaves existente com xkbcomp e adicionou +custom(remote) à variável xkb_symbols do mapeamento de chave do dispositivo respectivo do dispositivo. Não funcionou.

Eu acho que eles talvez não funcionem porque o teclado é reconhecido como ponteiro e não como teclado. A saída xinput list diz:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Mouse                        id=11   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=14   [slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick             id=15   [slave  pointer  (2)]
⎜   ↳ Microsoft Sculpt Mobile Keyboard          id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ Laptop_Integrated_Webcam_E4HD             id=12   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=16   [slave  keyboard (3)]

Soluções alternativas (não experimentadas)

Eu li sobre alguns mouses que foram reconhecidos como teclado e não como ponteiro. Modificando o código Linux Kernel + recompilando, foi uma das soluções. Eu não quero recompilar o Kernel apenas para que meu teclado funcione corretamente ....

Solução de hardware (funcionando)

Pergunta

  • Aminhasuposiçãoem"Solução Linux para outros teclados" está errada?
  • Se a resposta à primeira pergunta for no : Como resolvo o problema descrito baseado em software (trocar e substituir chaves) sem recompilar meu Kernel?
por daniel.neumann 11.06.2018 / 15:39

0 respostas