Tôi có một dịch vụ mà tôi muốn chạy, chỉ sau khi udev đã đặt quyền chính xác cho các tệp thiết bị.
Điều này dường như không đúng lúc khởi động:
Dịch vụ của tôi được bắt đầu, với /dev/hidraw0
quyền truy cập tập tin chưa được thiết lập.
Dịch vụ của tôi được định nghĩa là:
# mèo /lib/systemd/system/turboledz.service
[Đơn vị]
Mô tả=Dịch vụ Turbo LEDz
Sau=systemd-udevd.service
[Dịch vụ]
Loại = đơn giản
Người dùng = daemon
ExecStart=/usr/bin/turboledzd
KillMode=nhóm điều khiển
[Cài đặt]
WantedBy=multi-user.target
Và tôi có thể thấy sự phụ thuộc của nó:
# phụ thuộc vào danh sách systemctl 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
Sự cho phép nên được quan tâm, với quy tắc này:
# con mèo /lib/udev/rules.d/70-turboledz.rules
# Làm cho Nhà cung cấp "Arduino LLC", Sản phẩm "Arduino Micro" có thể truy cập được đối với người dùng không phải root.
# Lưu ý: BUS 1 là USB.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="8037", MODE="0666"
KERNEL=="hidraw*", ATTRS{busnum}=="1", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="8037", MODE="0666"
Thông thường, quy tắc này đặt đúng quyền khi tôi cắm thiết bị.
Nhưng lúc khởi động thì nó không chạy?
Tất cả các quy tắc udev có chạy trong khi khởi động không?
CẬP NHẬT:
Tôi thấy rằng cuối cùng thì quy tắc cũng được chạy, vì sau khi khởi động, khi tôi đăng nhập vào máy, tôi thấy các quyền chính xác.
Có vẻ như quy tắc chỉ được áp dụng muộn cho dịch vụ của tôi.
hệ điều hành: Ubuntu 21.10
CPU: i5-11600K
hạt nhân: Linux i7 5.13.0-22-chung
Hệ thống: 248.3-1ubuntu8