Linuxで特定のキーボードのキーのみを再マッピングする方法は?

Linuxで特定のキーボードのキーのみを再マッピングする方法は?

USB経由で接続された数字キーパッドがあり、私の目標は、その数字キーパッドのキーを再マップして、カスタムコマンドを実行したり、他のキーの組み合わせにマッピングできるようにすることです。

私のファイルには次のものがあります.xbindkeysrc

~ $ cat .xbindkeysrc
"xte 'keydown Super_L' 'key Left' 'keyup Super_L'"
  m:0x10 + c:79 + Release
  Mod2 + KP_Home

これにより、NUM 7キー(通常7が印刷されます)がに再マップされますSuper_L + Left Arrow。これは素晴らしいと動作しますが、すべてのキーボードで動作しますが、私の目標は数字キーボードでのみ動作するようにすることです。

これを行う方法を探していましたが、最も近い方法はを使用することですxinput set-button-map。残念ながら、これはマウスなどのデバイスでのみ機能するようです。私は数字キーパッドのボタンマッピングを取得しようとするのが好きですxinput get-button-map [device id]が、1から7までの数字だけを印刷し、キーボードにもっとボタンがあるので、必ずしも意味があるわけではありません。

どんな提案がありますか?

答え1

使用を検討してくださいhttps://github.com/rvaiya/keyd。この目的のために書かれており、システム全体で動作します。

答え2

まず、デバイスIDを見つけて使用します。xinput list

$ xinput list

⎣ Virtual core keyboard
...
↳   USB Keyboard     id=19  [slave  keyboard (3)]

デバイス/キーボードによるキーマッピング

(これはキーのみをマッピングします。スクリプトをキーにマッピングする方法の詳細については、以下を参照してください。)

setxkbmap特定のデバイス(キーボード)をターゲットにするオプションがあります。

次に、設定を照会してsetxkbmapデバイス設定を確認します(「19」を使用します)。

$ setxkbmap -device 19 -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us(euro)+us(intl):2+inet(evdev)"    };
    xkb_geometry  { include "pc(pc105)" };
};

これがsymbols私たちが探しているものですls /usr/share/X11/xkb/symbols。パラメータはファイルのセクションを参照します。xkb_symbols "intl" {

追加するには書くことができるたとえば、rupesignなどのオプションを使用すると、次のことができます。setxkbmap -device 19 -option rupeesign:4

オプションをリセットするには、setxkbmap -device 19 -option追加引数なしで使用してください。

ただし、一部のカスタム構成が必要です。これは、そのフォルダにカスタムファイルを追加して使用するだけでは機能しないため、少し面倒です。

したがって、いくつかのフォルダを作成し、現在の構成で一時ファイルを作成します。

mkdir -p ~/.config/xkb/symbols
cd ~/.config/xkb 
setxkbmap -device 19 -print > tempfile.txt
touch symbols/mysymbol

tempfile.txt含めるように変更mysymbol(mymapping)

...
xkb_symbols   { include "pc+us(euro)+us(intl):2+inet(evdev)+mysymbol(mymapping)"   

必要に応じて編集してください。例をsymbol/mysymbol参照してください。/usr/share/X11/xkb/symbolsこれにより、num 7キーにビットコイン記号が追加されます。

partial
xkb_symbols "mymapping" {
    key <AE07> { [  7,   &,   U20BF ]  };

};

最後に、このマッピングを有効にするには、次を使用しますxkbcomp-i 19デバイス設定を参照)。

xkbcomp -i 19 -I$HOME/.config/xkb tempfile.txt $DISPLAY

(一部のwarningメッセージが表示されることがありますが、まだ機能します。)

スクリプトを実行するためのキーマッピング

キーをスクリプトにマッピングするツールがあります。actkbd

取付ける:

$ git clone https://github.com/thkala/actkbd 
$ cd actkb
$ make 
$ sudo make install

次に、キーボードのデバイス名を見つけます/dev/input/。私の場合/dev/input/by-id/usb-_USB_Keyboard-event-kbd

これで、いくつかの例を含む設定ファイルが作成され、/etc/actkbd.confすべて削除できます。以下はもう少し実用的な例です。

# 'a' starts gedit
30:::gedit
# 'shift+7' starts a custom script. (keynumber 8 for some reason)
42+8:::/home/me/myscript.py

キー番号(またはキーの組み合わせ)を見つけるには、 's'オプションを使用してください。

$ actkbd -d /dev/input/by-id/usb-_USB_Keyboard-event-kbd -s

/etc/actkbd.confで設定したら、プログラムを起動します(-Dバックグラウンドモード用)。

$ actkbd -d /dev/input/by-id/usb-_USB_Keyboard-event-kbd

関連情報