Ubuntu 14.04 问题:看来我没有权限访问 ttyUSB0 我已经在拨出组内。(已退出并重新登录)
ammirato@bvision4:/dev$ chmod 666 ttyUSB0
chmod: changing permissions of 'ttyUSB0': Operation not permitted
ammirato@bvision4:/dev$ groups
compsci adm dialout sudo video groups: cannot find name for group ID 1096176595
109617659
即使在我更改权限后,sudo
我仍然无法从我的帐户访问它。
ammirato@bvision4:/dev$ sudo chmod 666 ttyUSB0
ammirato@bvision4:/dev$ ls -l ttyUSB0
crw-rw-rw- 1 root dialout 188, 0 May 15 16:15 ttyUSB0
ammirato@bvision4:/dev$ chmod 666 ttyUSB0
chmod: changing permissions of 'ttyUSB0': Operation not permitted
更大的问题:
我正在尝试运行一些通过 USB 与机器人通信的 Aria 代码。我以前运行过它,一切正常。由于某种原因,它不再起作用了。使用 sudo 或不使用 sudo 运行该程序都没有帮助。该程序尝试通过 ttyS0 访问机器人,但我创建了一个从 ttyUSB0 到 ttyS0 的符号链接。
我也尝试过通过 ROS 运行 Aria 代码,它尝试通过 ttyUSB0 连接,但仍然无法连接。
如果我连接了 USB 设备或者没有连接,我的代码中会有不同的输出,所以我认为它可以检测到该设备,但可能没有读/写的权限,
已连接设备:
ammirato@bvision4:/dev$ rosrun rosaria RosAria
[ INFO] [1431722006.042624050]: RosAria: using port: [/dev/ttyUSB0]
Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0.
Syncing 0
No packet.
Syncing 0
No packet.
Trying to close possible old connection
Syncing 0
No packet.
Syncing 0
No packet.
Robot may be connected but not open, trying to dislodge.
Syncing 0
No packet.
Robot may be connected but not open, trying to dislodge.
Syncing 0
No packet.
Could not connect, no robot responding.
Failed to connect to robot.
[ERROR] [1431722012.788049009]: RosAria: ARIA could not connect to robot! (Check ~port parameter is correct, and permissions on port device.)
[FATAL] [1431722012.788127232]: RosAria: ROS node setup failed..
设备未连接:
ammirato@bvision4:/dev$ rosrun rosaria RosAria
[ INFO] [1431722075.336807723]: RosAria: using port: [/dev/ttyUSB0]
Could not connect to simulator, connecting to robot through serial port /dev/ttyUSB0.
ArSerialConnection::open: Could not open serial port '/dev/ttyUSB0' | ErrorFromOSNum: 2 ErrorFromOSString: No such file or directory
Could not connect, because open on the device connection failed.
Failed to connect to robot.
[ERROR] [1431722075.385556969]: RosAria: ARIA could not connect to robot! (Check ~port parameter is correct, and permissions on port device.)
[FATAL] [1431722075.385627788]: RosAria: ROS node setup failed...
我正在使用 Ubuntu 14.04
ammirato@bvision4:/dev$ stat /dev/ttyUSB0
File: '/dev/ttyUSB0'
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 5h/5d Inode: 290088 Links: 1 Device type: bc,0
Access: (0660/crw-rw----) Uid: ( 0/ root) Gid: ( 20/ dialout)
Access: 2015-05-15 21:52:26.118904498 -0400
Modify: 2015-05-15 21:52:26.118904498 -0400
Change: 2015-05-15 21:52:26.118904498 -0400
Birth: -
答案1
由于您不是此设备的所有者,因此您无法以普通用户身份更改此文件的权限。这没什么不寻常的。
关于将 /dev/ttyUSB0 符号链接到 /dev/ttyS0 - 我认为这是个坏主意。除非您有尝试使用该端口的程序的源代码,否则您真的不知道开发人员如何检查串行端口的设备节点。也许它检查该设备是字符设备(符号链接不满足此条件)然后失败?
我始终更喜欢使用程序命令行标志来指定端口,而不是使用诸如符号链接之类的解决方法。
ArSerialConnection::open: Could not open serial port '/dev/ttyUSB0' | ErrorFromOSNum: 2 ErrorFromOSString: No such file or directory
Could not connect, because open on the device connection failed.
stat /dev/ttyUSB0
运行此命令时的输出是什么?
另外 - 将您的常规用户帐户添加到dialout
组后,您是否注销然后重新登录?
答案2
假设您的权限正确:
$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Okt 28 04:09 /dev/ttyUSB0
$ id
uid=1000(you) ... 20(dialout)
看来软件有问题。我今天也遇到了同样的问题。以下命令显示问题出在其他地方:
strace -ff igotugui >strace.txt 2>&1
然后,在 strace.txt 中我发现了类似的行(顺便说一下,对于所有现有设备):
[pid 13391] openat(AT_FDCWD, "/dev/bus/usb/004/001", O_RDWR) = -1 EACCES (Permission denied)
[pid 13391] ioctl(28, USBDEVFS_CONNECTINFO, 0x7f4efa5c6a58) = -1 EPERM (Operation not permitted)
[pid 13391] openat(AT_FDCWD, "/dev/bus/usb/003/010", O_RDWR) = -1 EACCES (Permission denied)
[pid 13391] ioctl(28, USBDEVFS_CONNECTINFO, 0x7f4efa5c6a58) = -1 EPERM (Operation not permitted)
目前,我不知道如何找出相关的设备名称(每次物理连接设备时它都是不同的),但是为了使您的程序正常工作,您必须更改该设备文件的权限:
sudo chgrp dialout /dev/bus/usb/003/010
更新
今天我了解得更多了。你可以使用 lsusb 获取设备 ID:
$ lsusb
[...]
Bus 003 Device 010: ID dead:beef Your awesome device
因此,将 Bus 作为第一路径部分,将 Device 作为第二路径部分。
或者,你可以为其编写一个 udev 规则:
# /etc/udev/rules.d/51-awesomedevice.rules:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="dead", ATTRS{idProduct}=="beef", GROUP="dialout", MODE="0660"