我在 Ubuntu 18.04 下使用 Wacom 绘图板(核心: 4.15.0-72-generic
)。
不幸的是,我无法使用系统设置来配置它,因为它无法被正确识别。
通过配置xsetwacom
可以工作,但不是持久的。只要我重新启动计算机或重新插入设备,就会加载默认设置。
我认为最简单的解决方案是在平板电脑被识别为 USB 设备后立即运行配置脚本。
根据我的理解,实现此目标需要两个步骤:
创建 udev 规则
/etc/udev/rules.d/99-config_wacom_intuos.rules
我创建了一个包含以下内容的文件:# "idVendor" and "idProduct" were derived from the output of the lsusb command. ACTION=="add" \ , SUBSYSTEM=="input" \ , KERNEL=="mouse*" \ , ATTRS{idVendor}=="1234" \ , ATTRS{idProduct}=="5678" \ , RUN+="/bin/sh -c '/usr/local/bin/config_wacom_intuos.sh >> /var/log/custom_logs/config_wacom_intuos.log 2>&1'"
该文件具有以下权限:
-rw-r--r-- 1 root root ...
(这本字典
/var/log/custom_logs
也是我编写的。)创建配置脚本
/usr/local/bin/config_wacom_intuos.sh
我创建了一个包含以下内容的文件:#!/bin/bash #coding:utf8 # These were the missing statements as suggested by the answer. #export DISPLAY=:1 #export XAUTHORITY=/run/user/1000/gdm/Xauthority echo "`date '+%Y-%m-%dT%H:%M:%S'`, ShellPID $$, start" sleep 1 if xsetwacom --list devices | grep -q "Wacom Intuos BT" then main_screen="HEAD-0" bezier_args="0 20 80 100" positioning_mode="Absolute" raw_sample_lvl="9" suppress_lvl="10" # Maps the graphics tablet to the area of a specified screen (for multiple-screen environments). xsetwacom set "Wacom Intuos BT S Pen stylus" MapToOutput "$main_screen" xsetwacom set "Wacom Intuos BT S Pen eraser" MapToOutput "$main_screen" xsetwacom set "Wacom Intuos BT S Pen cursor" MapToOutput "$main_screen" # Changes the pressure sensitivity. xsetwacom set "Wacom Intuos BT S Pen stylus" PressureCurve "$bezier_args" xsetwacom set "Wacom Intuos BT S Pen eraser" PressureCurve "$bezier_args" # Smoothes drawn lines by reducing any quivering. xsetwacom set "Wacom Intuos BT S Pen stylus" RawSample "$raw_sample_lvl" xsetwacom set "Wacom Intuos BT S Pen stylus" Suppress "$suppress_lvl" xsetwacom set "Wacom Intuos BT S Pen eraser" RawSample "$raw_sample_lvl" xsetwacom set "Wacom Intuos BT S Pen eraser" Suppress "$suppress_lvl" xsetwacom set "Wacom Intuos BT S Pen cursor" RawSample "$raw_sample_lvl" xsetwacom set "Wacom Intuos BT S Pen cursor" Suppress "$suppress_lvl" # Specifies the positioning mode ("Absolute" / "Relative") xsetwacom set "Wacom Intuos BT S Pen stylus" Mode "$positioning_mode" xsetwacom set "Wacom Intuos BT S Pen eraser" Mode "$positioning_mode" xsetwacom set "Wacom Intuos BT S Pen cursor" Mode "$positioning_mode" # Assigns actions to the tablet buttons. xsetwacom set "Wacom Intuos BT S Pad pad" Button 1 "key +ctrl z -ctrl" xsetwacom set "Wacom Intuos BT S Pad pad" Button 2 "key +ctrl +shift z -ctrl -shift" xsetwacom set "Wacom Intuos BT S Pad pad" Button 3 "key 0xffab" xsetwacom set "Wacom Intuos BT S Pad pad" Button 8 "key 0xffad" else echo "NO 'WACOM INTUOS BT' DEVICES FOUND." fi echo "`date '+%Y-%m-%dT%H:%M:%S'`, ShellPID $$, end" echo -e "---\n" exit 0
该文件具有以下权限:
-rwxr-xr-x 1 root root ...
当我从终端手动执行该脚本时,它运行良好。
当我插入设备时它也会执行。不幸的是,这似乎没有任何效果。
另外,插入设备后,脚本会连续执行多次。
我猜测这是因为udev规则限制不够。
谁能告诉我我做错了什么?
答案1
X 服务器工具通常只影响您当前的会话(这就是您每次都必须设置它们的原因)。
由于您在未附加到任何 X 会话的 shell 中运行该脚本,因此该工具不知道应该为哪个 X 会话更改这些设置(或更准确地说,它甚至不知道 X 会话是否存在)。
您可以手动将您的 shell 连接到当前的 X 会话,但有时该解决方案可能有点脆弱。
您需要向脚本添加两个变量导出,一个用于DISPLAY
和XAUTHORITY
。它们用于识别和访问正确的 X 会话。您可以env
在以普通用户身份登录时通过运行来获取适当的值。
就我而言,输出如下所示([...]
省略了标记为 的部分):
$ env
[...]
XAUTHORITY=/home/tim/.Xauthority
[...]
DISPLAY=:0.0
[...]
对于这些值,我需要通过以下几行来扩展脚本:
export DISPLAY=:0.0
export XAUTHORITY=/home/tim/.Xauthority
现在,即使您是 root 用户,脚本也应该可以运行。
udev 配置本身看起来不错。