图形数位板
- 图形数位板(也称为数字化仪、数字图形数位板、笔式数位板、绘图板、外置绘图板或数字艺术板)是一种计算机输入设备,它使用类似钢笔的触控笔,使用户能够以类似铅笔和纸张的方式手绘图像、动画和图形。
大多数图形数位板都能在 Arch Linux 上即插即用。对于某些额外功能,例如按钮重映射和调整数位板的纵横比,则需要额外的配置。本文档介绍了如何使用 xf86-input-wacom 驱动程序在 Xorg 下配置您的数位板。有关在 Wayland 下或使用默认的 xf86-input-libinput 驱动程序时的配置,请参阅 #Wayland and libinput。
内核支持
Arch Linux 内核包含来自 linux-wacom 和 DIGImend 项目的驱动程序。linux-wacom 支持 Wacom 设备,而 DIGImend 支持其他制造商的设备。这两个项目都发布了支持设备列表:linux-wacom,DIGImend。通过 USB 或 蓝牙连接您的数位板后,当以 root 权限运行 dmesg 时,它应该会显示出来,并在 /proc/bus/input/devices 中列出。对于 USB 设备,来自 usbutils 的 lsusb 命令也应该显示您的数位板。如果您的数位板未显示,或者某些功能无法正常工作,请参见 #内核未识别设备。
替代驱动
- Tuhi — 一个应用程序,可以从 Wacom 的智能数位板系列设备(如 Bamboo Spark 和 Bamboo Slate)下载绘图。
- Huion Linux Driver — 辉影(Huion)官方专有 Linux 驱动。
- XP-Pen Linux Driver — 汉王(XP-Pen)官方专有 Linux 驱动。某些 友基(UGEE)设备也可能得到支持。
- OpenTabletDriver — 一个跨平台的、支持多种不同数位板型号的用户空间驱动程序。
- wacom_serial5 — 一个适用于旧款 Wacom 串口数位板的内核驱动。有关连接串口设备的信息,请参阅 Serial input device to kernel input。
- Weylus — 一个可以将智能手机或平板电脑用作计算机图形数位板的项目。
安装
安装 xf86-input-wacom Xorg 驱动程序。对于 Wacom 设备,无需额外配置,因为包含的 /usr/share/X11/xorg.conf.d/70-wacom.conf 文件将在插入 Wacom 设备时自动加载 wacom(4) 驱动程序。如果您的设备来自其他制造商,您需要手动 配置 Xorg 以使用 wacom 驱动程序,这将允许通过 xsetwacom 进行配置。 创建一个文件在 /etc/X11/xorg.conf.d 目录下,其中 VID:PID 是您通过 lsusb 查看到的 USB ID。
/etc/X11/xorg.conf.d/10-tablet.conf
Section "InputClass"
Identifier "Tablet"
Driver "wacom"
MatchDevicePath "/dev/input/event*"
MatchUSBID "VID:PID"
EndSection
重启 X 后,`xsetwacom list devices` 命令现在应该会列出一些设备。如果未列出,请参阅 #Manual setup。
工具
- Wacom Tablet KCM — 一个 KDE 配置模块,允许重映射按钮并将数位板映射到显示器。它还支持数位板特定配置文件和热插拔。它在 Wayland 上无法正常工作,因为它需要 `wacom` Xorg 驱动程序。
- mapwacom — 一个脚本,使用 #Reducing the drawing area height 方法自动将数位板映射到显示器,同时保持纵横比。
- wacom2monitor — 一个脚本,使用 #Mapping the tablet to a monitor 方法将所有 Wacom 设备映射到显示器,并允许在可用输出之间循环。它旨在通过 Xbindkeys 或 sxhkd 激活。
配置
Xorg 驱动程序可以通过 `xsetwacom` 进行临时配置,请参阅 xsetwacom(1)。X 服务器重启或重新插入数位板后,更改将丢失,请参阅 #Permanent configuration 查看保留设置持久化的方法。
列出可用设备
$ xsetwacom list devices
Wacom Bamboo 16FG 4x5 Finger touch id: 12 type: TOUCH Wacom Bamboo 16FG 4x5 Finger pad id: 13 type: PAD Wacom Bamboo 16FG 4x5 Pen stylus id: 17 type: STYLUS Wacom Bamboo 16FG 4x5 Pen eraser id: 18 type: ERASER
对于 `get` 和 `set` 命令,设备可以通过名称或 ID 指定。脚本应使用名称,因为 ID 在 X 服务器重启或重新插入后可能会更改。
重映射按钮
Xorg 将数位板和触控笔上的按钮视为鼠标按钮。数位板按钮从 1 开始,触控笔按钮从 2 开始(1 是笔尖接触事件)。由于大多数应用程序不允许将快捷键映射到鼠标按钮,用户可能对将这些按钮重映射到键盘按钮感兴趣。
如果您尚未重映射按钮,可以使用 xorg-xev 轻松识别它们的编号。通过运行以下命令,将鼠标光标放在创建的窗口上并按下按钮。
$ xev -event button
Outer window is 0x1a00001, inner window is 0x1a00002
ButtonPress event, serial 25, synthetic NO, window 0x1a00001,
root 0x2a0, subw 0x0, time 3390669, (404,422), root:(1047,444),
state 0x0, button 8, same_screen YES
识别按钮后,您可以使用 `xsetwacom` 进行重映射。通用的映射语法如下:
$ xsetwacom set pad-or-stylus Button number keyword arguments
关键字和参数的完整列表可在 xsetwacom(1) § Button 中找到。以下是一些示例:
- 键名前的加号 (+) 表示按下,而减号 (-) 表示释放。没有符号的键会按下然后释放。
- 您可以使用 `xsetwacom list modifiers` 查看修饰键的完整列表。
- `key` 和 `button` 等关键字可以混合使用。
将按钮重映射到 `Ctrl+z`
$ xsetwacom set pad Button 1 "key +ctrl z -ctrl"
将按钮重映射到鼠标按钮 3
$ xsetwacom set pad Button 1 "button 3"
在按住 `Shift` 的同时按下鼠标按钮 1
$ xsetwacom set pad Button 1 "key +shift button 1 key -shift"
清除按钮的所有自定义映射
$ xsetwacom set pad Button 1
执行自定义命令
虽然不能直接使用 `xsetwacom` 将数位板按钮映射到自定义命令,但可以将它们映射到一个组合键,该组合键可以激活自定义按键绑定实用程序,如 Xbindkeys、sxhkd,或您窗口管理器或桌面环境的键盘快捷键配置系统。
可以将数位板按钮重映射到硬件上不存在的功能键或鼠标按钮,例如 F20 或鼠标按钮 10。这样,您可以设置仅通过数位板按钮执行的自定义命令。
调整纵横比
数位板的绘图区域通常比标准的 16:9 宽屏显示器更接近方形,这会导致输入时轻微的垂直压缩。要解决这种纵横比不匹配的问题,您需要做出妥协,要么减小绘图区域的高度(在 Windows 上称为“强制比例”),要么减小屏幕区域的宽度。前者浪费了绘图区域,后者则阻止您的触控笔到达屏幕的右边缘。这可能仍然是一项值得做出的妥协,因为它防止您的笔触变形。
通过运行以下命令了解数位板的分辨率:
$ xsetwacom get stylus Area
减小绘图区域高度
运行
$ xsetwacom set stylus Area 0 0 tablet_width height
其中 `height` 是 `tablet_width * screen_height / screen_width`。
可以使用以下命令将数位板分辨率重置回默认值:
$ xsetwacom set stylus ResetArea
减小屏幕区域宽度
运行
$ xsetwacom set stylus MapToOutput WIDTHxSCREEN_HEIGHT+0+0
其中 `WIDTH` 是 `screen_height * tablet_width / tablet_height`。
将数位板映射到显示器
如果您有多个显示器,将数位板映射到单个显示器以避免绘图时出现失真会很有用。这也可用于带有屏幕的图形数位板,以便将数位板的活动区域映射到其自身的屏幕。
您可以使用以下命令将数位板映射到显示器,其中 `output` 是 `xrandr` 报告的显示器标识符:
$ xsetwacom set stylus MapToOutput output
例如:
$ xsetwacom set 'Wacom Intuos S Pen stylus' MapToOutput VGA-0
如果这在使用 Nvidia 二进制驱动程序时不起作用,请尝试使用 `HEAD-0`、`HEAD-1`... 来对应显示器编号。
或者,您可以使用 `next` 参数切换到下一个可用显示器。
例如:
$ xsetwacom set 'Wacom Intuos S Pen stylus' MapToOutput next
如果 `xsetwacom` 无法找到您的输出,您可以使用 #Reducing the screen area width 中的命令手动将数位板映射到与您的显示器匹配的区域。运行:
$ xsetwacom set stylus MapToOutput SCREEN_WIDTHxSCREEN_HEIGHT+HORIZONTAL_OFFSET+VERTICAL_OFFSET
其中 `SCREEN_WIDTH` 和 `SCREEN_HEIGHT` 是您显示器的像素宽度和高度,而 `HORIZONTAL_OFFSET` 和 `VERTICAL_OFFSET` 是您所需显示器的坐标,从设置中最左边和最高像素开始。例如,如果您有两个并排的 1920x1080 显示器,并且您想将数位板映射到最右边的显示器,您将运行:
$ xsetwacom set stylus MapToOutput 1920x1080+1920+0
如果 `xsetwacom` 不起作用,您可以尝试 `xinput`。首先,您需要找到您的触控笔 ID:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Wacom Intuos PT S 2 Finger id=11 [slave pointer (2)]
⎜ ↳ Wacom Intuos PT S 2 Pad id=12 [slave pointer (2)]
⎜ ↳ USB Keyboard id=14 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=16 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=17 [slave pointer (2)]
⎜ ↳ SteelSeries Kinzu V2 Gaming Mouse id=9 [slave pointer (2)]
⎜ ↳ Wacom Intuos PT S 2 Pen Pen (0x6281780c) id=20 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ ...
在这种情况下,触控笔 ID 是 `20`。要将其映射到显示器 `VGA-0`,请运行:
$ xinput map-to-output 20 VGA-0
如果以上所有方法都失败了,您将不得不调整数位板的坐标变换矩阵。计算数位板矩阵的说明可在 xf86-input-wacom wiki 中找到。
压力曲线
使用 Wacom Pressure Curve and Threshold Graph 找到您所需曲线的 P1=红色(例如 50,0)和 P2=紫色(例如 100,80)。X 轴是您施加到笔上的输入压力;Y 轴是应用程序接收到的输出压力。
您可以使用以下命令更改压力曲线:
$ xsetwacom set stylus PressureCurve x1 y1 x2 y2
永久配置
通过 udev 和 systemd 服务使用 xsetwacom
可以将 `xsetwacom` 参数保存在一个 shell 脚本中,该脚本通过 `udev` 使用自定义 systemd/User 单元文件 自动启动。这种方法比通过桌面环境或窗口管理器自动启动 shell 脚本更复杂,但它会在每次数位板连接到计算机时运行脚本。
首先安装 usbutils 并运行 `lsusb` 以查找数位板的供应商 ID(下例中为 `056a`)。
然后创建一个 `udev` 规则,在连接数位板时启动一个 systemd 单元(相应地替换供应商 ID):
/etc/udev/rules.d/99-wacom.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="056a", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}+="wacom.service"
准备 systemd 单元文件。它连接到特殊的 `graphical-session.target`,该目标在任何图形会话激活时都应该处于活动状态,请参阅 systemd.special(7) § Special Passive User Units。
~/.config/systemd/user/wacom.service
[Unit] Description=Configure my Wacom tablet After=graphical-session.target PartOf=graphical-session.target [Service] Type=oneshot ExecStart=/path/to/wacom-config.sh [Install] WantedBy=graphical-session.target
准备数位板配置脚本。当从 systemd 用户服务启动时,所需的 `DISPLAY` 和 `XAUTHORITY` 变量应该已经设置好。有关详细信息,请参阅 systemd/User#DISPLAY and XAUTHORITY。
wacom-config.sh
#!/bin/sh
for i in $(seq 10); do
if xsetwacom list devices | grep -q Wacom; then
break
fi
sleep 1
done
list=$(xsetwacom list devices)
pad=$(echo "${list}" | awk '/pad/{print $7}')
stylus=$(echo "${list}" | xsetwacom list devices | awk '/stylus/{print $7}')
if [ -z "${pad}" ]; then
exit 0
fi
# configure the buttons on ${stylus} with your xsetwacom commands...
#xsetwacom set "${stylus}" Button 2 11
#...
最后,使用 `--user` 标志 启动/启用服务 `wacom.service`。
与 Xfce4 显示配置文件的兼容性
如果您有带集成显示器的数位板,并且希望在 Xfce4 中无缝切换多个显示配置文件,仅仅监听 udev 事件可能不够。您需要在每次更改显示器几何形状时(例如,镜像 vs. 并排设置)更改设备设置。
在这种情况下,您可以使用 `xfconf-query` 来监控活动显示配置文件的更改。
wacom-config-daemon.sh
#!/usr/bin/env sh
# Use this to target your specific monitor device
screen_dev="HDMI-A-0"
xfconf-query -c displays -p /ActiveProfile -m | while IFS= read -r; do
echo "Reconfiguring..."
# Tested with Wacom Cintiq 16 Pen (stylus/eraser)
for id in $(xsetwacom list devices | grep -i wacom | awk '/Pen/{print $7}'); do
xsetwacom set "${id}" MapToOutput "${screen_dev}"
done
done
现在,将此脚本添加到您的自动启动应用程序中:`Settings > Session and Startup > Application Autostart`。
通过 Xorg.conf
可以在 xorg.conf 和 xorg.conf(5) 中使配置持久化。
您首先需要在 Xorg 日志文件中找出您的产品名称:
$ grep "Using input driver 'wacom'" ~/.local/share/xorg/Xorg.0.log
[ 25059.351] (II) Using input driver 'wacom' for 'Wacom Intuos BT M Pen' [ 25059.409] (II) Using input driver 'wacom' for 'Wacom Intuos BT M Pad' [ 25059.428] (II) Using input driver 'wacom' for 'Wacom Intuos BT M Pen eraser' [ 25059.429] (II) Using input driver 'wacom' for 'Wacom Intuos BT M Pen cursor'
对于这些产品名称,相应的节将是:
/etc/X11/xorg.conf.d/72-wacom-options.conf
Section "InputClass" Identifier "WACOM OPTIONS pen" MatchDriver "wacom" MatchProduct "Pen" NoMatchProduct "eraser" NoMatchProduct "cursor" EndSection Section "InputClass" Identifier "WACOM OPTIONS pad" MatchDriver "wacom" MatchProduct "Pad" EndSection Section "InputClass" Identifier "WACOM OPTIONS eraser" MatchDriver "wacom" MatchProduct "eraser" EndSection Section "InputClass" Identifier "WACOM OPTIONS cursor" MatchDriver "wacom" MatchProduct "cursor" EndSection
- 可以在节中添加 wacom(4) 中描述的选项。
- 为了使节匹配,产品名称需要包含 `MatchProduct` 值。匹配父设备需要负匹配。
- `Identifier` 可以是任意的,并在节匹配时打印到 Xorg 日志中。给您的标识符一个共同的前缀可以方便您使用 grep 来查找哪些节已被匹配。
grep "WACOM OPT" /var/log/Xorg.0.log
- 配置更改需要 X 服务器重新启动才能生效。
`xsetwacom` 可以尝试使用以下命令以 `xorg.conf` 格式打印设备的当前所有设置:
$ xsetwacom get device all
按钮重映射
通过 Xorg.conf 的按钮重映射仅允许您将数位板按钮重映射到鼠标按钮。
/etc/X11/xorg.conf.d/10-tablet.conf
Section "InputClass"
[...]
# Setting up buttons (preferably choose the correct button order, so the topmost key is mapped to 10 and so on)
Option "Button1" "10"
Option "Button2" "11"
Option "Button3" "12"
Option "Button4" "13"
EndSection
然后,您可以使用 #Execute custom commands 将这些按钮映射到其他命令,或使用 自动化工具映射到其他按键。
$ grep -rl 'Wacom Bamboo 16FG 4x5' /usr/share/libwacom/*.tablet
/usr/share/libwacom/bamboo-16fg-s-t.tablet在这种情况下,对应的布局 SVG 是 `/usr/share/libwacom/layouts/bamboo-16fg-s-t.svg`。SVG 中的字母对应按钮编号:A=1, B=2, C=3, ...
让 libinput 控制触摸板
由于 Wacom 触摸板通常不支持反向滚动,因此使用 libinput 来控制触摸板可能是可取的。
为此,请创建 `/etc/X11/xorg.conf.d/90-libinput-wacom.conf` 并包含以下内容:
Section "InputClass"
Identifier "libinput Wacom touchpad override class"
MatchUSBID "056a:*"
MatchDevicePath "/dev/input/event*"
MatchIsTouchpad "true"
Driver "libinput"
EndSection
之后重启。
有关更详细的说明,请参阅 [3]。
LED 灯
请参阅 sysfs-driver-wacom 文档。为了在不要求 root 权限的情况下进行更改,您可能需要创建一个 `udev` 规则,如下所示:
/etc/udev/rules.d/99-wacom.rules
# Give the users group permissions to set Wacom device LEDs. ACTION=="add", SUBSYSTEM=="hid", DRIVERS=="wacom", RUN+="/usr/bin/sh -c 'chown :users /sys/%p/wacom_led/*'"
可以通过 i4oledAUR 设置 Intuos OLED 灯。
应用程序特定配置
Alchemy
AlchemyAUR(和 Alchemy-gitAUR)需要 JPen 库来管理触控笔压力。有关 Alchemy 的 Digimend 文档,请参阅 Digimend documentation about Alchemy。
Blender
要在 Blender 中启用触摸板按钮和额外的笔按钮,您可以创建一个 xsetwacom 包装器,临时为您的 Blender 会话重映射按钮。
DrawPile
drawpileAUR 是一个绘图白板(网络协作绘图工具)。它管理其绘图工具的压力级别。在“Freehand”框中,每个参数右侧的画笔图标需要被激活才能对此参数进行压力管理。窗口右下角(“Input”框)只有一个通用曲线,可以应用于触控笔、距离和速度。
GIMP
为了在 GIMP 中正确使用和进行压力敏感绘画,只需转到 _Edit > Input Devices_。现在,对于您的 _eraser_、_stylus_ 和 _cursor_ _设备_中的每一个,将 _mode_ 设置为 _Screen_,并记住保存。
- 请注意,如果存在,_pad_ _设备_应保持禁用状态,因为我不认为 GIMP 支持此类功能。或者,要使用数位板的这些功能,您应该使用像 Wacom ExpressKeys 这样的程序将它们映射到键盘命令。
- 您还应该注意,为 _stylus_ 选择的工具独立于 _eraser_。这实际上可能很有用,因为您可以将 _eraser_ 设置为任何您喜欢的工具。
有关更多信息,请查看 GIMP Talk - Community - Install Guide: Getting Wacom Drawing Tablets To Work In Gimp 中 _Setting up GIMP_ 的部分。
如果以上方法不够,您可能需要尝试将数位板的触控笔(和橡皮擦)设置为第二个鼠标指针(与其鼠标分离),方法是使用 `xinput create-master` 和 `xinput reattach` 命令。当 GIMP 即使触控笔触碰到数位板但未开始绘画时,这会有所帮助。
Inkscape
在 Inkscape 中的压力敏感性启用方式与 GIMP 相同。转到 _Edit > Input Devices..._。现在,对于您的 _eraser_、_stylus_ 和 _cursor_ _设备_中的每一个,将 _mode_ 设置为 _Screen_,并记住保存。
Krita
如果您的数位板在 Krita 中无法绘图(未注册点击/压力),但在具有小测试区域的画笔选择对话框中工作,请尝试将 Krita 置于全屏或仅画布模式。
Krita 正常工作只需要 Qt 能够使用您的数位板。如果您的数位板在 Krita 中不起作用,请确保它首先在 Qt 中工作。然后可以在 painttop 配置中调整数位板压力的影响,例如通过选择不透明度,然后从下拉列表中选择压力并调整曲线到您的偏好。
MyPaint
mypaint(额外的 mypaint-brushes,mypaint-brushes1;请注意,这些画笔也用于使用 libmypaint 的其他应用程序)是一个通用的位图绘图应用程序。其高级画笔设置已被 GIMP、Krita、OpenToonz 和其他一些应用程序采用,并且正在 Pencil2D 中进行集成。它是一个非常轻量级的工具,可以在低端计算机上使用。
在 MyPaint 中,有关于数位板的通用设置和每个画笔的特定参数(您可以设置自己的画笔)。
通用设置在菜单 _Edit > Edit Preferences_ 中。
- “Pressure”选项卡用于全局压力映射。
- “Devices”选项卡显示检测到的输入设备列表,并提供一些通用信息。通过点击“Use for...” (Any Task, Ignore, Non-painting tasks, Navigation only)和“Scroll...” (zoom, pan)列中的参数,可以为每个设备分配特定的任务。
- “Buttons”选项卡允许将按钮分配给特定功能。
可以通过画笔上下文菜单(右键单击工具)访问画笔设置。您可以复制现有工具后再进行修改,从而保留具有默认预设的工具(上下文菜单中的“clone”)。
- 要编辑画笔设置,只需从画笔的上下文菜单中使用 _Edit Brush_ 设置。有几个设置,请参阅 MyPaint 文档以获取完整描述,或自己尝试发现它们的功能。
OpenToonz
opentoonz 是一个专业的 2D 动画工具,最初由吉卜力工作室开发,并被吉卜力、Folimage 等公司使用。
默认工具上默认管理着触控笔压力。在第二行、右上方有一个复选框 _Pressure_,可以取消选中以禁用压力管理。可以通过右侧的菜单按钮选择多个预设,并使用 +/- 按钮添加或删除。
可以在 _Basics_ 模式(左上角标签)中选择 libmypaint 画笔,然后在绘图区域和曝光表之间的列中:在 "[LEVEL]: Palette" 按钮处,点击 "Raster" 选项卡以查看画笔。这些画笔可以在 MyPaint 中编辑并在 OpenToonz 中使用。
Pencil2D
pencil2d 是一个轻量级的 2D 动画工具。可以使用压力参数的每个工具(Pencil, Eraser, Pen 和 Brush)都有一个名为 "Pressure" 的复选框,默认情况下已选中以使用触控笔压力参数。
Xournal++
Xournal++ (xournalpp) 是 xournalAUR 的继任者,并完全支持压感笔输入。有关配置,请参阅“编辑 > 首选项”菜单中的“输入设备”和“触控笔”。
Wayland 和 libinput
当您使用 Wayland 时,图形平板由 libinput 处理,后者依赖于 libwacom 提供的信息。在这种情况下,无法通过 xsetwacom 进行配置。您只能通过 桌面环境 或 Wayland 合成器 中提供的设置来配置您的平板。请参阅 [4] 检查您的设备是否受完全支持,以及为您的设备添加支持的方法。
| 环境或合成器 | 将平板映射到显示器 | 将平板映射到区域 | 配置平板按钮 | 文档 |
|---|---|---|---|---|
| GNOME | 是 | 是 | 是 | [5] |
| KDE Plasma | 是 | 是 | 是 | |
| Sway | 是 | 是 | 否 | sway-input(5) § 映射配置 |
| Hyprland | 是 | 是 | 否 | [6] |
| River | 是 | 否 | 否 | riverctl(1) § 输入配置 |
| Niri | 是 | 否 | 否 | [7] |
- input-remapper-gitAUR 在使用 libinput 或 Wayland 时可以重新映射平板按钮。
- 如果您的 Wayland 环境未提供平板选项,也可以使用 OpenTabletDriver。请参阅 #替代驱动程序。
Sway
映射到输出
这与 #将平板映射到显示器 的效果相同,意味着平板将不会与输出有精确的宽高比匹配。
将以下行添加到您的 sway 配置文件中
~/.config/sway/config
input Identifier map_to_output Display-Name
其中 Identifier 是您的平板的标识符,可通过 swaymsg -t get_inputs 读取
$ swaymsg -t get_inputs
Input device: Wacom One by Wacom S Pen Type: Tablet tool Identifier: 1386:890:Wacom_One_by_Wacom_S_Pen Product ID: 890 Vendor ID: 1386 Libinput Send Events: enabled ...
type:tablet_pad 和 type:tablet_tool 代替设备标识符。Display-Name 是您的输出标识符,可通过 swaymsg -t get_outputs 读取
$ swaymsg -t get_outputs
Output HDMI-A-1 'Samsung Electric Company ...' Current mode: 1920x1080 @ 60.000 Hz Position: 0,0 Scale factor: 1.000000 Scale filter: nearest ...
映射到输出区域
这与 #减小屏幕区域宽度 的效果相同。首先,您需要确定平板的活动区域。运行
# libinput debug-tablet
将您的平板触控笔移动到右下角,以获得最大的 ABS_X 和 ABS_Y 值,然后将以下行添加到您的 sway 配置中
~/.config/sway/config
input Identifier map_to_region X Y width output_height
其中 width 由 output_height * (ABS_X / ABS_Y) 计算得出,X 和 Y 是区域的起始坐标。
例如,如果您有两个并排的 1920x1080 显示器,并且您想将平板映射到最右侧显示器的一个区域,请使用以下行
~/.config/sway/config
input Identifier map_to_region 1920 0 width 1080
故障排除
设备未被内核识别
某些平板可能过于新,以至于当前内核不支持。在 Wacom 设备上,这会在您的 dmesg 输出中显示为“Unknown device_type”消息。在这种情况下,未合并到内核中的第三方驱动程序版本可能已经支持您的平板。
安装 input-wacom-dkms-gitAUR(如果您有 Wacom 平板),或者 digimend-kernel-drivers-dkms-gitAUR(如果您有其他制造商的平板)。您还需要当前内核的头文件,有关更多信息,请参阅 DKMS。
平板已识别但 xsetwacom 和类似工具未显示它
您的日志表明已选择正确的驱动程序,并且平板可以工作。但是,当运行 xsetwacom list devices 或使用依赖于正确驱动程序的类似工具时,您会得到一个空列表。
一个可能的原因是您的 xorg 配置执行顺序。/usr/share/X11/xorg.conf.d 会先执行,然后是 /etc/X11/xorg.conf.d。软件包 xf86-input-wacom 包含文件 /usr/share/X11/xorg.conf.d/70-wacom.conf。如果之后执行了一个捕获所有设备的规则,并且该规则在 wacom 驱动程序被之前选择后执行,那么之前选择的 wacom 驱动程序将被一个通用的驱动程序覆盖,而该通用驱动程序无法与 xsetwacom 等工具一起使用。
为确保无误,请检查在 /usr/share/X11/xorg.conf.d/70-wacom.conf 之后执行的文件中的规则,查找任何看起来像图形平板的设置。
手动设置
手动配置在 /etc/X11/xorg.conf 或 /etc/X11/xorg.conf.d/ 目录中的单独文件中完成。Wacom 平板设备通过内核驱动程序提供的 /dev/input/ 中的输入事件接口进行访问。接口编号 event?? 在拔出并插入同一或尤其是不同 USB 端口时很可能会改变。因此,最好不要使用具体的 event?? 接口(静态 配置)来引用设备,而是让 udev 动态创建到正确 event 文件的符号链接(动态 配置)。
USB 设备
在(重新)插入您的 USB 平板后(或者至少在重新启动后),/dev/input 中应该会出现一些指向您的平板设备的符号链接。
$ ls /dev/input/wacom*
/dev/input/wacom /dev/input/wacom-stylus /dev/input/wacom-touch
如果没有,您的设备很可能尚未包含在 wacom-udev 的 udev 配置中,该配置位于 /usr/lib/udev/rules.d/wacom.rules。将该文件复制到 /etc/udev/rules.d/wacom.rules 并在那里进行修改。
通过复制另一个设备的某一行并调整 idVendor、idProduct 和符号链接名称来添加您的设备。可以使用以下命令确定这两个 id:
$ lsusb | grep -i wacom
Bus 002 Device 007: ID 056a:0062 Wacom Co., Ltd
在此示例中,idVendor 是 056a,idProduct 是 0062。如果您有带触摸功能的设备(例如 Bamboo Pen&Touch),您可能需要为触摸输入接口添加第二行。有关详细信息,请参阅 linuxwacom wiki 通过 udev 固定设备文件。
保存文件并使用命令 udevadm control --reload-rules 重新加载 udev 的配置配置文件。再次检查 /dev/input 的内容,以确保 wacom 符号链接已出现。请注意,您可能需要重新插入平板才能使设备出现。
对 Xorg 配置进一步感兴趣的文件是 /dev/input/wacom,对于触摸设备,还有 /dev/input/wacom_touch。
静态设置
通常建议依赖 Xorg 的自动检测或使用动态设置。但是,对于内置平板设备,如果自动检测不起作用,可以考虑静态 Xorg 设置。静态 Xorg 设置通常无法识别连接到不同 USB 端口的 Wacom 平板,甚至在将其拔出并重新插入同一端口后也无法识别,因此应视为已弃用。
如果您坚持使用静态设置,只需在下一节的 Xorg 配置中引用您的平板,并使用正确的 /dev/input/event?? 文件,这些文件可以通过查看 /proc/bus/input/devices 来找到。
Xorg配置
无论是动态还是静态设置,您现在都在 /dev/input/ 中获得了一个或两个指向平板正确输入事件设备的文件。剩下的就是将相关信息添加到 /etc/X11/xorg.conf 或 /etc/X11/xorg.conf.d/ 下的专用文件中。确切的配置当然取决于您的平板的功能。xsetwacom list devices 可能会提供关于您的平板需要哪些 InputDevice 部分的有用信息。
Volito2 的示例配置可能如下所示
Section "InputDevice"
Driver "wacom"
Identifier "stylus"
Option "Device" "/dev/input/wacom" # or the corresponding event?? for a static setup
Option "Type" "stylus"
Option "USB" "on" # USB ONLY
Option "Mode" "Relative" # other option: "Absolute"
Option "Vendor" "WACOM"
Option "tilt" "on" # add this if your tablet supports tilt
Option "Threshold" "5" # the official linuxwacom howto advises this line
EndSection
Section "InputDevice"
Driver "wacom"
Identifier "eraser"
Option "Device" "/dev/input/wacom" # or the corresponding event?? for a static setup
Option "Type" "eraser"
Option "USB" "on" # USB ONLY
Option "Mode" "Relative" # other option: "Absolute"
Option "Vendor" "WACOM"
Option "tilt" "on" # add this if your tablet supports tilt
Option "Threshold" "5" # the official linuxwacom howto advises this line
EndSection
Section "InputDevice"
Driver "wacom"
Identifier "cursor"
Option "Device" "/dev/input/wacom" # or the corresponding event?? for a static setup
Option "Type" "cursor"
Option "USB" "on" # USB ONLY
Option "Mode" "Relative" # other option: "Absolute"
Option "Vendor" "WACOM"
EndSection
请确保您也更改了鼠标的路径("Device"),因为它现在将是 /dev/input/mouse_udev。
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mouse_udev"
Option "SendCoreEvents" "true"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
Option "Buttons" "5"
EndSection
将此添加到 ServerLayout 部分
InputDevice "cursor" "SendCoreEvents" InputDevice "stylus" "SendCoreEvents" InputDevice "eraser" "SendCoreEvents"
最后,请务必更新 ServerLayout 部分中的鼠标标识符 - 因为我的从
InputDevice "Mouse0" "CorePointer"
更改为
InputDevice "Mouse1" "CorePointer"
由于接近传感器导致鼠标移动异常
您可以禁用由于接近传感器检测到不存在的触控笔而导致的鼠标跳转。您可以使用 xinput --list 找到您的设备,在找到触控笔后,使用以下命令禁用它:
$ xinput disable device
这仅在您当前未使用触控笔时有效。
图形平板上的触摸仲裁不起作用
如果您使用的是 libinput,具有触控笔和触摸屏的图形平板可能默认不支持 触摸仲裁,因为这些设备未被分组到同一个 libinput 设备组中。您可以通过编写 udev 规则来修复此问题。例如,如果触摸屏被识别为 0001:000a,而 Wacom 平板被识别为 0002:000b,您可以创建一个 /etc/udev/rules.d/80-touch-arbitration.rules 文件作为一条规则,将这些设备分组到组 f865e87b 中。
/etc/udev/rules.d/80-touch-arbitration.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0001", ATTRS{idProduct}=="000a", ENV{LIBINPUT_DEVICE_GROUP}="f865e87b"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0002", ATTRS{idProduct}=="000b", ENV{LIBINPUT_DEVICE_GROUP}="f865e87b"
报告非 Wacom 平板的问题
如果您有一个非 Wacom 平板且缺少功能,您可以 向 DIGImend 驱动程序作者报告平板测试,以将其功能集成到驱动程序中。DIGImend 诊断工具在 AUR 上作为 uclogic-toolsAUR 提供。您还需要 usbutils 中提供的 lsusb 和 usbhid-dump 程序。