我有一个想要运行的服务,只有在 udev 对设备文件设置了正确的权限后才能运行。
这似乎在启动时出错:我的服务已启动,但/dev/hidraw0
文件权限尚未设置。
我的服务定义为:
# cat /lib/systemd/system/turboledz.service
[Unit]
Description=Turbo LEDz service
After=systemd-udevd.service
[Service]
Type=simple
User=daemon
ExecStart=/usr/bin/turboledzd
KillMode=control-group
[Install]
WantedBy=multi-user.target
我可以看到它的依赖性:
# systemctl list-dependencies turboledz
turboledz.service
● ├─system.slice
● └─sysinit.target
● ├─apparmor.service
● ├─dev-hugepages.mount
● ├─dev-mqueue.mount
● ├─keyboard-setup.service
● ├─kmod-static-nodes.service
● ├─plymouth-read-write.service
● ├─plymouth-start.service
● ├─proc-sys-fs-binfmt_misc.automount
● ├─setvtrgb.service
● ├─sys-fs-fuse-connections.mount
● ├─sys-kernel-config.mount
● ├─sys-kernel-debug.mount
● ├─sys-kernel-tracing.mount
○ ├─systemd-ask-password-console.path
○ ├─systemd-binfmt.service
○ ├─systemd-boot-system-token.service
○ ├─systemd-hwdb-update.service
● ├─systemd-journal-flush.service
● ├─systemd-journald.service
○ ├─systemd-machine-id-commit.service
● ├─systemd-modules-load.service
○ ├─systemd-pstore.service
● ├─systemd-random-seed.service
● ├─systemd-sysctl.service
● ├─systemd-sysusers.service
● ├─systemd-timesyncd.service
● ├─systemd-tmpfiles-setup-dev.service
● ├─systemd-tmpfiles-setup.service
● ├─systemd-udev-trigger.service
● ├─systemd-udevd.service
● ├─systemd-update-utmp.service
● ├─cryptsetup.target
● ├─local-fs.target
● │ ├─-.mount
● │ ├─boot-efi.mount
● │ ├─mnt-farm0.mount
● │ ├─mnt-farm1.mount
● │ ├─mnt-farm2.mount
● │ ├─mnt-farm3.mount
● │ ├─mnt-farm4.mount
● │ ├─mnt-farm5.mount
○ │ ├─systemd-fsck-root.service
● │ └─systemd-remount-fs.service
● ├─swap.target
● │ └─swapfile.swap
● └─veritysetup.target
应该按照以下规则来处理许可问题:
# cat /lib/udev/rules.d/70-turboledz.rules
# Make Vendor "Arduino LLC", Product "Arduino Micro" accessible for non-root users.
# Note: BUS 1 is USB.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="8037", MODE="0666"
KERNEL=="hidraw*", ATTRS{busnum}=="1", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="8037", MODE="0666"
正常情况下,当我插入设备时,此规则会正确设置权限。
但在启动时它好像没有运行?
所有 udev 规则都在启动期间运行吗?
更新:
我看到规则最终确实运行了,因为在启动后,当我登录机器时,我看到了正确的权限。
看来这条规则对于我的服务来说适用得太晚了。
操作系统:Ubuntu 21.10
中央处理器:i5-11600K
核心:Linux i7 5.13.0-22-通用
系统:248.3-1ubuntu8