Ни один из ответов здесь не работал для меня, и параметры, которые я хотел установить, не могли быть указаны в xorg.conf
:
$ xsetwacom -x get 'Wacom Intuos PT S Pad pad' button 1
Button: Actions are not supported by xorg.conf. Try shell format (-s) instead.
В итоге мне пришлось запустить скрипт с помощью службы systemd, запускаемой по правилу udev:
$ cat /etc/udev/rules.d/99-wacom.rules
SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="056a", ENV{ID_MODEL_ID}=="0302", TAG+="systemd"
Идентификатор поставщика и модели можно найти работающим lsusb
когда устройство подключено.
Чтобы обновить правила udev:
$ udevadm control --reload-rules
$ udevadm trigger
TAG+="systemd"
Позволяет другим Systemd услуги (системные или пользовательские), зависит от устройства (регистрирует его в качестве блока устройства см man systemd.device
). Чтобы узнать название устройства, запустите udevadm monitor
и подключите планшет. я получил
UDEV [2918.098423] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3 (usb)
...
Чтобы проверить, что systemd собирает его, выполните
$ systemctl status /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/
● sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.3.device - CTH-480 [Intuos Pen & Touch (S)]
Loaded: loaded
Active: active (plugged) since Mon 2016-06-20 11:14:20 UYT; 29min ago
Device: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3
Таким образом, блок устройства есть sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.3.device
, и его можно использовать в сервисном модуле systemd.
$ cat .config/systemd/user/wacom.service
[Service]
Type=forking
Restart=no
ExecStart=/path/to/wacom-pad-button-setup
[Install]
WantedBy=default.target
WantedBy=sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.1.device
WantedBy=sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.2.device
WantedBy=sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.3.device
Для каждого порта USB имеется один блок устройства.
Затем включите и перезагрузите устройство кнопками systemctl --user enable wacom.service
и systemctl --user daemon-reload
.
Сценарию все еще нужно немного поспать, чтобы xsetwacom нашел устройство, а также установил $DISPLAY
и $XAUTHORITY
. Type=oneshot
работает нормально при подключении, но не запускается, если устройство уже подключено при загрузке компьютера. Вот почему мне нужно было использовать пользовательский сервис вместо системного, и поэтому устройство также имеет WantedBy=default.target
. Проблема с oneshot в том, что он блокировал startx. Type=forking
и Restart=no
сообщает systemd не ждать завершения разветвленного сценария, чтобы сценарий мог спать в фоновом режиме, ожидая запуска Xorg.
$ cat bin/wacom-pad-button-setup
#!/bin/rc
{
sleep 2
if (~ $DISPLAY ()) {
DISPLAY=:0
XAUTHORITY=/home/spelufo/.Xauthority
}
xsetwacom set 'Wacom Intuos PT S Pad pad' button 9 'button +3 -3'
xsetwacom set 'Wacom Intuos PT S Pad pad' button 8 'button +4 -4'
xsetwacom set 'Wacom Intuos PT S Pad pad' button 3 'button +1 -1'
xsetwacom set 'Wacom Intuos PT S Pad pad' button 1 'button +2 -2'
} &
55
? Я всегда использую идею, что «бесчисленные записи обрабатываются последними, поэтому лучше пропустить числа для пользовательских записей».