Remaping Keys no Ubuntu 17

0

Por favor me ajude a resolver o seguinte problema: Eu tenho um pedal USB que quero funcionar como tecla de controle para o meu trabalho. Até agora, o sistema identifica que este pedal está funcionando como tecla F2 (estou usando o Ubuntu 17) e gostaria de remapear o sistema para entender a tecla F2 como tecla Control. Eu tentei vários manuais, alguns dos quais se referem à solução Xmodmap que parecem ser obsoletos, outro para XKB que eu devido à minha estupidez não conseguiram entender. Estou vendo algumas sugestões suas sobre como posso fazer isso acontecer. Agradecemos antecipadamente.

    
por Aleksas Tunikas 10.12.2017 / 11:52

1 resposta

0

método XKB

O XKB pode não ser a melhor maneira de alterar o comportamento deste dispositivo, mas deve ser possível em ambientes X tradicionais. Contextos XKB mais recentes, como Wayland ou kmscon , podem não fornecer a granularidade necessária para configurar layouts XKB separados em dispositivos arbitrários. Também não funcionará sob o console tradicional.

A aplicação de um udev hwdb override para que essa alteração funcione sob todos eles.

Em ambientes X tradicionais, o setxkbmap usa uma bandeira -device e xkbcomp usa -i :

% bl0ck_qu0te%

Use xinput -list para encontrar os números de identificação do dispositivo.

Para provar isso, use o setxkbmap ... -print para gerar um layout básico, salve-o em um arquivo e carregue-o com xkbcomp filename.xkb $DISPLAY . Talvez seja necessário desativar os daemons de configurações de teclado do GNOME / KDE durante o teste.

$ setxkbmap -layout us -option '' -print > f2toctrl.xkb

Edite o arquivo f2toctrl.xkb - estamos apenas alterando a linha xkb_symbols :

// generated with 'setxkbmap -print' and modified
// load: xkbcomp -i DeviceID# filename $DISPLAY
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete" };
    xkb_compat    { include "complete" };
    xkb_symbols   {
        include "pc+us+inet(evdev)"

        // existing key definition (see 'xkbcomp $DISPLAY - | grep -A 3 FK02')
        // key <FK02> {
        //    type= "CTRL+ALT",
        //    symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]
        // };

        // patterned after ctrl:nocaps option
        // see /usr/share/X11/xkb/symbols/ctrl
        replace key <FK02> { [ Control_L, Control_L ] };
        modifier_map  Control { <FK02>, <LCTL> };

    };
    xkb_geometry  { include "pc(pc105)" };
};

Agora carregue-o (substitua N pelo ID do dispositivo que você encontrou em xinput -list ):

$ xkbcomp -i N f2toctrl.xkb $DISPLAY

Você pode verificar suas alterações com xkbcomp -i N $DISPLAY - | less e testar o botão fisicamente em vários aplicativos para garantir que ele seja reconhecido.

Para ambientes X normais (não DE), o comando loading pode ser adicionado a ~/.xinitrc ou outros scripts de inicialização do gerenciador de janelas. Você precisaria adicionar essa substituição ao banco de dados XKB do sistema para uso com a maioria dos compositores Wayland e DEs como GNOME / KDE, mas nesses contextos eu não tenho certeza de como você aplicaria a substituição apenas ao dispositivo de pedal. Se isso fosse viável, eu criaria /usr/share/X11/xkb/symbols/pedal para manter a substituição Ctrl demonstrada acima (e potencialmente outras substituições úteis para o dispositivo).

Um arquivo de layout muito simplista pode ter esta aparência:

// /usr/share/X11/xkb/symbols/pedal

// convert F2 key operation to Ctrl
default partial modifier_keys
xkb_symbols "basic" {
    name[Group1]= "USB Pedal as Ctrl";
    replace key <FK02> { [ Control_L, Control_L ] };
    modifier_map Control { <FK02>, <LCTL> };
};
    
por quixotic 29.12.2017 / 02:41