Ninguna de las respuestas aquí funcionó para mí, y las opciones que quería establecer no podían especificarse en 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.
Terminé teniendo que iniciar el script con un servicio systemd activado por una regla udev:
$ cat /etc/udev/rules.d/99-wacom.rules
SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="056a", ENV{ID_MODEL_ID}=="0302", TAG+="systemd"
El proveedor y la identificación del modelo se pueden encontrar ejecutándose lsusb
con el dispositivo enchufado.
Para recargar las reglas de udev:
$ udevadm control --reload-rules
$ udevadm trigger
Esto TAG+="systemd"
permite que otros servicios systemd (sistema o usuario) dependan del dispositivo (lo registra como una unidad de dispositivo, ver man systemd.device
). Para encontrar el nombre de la unidad del dispositivo, ejecute udevadm monitor
y conecte la tableta. yo obtengo
UDEV [2918.098423] add /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3 (usb)
...
Para comprobar que systemd lo está recogiendo, haga
$ 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
Por lo tanto, la unidad del dispositivo es sys-devices-pci0000:00-0000:00:1d.0-usb2-2\x2d1-2\x2d1.3.device
, y se puede usar en la unidad de servicio 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
Hay una unidad de dispositivo por puerto usb.
Luego habilite y vuelva a cargar la unidad con systemctl --user enable wacom.service
y systemctl --user daemon-reload
.
El script aún necesita dormir un poco para que xsetwacom encuentre el dispositivo y configure $DISPLAY
y $XAUTHORITY
. Type=oneshot
funciona bien al enchufarlo, pero no lo ejecuta si el dispositivo ya estaba enchufado al arrancar la computadora. Es por eso que necesitaba usar un servicio de usuario en lugar de uno de sistema, y por qué la unidad también lo ha hecho WantedBy=default.target
. El problema con oneshot es que estaba bloqueando startx. Type=forking
y Restart=no
le dice a systemd que no espere a que salga el proceso bifurcado del script, para que el script pueda dormir en segundo plano esperando que Xorg comience.
$ 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
? Siempre uso la idea de que "las entradas innumerables se procesan en último lugar, por lo que es mejor omitir números para entradas personalizadas".