在启动时执行 udev 规则

在启动时执行 udev 规则

我有一个想要运行的服务,只有在 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

相关内容