问题描述
我有一个 Ubuntu 11.10 系统,有 2 个用户:
-
第一个是在安装过程中创建的
-
第二个是在之后创建的。它属于 sudoers 组。
现在的问题是,当第二个尝试使用设备 ttyUSB0
时,会返回以下错误:
"Could not open serial port /dev/ttyUSB0"
我能够通过使用来修复它:
sudo chown :second_user /dev/ttyUSB0
但是,当我断开设备并重新连接时,问题又回来了。
有没有办法让不同的用户访问设备?我想我必须将用户添加到特定组。当前所有者是 root
并且组是 dialout
。但是我不确定该组,也不知道如何添加用户。
谢谢!
最佳办法
如您所见, /dev/ttyUSB0
设备具有 dialout
组。您需要做的就是将第二个用户添加到 dialout
组:
sudo adduser second_user dialout
second_user 需要注销 &重新登录以使其生效。
次佳办法
简单的方法:
sudoedit /etc/udev/rules.d/50-myusb.rules
保存此文本:
KERNEL=="ttyUSB[0-9]*",MODE="0666"
KERNEL=="ttyACM[0-9]*",MODE="0666"
拔下设备并重新插入,它应该可以被任何用户读/写!
第三种办法
您可以使用 UDEV。这是一个每次插入或拔出设备(以及其他东西)时都会触发的系统。有了它,您可以编写各种要发生的事情,包括设置权限。
运行 sudoedit /etc/udev/rules.d/50-ttyusb.rules
并将其粘贴在那里:
KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",GROUP="uucp",MODE="0666"
保存,退出并重新插入,您应该可以启动并运行。将权限设置为 666 允许任何人写入设备。
我的基础是几年前的 this page,但如果 Jeremy 的 solution 没有,这样的东西应该可以工作。
第四种办法
太棒了——这里给出的 UDEV 解决方案就是我的票。
我通过 Wine 安装了 Icom 的 CS-F3020_F5010_F5020 程序,为 Com 端口创建了如下链接:
ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com1 but nothing.
然后我意识到我需要更改 /dev/ttyUSB0 的权限以允许我访问它。在您拔下/重新插入 USB 之前效果很好,然后您需要 re-change 权限。
我尝试将我的用户添加到拨出组,但由于某种原因这并没有解决问题。
使用 UDEV 解决了最后的难题。现在我可以使用 Linux 对我的 Icom 收音机进行编程,轻松插拔 USB/串行设备。呜呼。谢谢。
第五种办法
udev 规则有效,但正如所写,它们具有使所有人都可以访问所有 ttyUSB*
设备的非常讨厌的副作用。这不好,因为这可能是安全风险,具体取决于系统上的其他内容。
而是使用更具选择性的 udev 规则。例如,我有一个操作一组开关的 USB 设备。从 dmesg 插入时,我可以看到制造商的 ID 和产品代码(在这种情况下,甚至是设备的序列号)。我可以补充:
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001"
到上面的内核行,并且该规则仅适用于该设备。甚至比单独分配给 MODE
变量更好地设置组:
GROUP="whatever", MODE="0660"
那么只有“ whatever
”组中的人才能获得写入权限。
约翰·鲍勒