我已经为我的 Arduino 添加了 udev 规则,但是符号链接获得的所有权是“root root”而不是“root dialout”。
$ cat /etc/udev/rules.d/47-Arduino.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="2341", ATTR{idProduct}=="0001", MODE="0666", SYMLINK+="arduino", GROUP="dialout"
$ ls -la /dev/ar*
lrwxrwxrwx 1 root root 15 sep 8 11:02 /dev/arduino -> bus/usb/003/007
$ ls -la /dev/bus/usb/003/007
crw-rw-r-- 1 root dialout 189, 262 sep 8 11:12 /dev/bus/usb/003/007
我的用户是“dialout”组的成员,但是当我尝试与设备通信时仍然收到权限被拒绝错误。
当我使用“默认”设备“/etc/ttyACM3”时没有任何问题。
$ ls -la /dev/ttyACM3
crw-rw---- 1 root dialout 166, 3 sep 8 11:12 /dev/ttyACM3
我尝试重启 udev 服务并重启电脑。如何修复这个问题?
答案1
我不确定是否有办法使用 udev 为符号链接设置用户和组。我也没有看到。我也怀疑是否需要这样做。
我登录到 tty6 并以 root 身份创建了指向 /dev/tty6 的符号链接 /tmp/tty6。完成后,其用户和组均为 root,但 /dev/tty6 归我所有。
我能够使用
echo hi >/dev/tty6
但也回显 hi >/tmp/tty6
原因是必要的权限由指向的最终 inode 而不是符号链接携带。
如果我是对的,您遇到的问题还有其他原因,尽管我猜测可能是您使用的程序错误地查看了符号链接的权限。
如果是这种情况,作为一种规避措施,也许您可以创建自己的链接并使用它,而不是一个 udev 设置。
ln -s /dev/arduino ~/arduino
应该产生一个符号链接到目标/dev/arduino 但使用您的用户和组。
作为测试,以 root 身份,您还可以在 udev 创建的符号链接上自行更改组,并查看在通过 /dev/arduino 时是否有帮助。