XKB のキーの再マッピング

XKB のキーの再マッピング

Scroll Lock キーを再マップして、任意の Windows キーのキーコードを生成するようにしようとしています。

まず、現在のキーマップをダンプします。

xkbcomp $DISPLAY original-dump

次に、興味のあるキーのキーコードを見つけます。

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

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

ここで、コンポーネント名をファイルに出力します。

setxkbmap -print > original-components

ファイルを編集してキーコードの変更を追加します。

    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)" };
    };

上記のファイルを modified-components として保存し、実行します。

xkbcomp modified-components $DISPLAY

再度ダンプ:

xkbcomp $DISPLAY original-dump

キーコードを確認してください:

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

ここまでは順調ですが、実行するとxev、Scroll Lockキーのキーコードがまだ78

実行した場合:

xmodmap -e "keycode 78 = Super_L"

xevまだ私に見せてくれる78ただし、少なくとも XFCE で LWIN と RWIN 用に作成したショートカットは機能します。

何が間違っているのか知りたい日本語。 ありがとう。

答え1

次の新しいアプローチを試しました(成功しました)

sclkfileディレクトリにという名前の新しいファイルを作成し/usr/share/X11/xkb/symbols/、次の内容を追加しました。

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

に新しいルールを追加しました/usr/share/X11/xkb/rules/evdev:

sclkoption:sclk_super = +sclkfile(sclk_super)

ルールの説明は次のとおりです/usr/share/X11/xkb/rules/evdev.lst

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

ここでも/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>

最後に実行します:

$ setxkbmap -option sclkoption:sclk_super

エラーは発生せず、レイアウトのコンポーネントを印刷すると次のようになります。

$ 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)"     };
};

新しいルールはそこにあります。

ここで、以下を実行しますxev:

keycode 78 (keysym 0xffeb, Super_R)

キーコードは依然として 78 ですが、キーシムは Super_R です。成功

関連情報