如何允许非默认用户使用串行设备 ttyUSB0?

如何允许非默认用户使用串行设备 ttyUSB0?

我有一个 Ubuntu 11.10 系统,有 2 个用户:

  • 第一个是在安装过程中创建的
  • 第二个是在之后创建的。它属于 sudoers 组。

现在的问题是,当第二个尝试使用设备时ttyUSB0会返回以下错误:

"Could not open serial port /dev/ttyUSB0"

我能够使用以下方法修复它:

sudo chown :second_user /dev/ttyUSB0

然而,当我断开设备并重新连接时,问题又出现了。

有没有办法允许不同的用户访问设备?我想我必须将用户添加到特定组。当前所有者是root,组是dialout。但是我不确定组,也不知道如何添加用户。

谢谢!

答案1

正如您所注意到的,该/dev/ttyUSB0设备有 组dialout。您需要做的就是将第二个用户添加到该dialout组:

sudo adduser second_user dialout

second_user 需要注销并重新登录才能使该功能生效。

答案2

简单的方法:

sudoedit /etc/udev/rules.d/50-myusb.rules

保存此文本:

KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"

拔下设备并重新插入,任何用户都应该可以读取/写入它!

答案3

您可以使用 UDEV。这是一个每次插入或拔出设备(以及其他操作)时都会触发的系统。有了它,您可以编写各种脚本来执行各种操作,包括设置权限。

运行sudoedit /etc/udev/rules.d/50-ttyusb.rules并将其粘贴在那里:

KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",GROUP="uucp",MODE="0666"

保存、退出并重新插入,您便可以正常运行。将权限设置为 666 允许任何人写入该设备。

我基于此这一页这是几年前的事情了,但如果 Jeremy 的解决方案没有。

答案4

udev 规则虽然有效,但正如所写,它们有一个非常讨厌的副作用,即让ttyUSB*所有人都可以访问所有设备。这不好,因为这可能存在安全风险,具体取决于系统上的其他内容。

而是使用更具选择性的 udev 规则。例如,我有一个操作一组开关的 USB 设备。插入后,我可以从 dmesg 中看到制造商的 ID 和产品代码(此外,在本例中,甚至还有设备的序列号)。我可以添加:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"

添加到上面的内核行中,规则将仅适用于该设备。 更好的方法是MODE同时设置组,而不是单独分配给变量:

GROUP="whatever", MODE="0660"

那么只有组“ whatever”中的人员才有写权限。

约翰·鲍勒

相关内容