Remapeando uma chave para XKB

Remapeando uma chave para XKB

Estou tentando remapear a tecla Scroll Lock para que ela produza o código de acesso de qualquer uma das teclas do Windows.

Primeiro de tudo, despejo o mapa de teclado atual:

xkbcomp $DISPLAY original-dump

Em seguida, encontre os códigos das chaves nas quais estou interessado:

cat original-dump | grep SCLK
 <SCLK> = 78;

 cat original-dump | grep LWIN
 <LWIN> = 133;

Agora imprimo os nomes dos componentes em um arquivo:

setxkbmap -print > original-components

Edite o arquivo para adicionar minha modificação de código-chave:

    xkb_keymap {
    xkb_keycodes  { 
        include "evdev+aliases(qwerty)" 
        // Remap Scroll-lock to the keycode of LWIN(133)
        <SCLK> = 133;
    };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
    };

Salve o arquivo acima como componentes modificados e execute:

xkbcomp modified-components $DISPLAY

Despejar novamente:

xkbcomp $DISPLAY original-dump

Verifique os códigos-chave:

cat another-dump | grep SCLK
<SCLK> = 133;

Até aí tudo bem, mas quando executo xev, o código da tecla Scroll Lock ainda está78.

Se eu correr:

xmodmap -e "keycode 78 = Super_L"

xevainda me mostra78, mas pelo menos os atalhos que criei no XFCE para LWIN e RWIN funcionam.

Gostaria de saber o que estou fazendo de erradoxkb. Obrigado.

Responder1

Tentei a seguinte nova abordagem (com sucesso)

Criou um novo arquivo nomeado sclkfileno /usr/share/X11/xkb/symbols/diretório e adicionou o seguinte conteúdo:

 // Make the Scroll Lock key a left Super.
xkb_symbols "sclk_super" {
    replace key <SCLK> { [ Super_L ] };
    modifier_map  Mod4 { <SCLK> };
};

Adicionada a nova regra em /usr/share/X11/xkb/rules/evdev:

sclkoption:sclk_super = +sclkfile(sclk_super)

E descrições da regra em /usr/share/X11/xkb/rules/evdev.lst:

! option
sclkoption           Scroll Lock behaviour
sclkoption:sclk_super Scroll Lock is Super

Aqui também /usr/share/X11/xkb/rules/evdev.xml:

<configItem>
        <name>sclkoption</name>
        <description>Scroll Lock behaviour</description>
</configItem>    
<option>
    <configItem>
        <name>sclkoption:sclk_super</name>
        <description>Scroll Lock is Super</description>
    </configItem>
</option>

Finalmente execute:

$ setxkbmap -option sclkoption:sclk_super

Sem erros e quando imprimo os componentes do meu layout:

$ 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)+sclkfile(sclk_super)"     };
        xkb_geometry  { include "pc(pc105)"     };
};

A nova regra está aí.

Agora, se eu executar xev:

keycode 78 (keysym 0xffeb, Super_R)

O código-chave ainda é 78, mas o símbolo da chave é Super_R.Sucesso.

informação relacionada