現在のグラフィックタブレットのボタンをキーコードとして選択しようとしています。追加のマウスボタンよりもキーボードショートカットをサポートするプログラムが多いので(たとえば、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-describe
hwdb変更前の出力:
# 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
キーボードとマウスの出力を比較しました。
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
ました)。ボタンの問題に加えて、ペンの圧力を含むタブレットが正しく動作します。libwacom
libinput
gnome-settings-daemon
使用説明書
私は主に次のソースの指示に従います。