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 ID do fornecedor e do modelo pode ser encontrado em execução lsusb
com o dispositivo conectado.
Para recarregar regras do udev:
$ udevadm control --reload-rules
$ udevadm trigger
O TAG+="systemd"
permite que outros serviços Systemd (sistema ou utilizador) para dependem do dispositivo (registra-lo como um dispositivo de unidade, ver 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, faça
$ 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
Há uma unidade de dispositivo por porta USB.
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 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 eu precisava 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 o oneshot é que ele estava bloqueando o startx. Type=forking
e Restart=no
diz ao systemd para não esperar o processo bifurcado do script sair, para que o script possa dormir em segundo plano, esperando o Xorg iniciar.
$ 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
? Eu sempre uso a idéia de que "inúmeras entradas são processadas por último, por isso é melhor pular números para entradas personalizadas".