我正在使用一个需要通过 USB 串行电缆进行通信的应用程序,使用 /dev/ttyUSB0。
/dev/ttyUSB0 和拥有该进程的用户都在组拨出中,并且端口上的权限设置正确(据我所知)。
但是,只有更改端口权限后,我的应用程序才能运行:
sudo chmod 666 /dev/ttyUSB0
。我不想每次都手动执行此操作。
该应用程序是 Node-RED。我使用它与三菱 PLC(不是 Arduino)交换数据。getent group dialout
确实显示了正确的用户。
我尝试过的其他方法:重启后,通信不会自动恢复。对 PLC 进行电源循环也无济于事。但是,当我重新启动 Node-RED 进程 ( node-red-restart
) 时,通信奇迹般地恢复了。我怀疑第一个 node-red 进程可能有不同的所有者,但事实并非如此,我检查了一下。
我不再确定这是一个权限问题,但仍然存在一个问题......
$ /bin/ls -l $( type -p node-red )
lrwxrwxrwx 1 root root 35 aug 17 15:09 /usr/bin/node-red -> ../lib/node_modules/node-red/red.js
$ id
uid=1000(jw) gid=1000(jw) groups=1000(jw),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),4120(lpadmin),130(lxd),131(sambashare)
$ getent group dialout
dialout:x:20:jw
$ ls -la /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 sep 26 15:17 /dev/ttyUSB0
$ ps aux | grep node-red
jw 1383 10.1 6.2 896816 62012 ? RNsl sep25 6:02 node-red
jw 2154 0.0 0.2 9040 2492 pts/0 S+ 00:51 0:00 grep --color=auto node-red
答案1
你正在使用 arduino,或者我假设类似的设备。很可能,你需要你的用户拥有拨出权限,而不是你的设备。使用此命令授予你的用户权限sudo usermod -a -G dialout $USER
你可能还想知道Arduino StackExchange
答案2
由于我不确定这是 Linux 的问题还是 Node-RED 的问题,所以我在他们的论坛上问了同样的问题。如果我在启动时将 node-red 的启动延迟一点,我的问题就解决了。
有关描述,请关注关联