マルチメディアキーボードの再マッピング

マルチメディアキーボードの再マッピング

私はキーボードとマルチメディア ボタンの両方を備えた G7BTS リモート コントローラーを持っています。「OK」ボタンを除くほとんどのボタンは正常に動作します。

OK ボタンにはキーコード 353 があり、これは KEY_SELECT を意味します。しかし、私の Ubuntu 20.04 はそれを認識しません。

以下は私が行ったいくつかの研究です:

  1. sudo evtest

出力:

/dev/input/event9:  G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
  1. grep "" /sys/class/input/event11/device/id/*

出力:

/sys/class/input/event11/device/id/bustype:0005
/sys/class/input/event11/device/id/product:0041
/sys/class/input/event11/device/id/vendor:045e
/sys/class/input/event11/device/id/version:0300
  1. sudo evtest /dev/input/event11

出力:

Testing ... (interrupt to exit)
Event: time 1640250050.701930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640250050.701930, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 1640250050.701930, -------------- SYN_REPORT ------------
  1. /etc/udev/hwdb.d/60-keyboard.hwdb

OK ボタンを「Enter」に再マッピングしようとしました。

60-keyboard.hwdbファイルの内容:

# G7BTS
evdev:input:b0005v045Ep0041*
 KEYBOARD_KEY_c0041=enter
  1. sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'

出力:

KEYBOARD_KEY_c0041=enter

今のところ、「OK」ボタンを押しても xev に出力が表示されません。

ご提案やご協力をいただければ幸いです。

答え1

みんな、ありがとう。

解決策を見つけるのに数日かかりましたが、ついに正しい方法を見つけました。

参照

スキャンコードをキーコードにマッピングする

背景

X プロトコルのバージョン 11 は、1 バイトのキー コードのみをサポートします。したがって、255 を超えるキー コードは無視されます。Ubuntu 20.04 LTS は、今のところ、X プロトコルのバージョン 11 を使用しています。

私の G7BTS リモート キーボードには「OK」ボタンがあります。このボタンのキー コードは 353 です。「xev」では、このボタンを押しても何も起こりません。

解決

簡単に言えば、解決策は、特定のキーを他のキーに再マップするために使用される hwdb 構成ファイルを作成することです。

ユーデブ

udev は、/etc/udev/hwdb.bin 内のハードウェア データベース インデックスを管理するために、hwdb と呼ばれる組み込み関数を提供します。データベースは、/usr/lib/udev/hwdb.d/、/run/udev/hwdb.d/、および /etc/udev/hwdb.d/ ディレクトリにある .hwdb 拡張子のファイルからコンパイルされます。デフォルトのスキャンコードからキーコードへのマッピング ファイルは、/usr/lib/udev/hwdb.d/60-keyboard.hwdb です。

USB カーネル モダリアスによって識別される汎用入力デバイス (USB キーボードも含む):

evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>

<bus_id>、<vendor_id>、<version_id>は、4桁の16進大文字のベンダー、製品、バージョンIDです。

上記のIDを見つける方法が鍵です

install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
Device Information
 Name       G7BTS Comsumer Control
 Type       keyboard
 Bus        0x0005
 Vender     0x045e
 Product    0x0041
 Version    0x0300

もうひとつ重要なことは、「OK」ボタンのスキャンコードを取得することです。

install evtest
sudo apt-get install evtest
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:    Lid Switch
/dev/input/event1:    Sleep Button
/dev/input/event2:    Power Button
/dev/input/event3:    AT Translated Set 2 keyboard
/dev/input/event4:    SynPS/2 Synaptics TouchPad
/dev/input/event5:    TPPS/2 IBM TrackPoint
/dev/input/event6:    ThinkPad Extra Buttons
/dev/input/event7:    Video Bus
/dev/input/event8:    Integrated Camera: Integrated C
/dev/input/event9:    G7BTS Keyboard
/dev/input/event10:    G7BTS Mouse
/dev/input/event11:    G7BTS Consumer Control
/dev/input/event12:    G7BTS System Control
/dev/input/event13:    HDA Intel PCH Mic
/dev/input/event14:    HDA Intel PCH Dock Mic
/dev/input/event15:    HDA Intel PCH Headphone
/dev/input/event16:    HDA Intel PCH Dock Headphone
/dev/input/event17:    HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11:    HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19:    HDA Intel PCH HDMI/DP,pcm=8
Select the device event number [0-19]: ^C

「/dev/input/event11」に注目してください

sudo evtest /dev/input/event11

次に「OK」ボタンを押すと、出力は以下のようになります。

Event: time 1640238746.775220, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640238746.775220, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 1640238746.775220, -------------- SYN_REPORT ------------

「値 c0041」に注意してください。この値 c0041 は「OK」ボタンのスキャン コードです。

hwdbファイルを作成する

これで、必要な ID とスキャン コードが手に入りました。これらを上記の「USB カーネル モダリティによって識別される汎用入力デバイス (USB キーボードも含む)」に入力すると、最終的に以下の構成ファイル G7BTS.hwdb が作成されます。

evdev:input:b0005v045Ep0041e0300*
 KEYBOARD_KEY_c0041=enter

このコンテキストでは、「OK」ボタンは「Enter」キーにマッピングされています。任意のキーにマッピングできます。

ファイルを宛先に置く

sudo mv G7BTS.hwdb /etc/udev/hwdb.d/

アップデート

sudo udevadm hwdb --update
sudo udevadm trigger --verbose 

テスト

sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'

結果は

KEYBOARD_KEY_c0041=enter

終わり

キーを再マッピングする手順は以上です。これらの再マッピングは再起動後も機能します。

答え2

私はUbuntu 20.04で外付けキーボードを動作させることができました。https://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/

  1. sudo evtestキーボードに関する情報を見つけるために使用します:
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
  1. sudo evemu-describe先頭のゼロを含むキーボードのプロパティを見つけるために使用します。出力には次のようなものが表示されます。
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
  1. .hwdbファイルを作成しますが、先頭の000をすべて含める、 そして16進数の記号はすべて大文字にするのように:
# Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0005v05ACp024F*

  1. システムを再起動する必要はありません。以下を実行してください。
$ sudo systemd-hwdb update
$ sudo udevadm trigger
  1. キーボードが正しくマッピングされているかどうかは、$ udevadm info /dev/input/event20(event20をキーボードのイベントに置き換えて)を使用して確認できます。

関連情報