【发布时间】:2020-11-25 12:48:48
【问题描述】:
我正在编写一个应用程序,它允许通过 USB 插入的 Arduino 将串行数据发送到应用程序以实时绘制图形。它可以扫描 Arduino 的可用端口并尝试连接到它,但是无论我使用 pyserial 还是 QtSerialPort,我都遇到了权限问题。我已将我的用户添加到组 tty、uucp 和 dialout。 (列出端口时,我看到它们属于uucp。)这似乎没有任何作用。每次插入 Arduino 时,我都可以chmod a+rw 端口,但这并不实用,因为较少的技术用户(即我的孩子)需要能够插入并通过我正在编写的 GUI 使用它。我已经看到了使用 sudo 运行整个脚本的建议,但这似乎不够安全,并且还需要在命令行中输入。
有没有一种方法可以在每次插入 USB 电缆时从串行端口读取而无需重置权限?或者,如果没有,是否有一种可接受的方式从 GUI 执行此操作,以确保在尝试连接之前权限正确,而不将 整个 程序作为 sudo 运行?我正在 Linux (Arch) 上构建它。
【问题讨论】:
-
这能回答你的问题吗? Read/Write to a Serial Port Without Root?
-
@musicamante 不,不是真的,除非有更多我不理解的东西。我已经尝试查看
ls -l /dev/ttyACM*看到他们属于uucp组我将我的用户添加到该组,以及tty和dialout以确保安全。没有运气。 -
似乎有一个 old 错误(自 Qt 5.6 起似乎已解决)与权限相关,这与您应该确保QSerialPort 对象在退出前已正确关闭,否则可能会出现锁定文件无法释放的问题:请参阅stackoverflow.com/a/37402197
-
@musicamante 我会调查的。在这种情况下,我在导入 PyQt5 之前也遇到了这个权限问题,并且在仅使用 PySerial 时遇到了这个问题。
-
@musicamante 我今天也重新安装了全新的 PyQt5,所以我不认为它使用的是 3.5 年前的 Qt5 版本,尽管我不清楚如何检查正在使用的 Qt5 版本从 pip 安装 PyQt5。
标签: serial-port usb archlinux tty udev