Nenhuma das respostas aqui funcionou para mim e as opções que eu queria definir não puderam ser especificadas em 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.
Acabei tendo que iniciar o script com um serviço systemd acionado por uma regra do udev:
$ cat /etc/udev/rules.d/99-wacom.rules
SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="056a", ENV{ID_MODEL_ID}=="0302", TAG+="systemd"
O fornecedor e o ID do modelo podem ser encontrados executando lsusb
com o dispositivo conectado.
Para recarregar as regras do udev:
$ udevadm control --reload-rules
$ udevadm trigger
O TAG+="systemd"
permite que outros serviços systemd (sistema ou usuário) dependam do dispositivo (registra-o como uma unidade de dispositivo, consulte man systemd.device
). Para encontrar o nome da unidade do dispositivo, execute udevadm monitor
e conecte o tablet. Eu recebo
UDEV [2918.098423] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3 (usb)
...
Para verificar se o systemd está pegando,
$ 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
Portanto, a unidade do dispositivo é sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.3.device
e pode ser usada na unidade de serviço do 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
Existe uma unidade de dispositivo por porta usb.
Em seguida, ative e recarregue a unidade com systemctl --user enable wacom.service
e systemctl --user daemon-reload
.
O script ainda precisa dormir um pouco para o xsetwacom para encontrar o dispositivo e definir $DISPLAY
e $XAUTHORITY
. Type=oneshot
funciona bem ao conectá-lo, mas não o executa se o dispositivo já estiver conectado ao inicializar o computador. É por isso que precisei usar um serviço de usuário em vez de um sistema e por que a unidade também possui WantedBy=default.target
. O problema com oneshot é que ele estava bloqueando o startx. Type=forking
e Restart=no
informam ao systemd para não esperar que o processo bifurcado do script seja encerrado, para que o script possa, então, dormir em segundo plano esperando que o Xorg seja iniciado.
$ 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'
} &