在 Linux(特别是 Wayland)上配置 XP-Pen 绘图板

在 Linux(特别是 Wayland)上配置 XP-Pen 绘图板

我给自己买了 XP-Pen Deco mini 7 绘图板。指针和压力开箱即用,但我想将其旋转到左手模式并更改键盘和手写笔按钮上的操作。

我在用着摇摆archlinux 上的 Wayland 合成器。

答案1

前言

有官方的linux“驱动程序”XP-Pen 网站上(还奥尔包)。据我所知,它是一个用户空间应用程序(与仅 X11 的 Qt5 链接),它应该通过 DE 自动启动,并以某种方式通过 USB 与平板电脑交互。它带有 udev 规则,使普通用户可以写入 XP-Pen USB 设备。

strace显示它尝试了所有 USB 设备 ( /dev/bus/usb/*/*),但最终无法找到我的平板电脑。也许你会有更好的运气

平板电脑事件处理概述

                                         +————————————————+
                                         |                |
                                         |  Wayland       |
                                         |  compositor    |
                                         |                |
+——————————+  event  +—————————+  event  +——————————————+ |  event  +———————+
|  Tablet  |————————>|  Linux  |————————>|   libinput   | |————————>|  app  |
+——————————+         +—————————+         |              | |         +———————+
                                         | +——————————+ | |
                                         | | libwacom | | |
                                         +—+——————————+—+—+

Wayland 合成器(Sway、Mutter、KWin 到 Qt)使用库输入处理输入设备及其事件。它依次使用libwacom有关平板电脑的硬件信息(按钮数量、其代码、手写笔是否有“橡胶”笔尖等)

库输入可以通过以下方式与 X11 一起使用xf86-输入-libinput因此以下步骤不仅限于 Wayland。

左手模式

如果libwacom报道称平板电脑是“可逆的”,库输入可以配置为将指针事件从它转换为左手模式。

基本上libwacom是已知图形输入板的数据库,每个图形输入板都在.tablet文件中进行了描述(请参阅整个列表在回购协议中)。

您可以检查是否libwacom了解您的平板电脑:

$ libwacom-list-local-devices
/dev/input/event19 is a tablet but not supported by libwacom
Failed to find any devices known to libwacom.

如果没有,你就必须.tablet自己创造。对于 XP-Pen Deco mini 7,我在以下位置创建了以下文件/usr/share/libwacom/xp-pen-deco-mini-7.tablet

# XP-Pen
# Deco mini7
#

[Device]
Name=XP-Pen Deco mini7
ModelName=
DeviceMatch=usb:28bd:0928
Class=Bamboo
Width=7
Height=4.37
Styli=0xffffd;

[Features]
Stylus=true
Reversible=true
Touch=false
Buttons=0

最重要的是两个选择:

  • DeviceMatch指定如何识别平板电脑并具有格式BUS:VENDOR_ID:MODEL_ID。您可以通过以下方式找到该值udevadm
$ udevadm info /dev/input/event19
...
E: ID_VENDOR_ID=28bd
...
E: ID_MODEL_ID=0928
...
E: ID_BUS=usb
  • Reversible表示平板电脑可以在左手模式下使用。

(其他选项的更多详细信息和说明可以在回购中的示例

验证 libwacom 现在是否可以识别平板电脑:

$ libwacom-list-local-devices
devices:
- name: 'XP-Pen Deco mini7'
  bus: 'usb'
  vid: '0x28bd'
  pid: '0x0928'
  nodes:
  - /dev/input/event19

现在您可以配置库输入通过你的合成器。对于 Sway 添加到您的配置

input type:tablet_tool left_handed enabled

为了侏儒凯德您可以使用系统设置 GUI。

笔记您可能需要重新插入平板电脑才能应用配置。

键盘和手写笔按钮映射

XP-Pen 将键盘按钮事件作为单独的键盘设备发送。您可以使用以下命令查看它们evtest(此处按钮已映射):

$ sudo evtest /dev/input/event18
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x28bd product 0x928 version 0x100
Input device name: "UGTABLET 6 inch PenTablet Keyboard"
Supported events:
...
Testing ... (interrupt to exit)
Event: time 1648039909.676558, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039909.676558, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1648039909.676558, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70056
Event: time 1648039909.676558, type 1 (EV_KEY), code 44 (KEY_Z), value 1
Event: time 1648039909.676558, -------------- SYN_REPORT ------------
^Z
[1]+  Stopped                 sudo evtest /dev/input/event18
$ fg
sudo evtest /dev/input/event18
Event: time 1648039909.764562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039909.764562, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1648039909.764562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70056
Event: time 1648039909.764562, type 1 (EV_KEY), code 44 (KEY_Z), value 0
Event: time 1648039909.764562, -------------- SYN_REPORT ------------
Event: time 1648039944.475630, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039944.475630, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1648039944.475630, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70057
Event: time 1648039944.475630, type 1 (EV_KEY), code 183 (KEY_F13), value 1
Event: time 1648039944.475630, -------------- SYN_REPORT ------------
Event: time 1648039944.551696, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039944.551696, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1648039944.551696, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70057
Event: time 1648039944.551696, type 1 (EV_KEY), code 183 (KEY_F13), value 0
Event: time 1648039944.551696, -------------- SYN_REPORT ------------

(这是按下前两个按钮的结果。由于其中一个按钮被映射到Ctrl+ Zbash暂停evtest

它们可以映射为哈维数据库(7)。创建/etc/udev/hwdb.d/62-xp-pen-deco-mini-7.hwdb包含内容的文件:

evdev:input:b0003v28BDp0928*
 KEYBOARD_KEY_70005=kp0
 KEYBOARD_KEY_70008=kp1
 KEYBOARD_KEY_700e2=kp2
 KEYBOARD_KEY_7002c=f16
 KEYBOARD_KEY_70016=f15
 KEYBOARD_KEY_7001d=f14
 KEYBOARD_KEY_70057=f13
 KEYBOARD_KEY_70056=z

第一行匹配类似于.tabletfile 的设备并且具有 format b{BUS_ID}v{VENDOR_ID}p{MODEL_ID}。对于 USB 来说{BUS_ID}0003.

然后您将扫描代码写入格式的键映射KEYBOARD_KEY_{scancode}={key}。扫描码从evtest输出(行)中获取MSC_SCAN,键名称可以在中找到/usr/include/linux/input-event-codes.h并且必须为小写。在上面的示例中,我将除最后一个按钮之外的所有按钮都映射到通用键,这样我就可以根据每个应用程序将特定操作绑定到它们。

对于 XP-Pen Deco mini 7,默认映射为:

  • 70005 — 乙

  • 70008 — e

  • 700e2 — 左翼

  • 7002c — 空间

  • 700e2, 70016 — 左ctrl, s

  • 700e2、7001d — 左ctrl、z

  • 700e2、70057 — 左ctrl、kpplus

  • 700e2, 70056 — 左ctrl, kpminus

但每个平板电脑型号的这些都不同。

笔记由于我不映射 scancode 700e2,最后四个键将通过Ctrl

手写笔按钮事件是在平板电脑输入本身上生成的:

$ sudo evtest /dev/input/event19
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x28bd product 0x928 version 0x100
Input device name: "UGTABLET 6 inch PenTablet"
...
Event: time 1648041701.178269, -------------- SYN_REPORT ------------
Event: time 1648041701.686282, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0044
Event: time 1648041701.686282, type 1 (EV_KEY), code 331 (BTN_STYLUS), value 1
Event: time 1648041701.786243, -------------- SYN_REPORT ------------
Event: time 1648041701.790243, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0044
Event: time 1648041701.790243, type 1 (EV_KEY), code 331 (BTN_STYLUS), value 0
Event: time 1648041704.130289, -------------- SYN_REPORT ------------
Event: time 1648041704.134281, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045
Event: time 1648041704.134281, type 1 (EV_KEY), code 277 (BTN_FORWARD), value 1
Event: time 1648041704.262281, -------------- SYN_REPORT ------------
Event: time 1648041704.266286, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045
Event: time 1648041704.266286, type 1 (EV_KEY), code 277 (BTN_FORWARD), value 0

默认情况下,下部按钮( scancode d0044)会导致“按下鼠标中键”事件,这非常方便,但上部按钮没有可见的效果。有两种可能的方式来利用它:

  • 映射到任意鼠标按钮并将操作绑定到应用程序中的该按钮
KEYBOARD_KEY_d0045=btn_forward
  • 映射到BTN_TOOL_RUBBER模拟“橡胶”笔尖
KEYBOARD_KEY_d0045=btn_tool_rubber

添加首选变体/etc/udev/hwdb.d/62-xp-pen-deco-mini-7.hwdb,然后编译二进制 hwdb

$ sudo systemd-hwdb update

并将映射应用于设备:

$ sudo udevadm trigger

笔记您可能需要重新插入平板电脑和/或重新启动 DE 应用程序才能使用此映射。

答案2

要处理所有选项,例如绘图区域、左手模式、宽高比、笔的压力等,请遵循MadRunner 的自我回答(段落左手模式)。

.tablet创建配置后,如果您想为该libwacom项目做出贡献(这样那些在您之后到达的人就不必执行此过程),请按照以下说明提出拉取请求:“贡献于libwacom

要更改图形输入板按钮的操作,有一种更简单的方法。您可以使用输入重映射器

答案3

对于任何也尝试这样做的人,在花费 4 小时尝试使其工作后,请尝试使用

evdev:名称:(设备名称):*

代替

evdev:输入:b0003v28BDp0928*

非常感谢你的回答顺便说一句!虽然我还没有弄清楚如何btn_middle用滚动来完成工作。

相关内容