我正在尝试从 Ubuntu 12.04 与 Arduino 通信。插入 USB 电缆时,arduino 的串行端口显示为 /dev/ttyUSB0。当我尝试使用莫塞里尔,我收到“无法打开设备 /dev/ttyUSB0”错误,但在启动时没有出现莫塞里尔使用须藤. 我必须进行什么配置才能使普通非 root 用户能够访问串行设备?
答案1
您有多种选择:
自动 ACL 分配
您很可能在 Ubuntu 中运行了 systemd-logind 或 ConsoleKit,它们可以根据当前登录控制台的用户帐户自动配置设备节点上的 ACL。这些 ACL 授予除常规权限之外的额外访问权限,可以使用 查看getfacl
。
要使用此功能,请将以下内容添加到/etc/udev/rules.d/60-extra-acl.rules
1:
KERNEL=="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess"
(1是的,创建该文件。默认情况下它不存在;整个目录用于管理员自定义。)
基于组的访问
tty 设备通常可由特定的团体例如“dialout”或“uucp”。将自己添加到该组即可获得访问权限全部串口:
# gpasswd -a YourUsername dialout
不要忘记注销并重新登录,以便应用群组变更。
权限或所有权变更
类似于上面的 udev 规则也可用于设置“主要”所有者和组以及权限(这是默认组的初始设置方式)。例如:
KERNEL=="ttyUSB[0-9]*", OWNER="YourUsername"
or: KERNEL=="ttyUSB[0-9]*", GROUP="users", MODE="0660"
or: KERNEL=="ttyUSB[0-9]*", MODE="0666"
您可以分配给 OWNER、GROUP 和 MODE 参数。
临时手动更改
做一个一度改变,只需像平常一样使用chmod
和/或。chown
# chown YourUsername /dev/ttyUSB0
or: # chmod a+rw /dev/ttyUSB0