You are not logged in.
I have a systemd unit to debug touch events:
$ cat /usr/lib/systemd/system/touchscreen-log.service
[Unit]
Description = Log touch screen events
[Service]
ExecStart = /usr/bin/evtest /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00
[Install]
WantedBy = multi-user.target
However, the autostart does not work, since the touch device is not yet available when the unit starts:
$ journalctl -au touchscreen-log.service --follow
Okt 26 12:14:14 1545 systemd[1]: Started Log touch screen events.
Okt 26 12:14:14 1545 evtest[311]: evtest: No such file or directory
Okt 26 12:14:14 1545 systemd[1]: touchscreen-log.service: Main process exited, code=exited, status=1/FAILURE
Okt 26 12:14:14 1545 systemd[1]: touchscreen-log.service: Failed with result 'exit-code'.
When I start it manually, all is fine:
$ systemctl start touchscreen-log.service
$ systemctl status touchscreen-log.service
● touchscreen-log.service - Log touch screen events
Loaded: loaded (/usr/lib/systemd/system/touchscreen-log.service; enabled; preset: disabled)
Active: active (running) since Wed 2022-10-26 12:48:43 CEST; 2min 59s ago
Main PID: 320 (evtest)
Tasks: 1 (limit: 4519)
Memory: 236.0K
CPU: 3ms
CGroup: /system.slice/touchscreen-log.service
└─320 /usr/bin/evtest /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00
Okt 26 12:48:43 1545 evtest[320]: Resolution 210
Okt 26 12:48:43 1545 evtest[320]: Event code 57 (ABS_MT_TRACKING_ID)
Okt 26 12:48:43 1545 evtest[320]: Value 0
Okt 26 12:48:43 1545 evtest[320]: Min 0
Okt 26 12:48:43 1545 evtest[320]: Max 65535
Okt 26 12:48:43 1545 evtest[320]: Event type 4 (EV_MSC)
Okt 26 12:48:43 1545 evtest[320]: Event code 5 (MSC_TIMESTAMP)
Okt 26 12:48:43 1545 evtest[320]: Properties:
Okt 26 12:48:43 1545 evtest[320]: Property type 1 (INPUT_PROP_DIRECT)
Okt 26 12:48:43 1545 evtest[320]: Testing ... (interrupt to exit)
My question is: Which unit or target do I need to wait for (After=) for the touch device to be available?
Inofficial first vice president of the Rust Evangelism Strike Force
Offline
File dependency?
https://superuser.com/questions/1469766 … enerically
https://unix.stackexchange.com/question … -a-service
Last edited by seth (2022-10-26 13:22:04)
Offline
Yeah, I already tried that to no avail.
The udev rule does not trigger, so the service waits for the device node forever.
Inofficial first vice president of the Rust Evangelism Strike Force
Offline
You could also create a systemd.path unit that will trigger your service once the path exists: https://www.freedesktop.org/software/sy … .path.html
Regarding the device dependencies, do you not potentially already have a device to hook on/ check
systemctl list-units --type device
Offline
Excellent idea regarding the path unit.
As for the device units:
$ systemctl list-units --type device --no-pager
UNIT LOAD ACTIVE SUB DESCRIPTION
sys-devices-pci0000:00-0000:00:02.0-drm-card0-card0\x2deDP\x2d1-intel_backlight.device loaded active plugged /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight
sys-devices-pci0000:00-0000:00:13.0-ata2-host1-target1:0:0-1:0:0:0-block-sda-sda1.device loaded active plugged ADATA_IMSS316-256GD EFI
sys-devices-pci0000:00-0000:00:13.0-ata2-host1-target1:0:0-1:0:0:0-block-sda-sda2.device loaded active plugged ADATA_IMSS316-256GD root
sys-devices-pci0000:00-0000:00:13.0-ata2-host1-target1:0:0-1:0:0:0-block-sda.device loaded active plugged ADATA_IMSS316-256GD
sys-devices-pci0000:00-0000:00:1b.0-sound-card0-controlC0.device loaded active plugged /sys/devices/pci0000:00/0000:00:1b.0/sound/card0/controlC0
sys-devices-pci0000:00-0000:00:1c.2-0000:03:00.0-net-enp3s0.device loaded active plugged RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (RTL8111/8168 PCI Express Gigabit Ethernet controller)
sys-devices-pci0000:00-0000:00:1c.3-0000:04:00.0-net-enp4s0.device loaded active plugged RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (RTL8111/8168 PCI Express Gigabit Ethernet controller)
sys-devices-platform-serial8250-tty-ttyS10.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS10
sys-devices-platform-serial8250-tty-ttyS11.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS11
sys-devices-platform-serial8250-tty-ttyS12.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS12
sys-devices-platform-serial8250-tty-ttyS13.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS13
sys-devices-platform-serial8250-tty-ttyS14.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS14
sys-devices-platform-serial8250-tty-ttyS15.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS15
sys-devices-platform-serial8250-tty-ttyS16.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS16
sys-devices-platform-serial8250-tty-ttyS17.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS17
sys-devices-platform-serial8250-tty-ttyS18.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS18
sys-devices-platform-serial8250-tty-ttyS19.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS19
sys-devices-platform-serial8250-tty-ttyS20.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS20
sys-devices-platform-serial8250-tty-ttyS21.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS21
sys-devices-platform-serial8250-tty-ttyS22.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS22
sys-devices-platform-serial8250-tty-ttyS23.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS23
sys-devices-platform-serial8250-tty-ttyS24.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS24
sys-devices-platform-serial8250-tty-ttyS25.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS25
sys-devices-platform-serial8250-tty-ttyS26.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS26
sys-devices-platform-serial8250-tty-ttyS27.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS27
sys-devices-platform-serial8250-tty-ttyS28.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS28
sys-devices-platform-serial8250-tty-ttyS29.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS29
sys-devices-platform-serial8250-tty-ttyS30.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS30
sys-devices-platform-serial8250-tty-ttyS31.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS31
sys-devices-platform-serial8250-tty-ttyS4.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS4
sys-devices-platform-serial8250-tty-ttyS5.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS5
sys-devices-platform-serial8250-tty-ttyS6.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS6
sys-devices-platform-serial8250-tty-ttyS7.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS7
sys-devices-platform-serial8250-tty-ttyS8.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS8
sys-devices-platform-serial8250-tty-ttyS9.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS9
sys-devices-pnp0-00:05-tty-ttyS0.device loaded active plugged /sys/devices/pnp0/00:05/tty/ttyS0
sys-devices-pnp0-00:06-tty-ttyS1.device loaded active plugged /sys/devices/pnp0/00:06/tty/ttyS1
sys-devices-pnp0-00:07-tty-ttyS2.device loaded active plugged /sys/devices/pnp0/00:07/tty/ttyS2
sys-devices-pnp0-00:08-tty-ttyS3.device loaded active plugged /sys/devices/pnp0/00:08/tty/ttyS3
sys-devices-virtual-misc-rfkill.device loaded active plugged /sys/devices/virtual/misc/rfkill
sys-devices-virtual-net-terminals.device loaded active plugged /sys/devices/virtual/net/terminals
sys-module-configfs.device loaded active plugged /sys/module/configfs
sys-module-fuse.device loaded active plugged /sys/module/fuse
sys-subsystem-net-devices-enp3s0.device loaded active plugged RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (RTL8111/8168 PCI Express Gigabit Ethernet controller)
sys-subsystem-net-devices-enp4s0.device loaded active plugged RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (RTL8111/8168 PCI Express Gigabit Ethernet controller)
sys-subsystem-net-devices-terminals.device loaded active plugged /sys/subsystem/net/devices/terminals
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
46 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
$ ls -la /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00
lrwxrwxrwx 1 root root 9 26. Okt 14:18 /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00 -> ../event5
Update:
I was stupid. The udev rule works and I forgot to put the escaped systemd unit name into quotation marks:
0 ✓ 1545 ~ $ systemctl status dev-input-by\x2did-usb\x2dSilicon_Works_Multi\x2dtouch_Device\x2devent\x2dif00.device
○ dev-input-byx2did-usbx2dSilicon_Works_Multix2dtouch_Devicex2deventx2dif00.device - /dev/input/byx2did/usbx2dSilicon_Works_Multix2dtouch_Devicex2deventx2dif00
Loaded: loaded
Active: inactive (dead)
3 ✗ 1545 ~ $ systemctl status "dev-input-by\x2did-usb\x2dSilicon_Works_Multi\x2dtouch_Device\x2devent\x2dif00.device"
● dev-input-by\x2did-usb\x2dSilicon_Works_Multi\x2dtouch_Device\x2devent\x2dif00.device - Multi-touch_Device
Follows: unit currently follows state of sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d3-1\x2d3.1-1\x2d3.1:1.0-0003:29BD:4101.0001-input-input10-event5.device
Loaded: loaded
Active: active (plugged) since Fri 2022-10-28 13:18:07 CEST; 2min 24s ago
Until: Fri 2022-10-28 13:18:07 CEST; 2min 24s ago
Device: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.1/1-3.1:1.0/0003:29BD:4101.0001/input/input10/event5
But still the unit fails:
0 ✓ 1545 ~ $ cat /usr/lib/systemd/system/touchscreen-log.service
[Unit]
Description=Log touch screen events
Requires=dev-input-by\x2did-usb\x2dSilicon_Works_Multi\x2dtouch_Device\x2devent\x2dif00.device
After=dev-input-by\x2did-usb\x2dSilicon_Works_Multi\x2dtouch_Device\x2devent\x2dif00.device
[Service]
ExecStart=/usr/bin/evtest /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00
[Install]
WantedBy=multi-user.target
0 ✓ 1545 ~ $ systemctl status touchscreen-log.service
× touchscreen-log.service - Log touch screen events
Loaded: loaded (/usr/lib/systemd/system/touchscreen-log.service; enabled; preset: disabled)
Active: failed (Result: exit-code) since Fri 2022-10-28 13:18:06 CEST; 2min 50s ago
Duration: 35ms
Process: 314 ExecStart=/usr/bin/evtest /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00 (code=exited, status=1/FAILURE)
Main PID: 314 (code=exited, status=1/FAILURE)
CPU: 3ms
Okt 28 13:18:06 1545 systemd[1]: Started Log touch screen events.
Okt 28 13:18:06 1545 evtest[314]: evtest: No such file or directory
Okt 28 13:18:06 1545 systemd[1]: touchscreen-log.service: Main process exited, code=exited, status=1/FAILURE
Okt 28 13:18:06 1545 systemd[1]: touchscreen-log.service: Failed with result 'exit-code'.
Last edited by schard (2022-10-28 11:21:12)
Inofficial first vice president of the Rust Evangelism Strike Force
Offline
ExecStartPre=/usr/bin/sleep 0.5
?
Offline
That worked (now). But the question is whether it is stable, i.e. if the device will always be ready within half a second.
Inofficial first vice president of the Rust Evangelism Strike Force
Offline
That's the stupid thing about race conditions.
You could alternatively
while ! /usr/bin/evtest /dev/input/by-id/usb-Silicon_Works_Multi-touch_Device-event-if00; do sleep 0.1; done
or something stupid like that
Offline