タブレットのキーコードが認識されない

タブレットのキーコードが認識されない

現在のグラフィックタブレットのボタンをキーコードとして選択しようとしています。追加のマウスボタンよりもキーボードショートカットをサポートするプログラムが多いので(たとえば、Kritaは左クリックと右クリックのみをサポートしているようです)、タブレットボタンをキーコードとして処理してショートカットキーを使用できるようにしたいと思います。プログラムから割り当てられます。

今まで何をしたのか

/etc/udev/hwdb.d/90-huion.hwdbタブレットのスキャンコードをキーコードにマップするためにudev hwdbファイル()を作成しました。

私のhwdbファイルは次のとおりです。

evdev:input:b0003v256Cp006Ee0111*
 KEYBOARD_KEY_90001=a
 KEYBOARD_KEY_90002=a
 KEYBOARD_KEY_90003=a
 KEYBOARD_KEY_90004=a
 KEYBOARD_KEY_90005=a
 KEYBOARD_KEY_90006=a
 KEYBOARD_KEY_90007=a
 KEYBOARD_KEY_90008=a
 KEYBOARD_KEY_90009=a
 KEYBOARD_KEY_9000a=a
 MANUAL_OVERRIDE=1

検索部分では、ここで見つけた event23 値を使用します。

cat /sys/class/input/event23/device/id/bustype
> 0003
cat /sys/class/input/event23/device/id/product
> 006e
cat /sys/class/input/event23/device/id/vendor
> 256c
cat /sys/class/input/event23/device/id/version
> 0111

コロン(HID 256c:006e Pad)があるため、デバイス名に基づいてマッピングできず、コロンを区切り文字として使用するhwdbファイルではその名前がうまく機能しないようです。

ロードhwdb.binして再ロードし、udevルールを(再)トリガーしました。

sudo systemd-hwdb update
sudo udevadmin trigger
sudo udevadm control --reload

また、hwdbを以前のバージョンに更新してみましたが、sudo udevadm hwdb --update違いはありません。また、タブレットを取り外して再接続してみました。

を使用すると、udevadm info私のファイルが使用されていることがわかります(したがって、このMANUAL_OVERRIDE=1セクションでは何もしません)。 udevadm info出力:

P: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1.1/1-2.1.1:1.0/0003:256C:006E.0004/input/input23/event23
N: input/event23
L: 0
S: input/by-id/usb-256c_006e-event-mouse
S: input/by-path/pci-0000:00:14.0-usb-0:2.1.1:1.0-event-mouse
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1.1/1-2.1.1:1.0/0003:256C:006E.0004/input/input23/event23
E: DEVNAME=/dev/input/event23
E: MAJOR=13
E: MINOR=87
E: SUBSYSTEM=input
E: USEC_INITIALIZED=5852671
E: KEYBOARD_KEY_90001=a
E: KEYBOARD_KEY_90002=a
E: KEYBOARD_KEY_90003=a
E: KEYBOARD_KEY_90004=a
E: KEYBOARD_KEY_90005=a
E: KEYBOARD_KEY_90006=a
E: KEYBOARD_KEY_90007=a
E: KEYBOARD_KEY_90008=a
E: KEYBOARD_KEY_90009=a
E: KEYBOARD_KEY_9000a=a
E: MANUAL_OVERRIDE=1
E: ID_INPUT=1
E: ID_INPUT_TABLET=1
E: ID_INPUT_KEY=1
E: ID_VENDOR=256c
E: ID_VENDOR_ENC=256c
E: ID_VENDOR_ID=256c
E: ID_MODEL=006e
E: ID_MODEL_ENC=006e
E: ID_MODEL_ID=006e
E: ID_REVISION=3000
E: ID_SERIAL=256c_006e
E: ID_TYPE=hid
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030102:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usbhid
E: ID_PATH=pci-0000:00:14.0-usb-0:2.1.1:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_1_1_0
E: ID_INPUT_TABLET_PAD=1
E: LIBINPUT_DEVICE_GROUP=3/256c/6e:usb-0000:00:14.0-2.1
E: DEVLINKS=/dev/input/by-id/usb-256c_006e-event-mouse /dev/input/by-path/pci-0000:00:14.0-usb-0:2.1.1:1.0-event-mouse
E: TAGS=:power-switch:aaaaaaaaaa

デバッグ

テスト

私が知る限り、これはタブレットボタンをマッピングするために必要なすべてであり(ほとんど)有望に見えますevtest

Testing ... (interrupt to exit)
Event: time 1589801905.094479, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801905.094479, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1589801905.094479, -------------- SYN_REPORT ------------
Event: time 1589801905.252456, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801905.252456, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1589801905.252456, -------------- SYN_REPORT ------------
Event: time 1589801906.960440, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1589801906.960440, type 1 (EV_KEY), code 30 (KEY_A), value 1
...
Event: time 1589801913.582373, -------------- SYN_REPORT ------------
Event: time 1589801913.936376, type 4 (EV_MSC), code 4 (MSC_SCAN), value 9000a
Event: time 1589801913.936376, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1589801913.936376, -------------- SYN_REPORT ------------
Event: time 1589801914.086370, type 4 (EV_MSC), code 4 (MSC_SCAN), value 9000a
Event: time 1589801914.086370, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1589801914.086370, -------------- SYN_REPORT ------------
Event: time 1589801914.992371, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801914.992371, type 1 (EV_KEY), code 304 (BTN_SOUTH), value 1
Event: time 1589801914.992371, -------------- SYN_REPORT ------------
Event: time 1589801915.154366, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801915.154366, type 1 (EV_KEY), code 304 (BTN_SOUTH), value 0
Event: time 1589801915.154366, -------------- SYN_REPORT ------------
Event: time 1589801915.358379, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1589801915.358379, type 1 (EV_KEY), code 305 (BTN_EAST), value 1
Event: time 1589801915.358379, -------------- SYN_REPORT ------------
Event: time 1589801915.446357, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1589801915.446357, type 1 (EV_KEY), code 305 (BTN_EAST), value 0
Event: time 1589801915.446357, -------------- SYN_REPORT ------------

マップされていないように見える最後の2つのボタン(BTN_SOUTHとBTN_EAST)を除いて(おそらくマッピングされたボタンと同じスキャンコードを持つため)、他のすべてのボタンは正しく報告されますcode 30 (KEY_A)(このボタンがなぜあるかわからない場合)。 d知りたいです。両方のボタンがマッピングされていませんが、今はそれに集中したくありません。)

シェフ

xev正しくマッピングされていないような2つのボタンのみを使用すると、その2つのボタンのxevコンソール出力は次のようになります。

ButtonPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8912753, (1,806), root:(971,821),
    state 0x0, button 15, same_screen YES

ButtonRelease event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8912953, (1,806), root:(971,821),
    state 0x0, button 15, same_screen YES

ButtonPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8913377, (1,806), root:(971,821),
    state 0x0, button 16, same_screen YES

ButtonRelease event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8913581, (1,806), root:(971,821),
    state 0x0, button 16, same_screen YES

hwdbが変更される前に、ボタンは1-3と8-16のボタンとして選択されていましたが(マッピングされていないボタン15と16はそれぞれ出力でBTN_SOUTHとBTN_EASTボタンでしたevtest)、ほとんどxevは表示されません(マッピングされていないマッピングのみ対応)15および16)。

情報

これを使用すると、sudo dmesg --follow不明なキー押しのように見えるイベントは表示されません。

エバールメニュー

evemu-describehwdb変更前の出力:

# EVEMU 1.3
# Kernel: 5.7.0-1-MANJARO
# DMI: dmi:bvnAmericanMegatrendsInc.:bvr1205:bd05/11/2018:svnSystemmanufacturer:pnSystemProductName:pvrSystemVersion:rvnASUSTeKCOMPUTERINC.:rnPRIMEZ270-P:rvrRevX.0x:cvnDefaultstring:ct3:cvrDefaultstring:
# Input device name: "HID 256c:006e Pad"
# Input device ID: bus 0x03 vendor 0x256c product 0x6e version 0x111
# Supported events:
#   Event type 0 (EV_SYN)
#     Event code 0 (SYN_REPORT)
#     Event code 1 (SYN_CONFIG)
#     Event code 2 (SYN_MT_REPORT)
#     Event code 3 (SYN_DROPPED)
#     Event code 4 ((null))
#     Event code 5 ((null))
#     Event code 6 ((null))
#     Event code 7 ((null))
#     Event code 8 ((null))
#     Event code 9 ((null))
#     Event code 10 ((null))
#     Event code 11 ((null))
#     Event code 12 ((null))
#     Event code 13 ((null))
#     Event code 14 ((null))
#     Event code 15 (SYN_MAX)
#   Event type 1 (EV_KEY)
#     Event code 256 (BTN_0)
#     Event code 257 (BTN_1)
#     Event code 258 (BTN_2)
#     Event code 259 (BTN_3)
#     Event code 260 (BTN_4)
#     Event code 261 (BTN_5)
#     Event code 262 (BTN_6)
#     Event code 263 (BTN_7)
#     Event code 264 (BTN_8)
#     Event code 265 (BTN_9)
#     Event code 304 (BTN_SOUTH)
#     Event code 305 (BTN_EAST)
#     Event code 306 (BTN_C)
#     Event code 331 (BTN_STYLUS)
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#     Event code 1 (ABS_Y)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#   Event type 4 (EV_MSC)
#     Event code 4 (MSC_SCAN)
# Properties:
N: HID 256c:006e Pad
I: 0003 256c 006e 0111
...

後:

# EVEMU 1.3
# Kernel: 5.7.0-1-MANJARO
# DMI: dmi:bvnAmericanMegatrendsInc.:bvr1205:bd05/11/2018:svnSystemmanufacturer:pnSystemProductName:pvrSystemVersion:rvnASUSTeKCOMPUTERINC.:rnPRIMEZ270-P:rvrRevX.0x:cvnDefaultstring:ct3:cvrDefaultstring:
# Input device name: "HID 256c:006e Pad"
# Input device ID: bus 0x03 vendor 0x256c product 0x6e version 0x111
# Supported events:
#   Event type 0 (EV_SYN)
#     Event code 0 (SYN_REPORT)
#     Event code 1 (SYN_CONFIG)
#     Event code 2 (SYN_MT_REPORT)
#     Event code 3 (SYN_DROPPED)
#     Event code 4 ((null))
#     Event code 5 ((null))
#     Event code 6 ((null))
#     Event code 7 ((null))
#     Event code 8 ((null))
#     Event code 9 ((null))
#     Event code 10 ((null))
#     Event code 11 ((null))
#     Event code 12 ((null))
#     Event code 13 ((null))
#     Event code 14 ((null))
#     Event code 15 (SYN_MAX)
#   Event type 1 (EV_KEY)
#     Event code 30 (KEY_A)
#     Event code 256 (BTN_0)
#     Event code 304 (BTN_SOUTH)
#     Event code 305 (BTN_EAST)
#     Event code 306 (BTN_C)
#     Event code 331 (BTN_STYLUS)
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#     Event code 1 (ABS_Y)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#   Event type 4 (EV_MSC)
#     Event code 4 (MSC_SCAN)
# Properties:
N: HID 256c:006e Pad
I: 0003 256c 006e 0111
...

さまざまなデバイスをお試しください

私が何か間違っているかどうかを確認するために、USBマウスで非常に似ていることを試しました(左クリックなので、スキャンコード90001をマップしませんでした)。マウスを選択しxevて右クリックまたはスクロールすると、期待した文字「a」が表示されます(したがって、質問に誤った文字aが表示されるのはこれです。)xevキーボードとマウスの出力を比較しました。

キーボード付きXev(マッピングなし)
KeyPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4209087, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4209151, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False
マウスでXev(「a」にマップされたボタン)
MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4211519, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4211679, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

デバイス

問題のタブレットは私がインストールした「Huion New 1060Plus」であり、私のdigimend-kernel-drivers-dkms-gitタブレットがevdevドライバを使用していると思いました(代わりにwacomドライバをインストールしていませんが、で使用したのでインストールしxf86-input-wacomました)。ボタンの問題に加えて、ペンの圧力を含むタブレットが正しく動作します。libwacomlibinputgnome-settings-daemon

使用説明書

私は主に次のソースの指示に従います。

ベストアンサー1

おすすめ記事