串行端口终端>无法打开/ dev / ttyS0:权限被拒绝


19

我在此盒子上安装了Windows XP,但失败了。以为它是损坏的操作系统,我尝试重新安装,但失败了。但是后来我尝试安装Ubuntu,但无法从USB或HD运行它。

进行了内存测试,发现我的512MB 记忆棒之一(有2个)失败了。我删除了坏的,并能够安装Ubuntu,但是它很慢。

我试图快速为飓风桑迪设置分组无线电。下载了串行端口终端并可以使用,但是系统一直处于锁定状态。因此,在其旁边安装了Xubuntu,并计划第二天用完以获取包装盒的RAM。放上Xubuntu,现在我在串行端口终端上收到以下错误:

Cannot open /dev/ttyS0: Permission denied

我希望能够使用串行端口终端,或与Xubuntu等效的端口,以便可以使用kpc3数据包终端,连接到计算机背面的com端口。

有任何想法吗?

Answers:


39

tty设备属于“ dialout”组,我怀疑您不是该组的成员,因此被拒绝访问/ dev / ttyS0,因此您需要将自己添加到该组中。

首先检查您是否是该组的成员:

groups ${USER}

..这将列出您所属的所有组。如果您不属于拨出组,请添加自己,例如:

sudo gpasswd --add ${USER} dialout

然后,您需要注销并重新登录才能生效。然后查看它是否可以解决您的问题。


即使是ID为1000的拨出组用户也无法打开串行端口进行读取。重新启动后。但是,当我对同一可执行文件使用sudo时,它就可以打开/dev/ttyS0。可能是什么原因?
Tomilov Anatoliy

2
@Orient我遇到了同样的问题,这是因为dialout未定义组。运行newgrp dialout修复了问题。
TheGr8_Nik

@ TheGr8_Nik谢谢。您的解决方案适用于Ubuntu 16.04。不涉及重新启动。默认情况下,该系统没有组名dialout;通过groups命令检查。即使dialout通过命令将用户名附加到组中sudo usermod -a username -G dialout。使用后newgrp dialout,此命令esptool.py -p /dev/ttyUSB0 flash_id有效。
太阳熊

11

唯一适用于我的解决方案是:(每次启动计算机时)

sudo chmod 666 /dev/ttys0

它确实需要在安装时进行修复。我使用的是15.10,并尝试过16.04 LTS,在那里仍然一样。看起来像这样简单的修复。

较旧的版本10.04LTS没有此问题。


2
这项工作与树莓派3,但当我重新启动时失去了权限。
J261

1
为我的用户名添加权限以进行拨出,效果很好,很简单。
DRJ101 '16

6

您可以只使用以下命令:

sudo adduser $USER dialout

这会将当前用户添加到拨出组中。登录并退出以生效。


4

在Ubuntu 18.04上,我使用以下命令修复了此问题:

sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER

然后,重新启动。

如果仍然有问题,请尝试使用以下命令进行调试:

strace -ff <COMMAND> > strace.txt 2>&1

并在跟踪中查找“被拒绝”。


3

在各种论坛上四处看看,这似乎是与权限相关的错误。这是解决问题的方法(长版)。你既需要cusetserial安装的软件包。

在三个终端选项卡中,监控来自# tail -f /var/log/messages 的输出,这就是我们知道是否存在的信息/dev/ttyUSB0

在第二个选项卡中,只需ls -l对该设备运行循环以 查看其权限,并且其组ID为“ dialout”。这是关键。由于某种原因,您的用户必须使用此GID进行cu,所以...

在第三个选项卡中,以root # newgrp dialout身份登录(与拨出的GID相对应)。经过测试 # touch /tmp/anything…… ls -l对该文件进行处理表明它是由具有拨出组的root创建的,所以我们已经准备好…… # cu -l /dev/ttyUSB0 就我而言,我需要再次按回车键才能看到预期的提示,在其他情况下,可能需要提高速度指定。


这是实际的一块,帮助我:出于某种原因,用户必须使用这个GID做立方米,所以...。太感谢了。
ΤΖΩΤΖΙΟΥ

1

解决方法如下:

我刚刚将操作系统更新为Ubuntu18。通常,我会通过Arduino WebSight安装arduino IDE,因为通过Ubuntu Software Portal提供的版本始终是较旧的版本,并且我需要最新的功能和开发板支持。但是,由于我刚安装了最新的操作系统,所以我认为ubuntu的官方软件中心将列出最新版本的IDE,并且确实如此。

现在到多汁的部分!我的笔记本电脑和台式机在访问串行端口时都遇到相同的问题。我已经完成了拨号组的make user部分的工作,并设置了串行端口的权限,但是始终必须注销然后重新登录,每次重新启动时都再次进行操作!不好玩!。

这次,它没有用。即使在软件中心中,软件的权限选项也会显示串行端口“已断开连接”。即使在使用sudo通过终端窗口手动授予了所有权限之后,也没有选项允许对端口的权限。

我决定从软件中心卸载Arduino IDE,然后从Web Sight安装它,所以我做到了。这次我阅读了安装文件,只是为了看看它是否提到了串行端口的权限,*****当然可以!******所有端口均设置有完全访问权限,即全面访问用户。原来这就是答案。运行arduino提供的arduino-linux-setup.sh文件后,所有串行端口问题均已解决。以下是该arduino-linux-setup.sh文件的摘录;

echo ""
echo "******* Add User to dialout,tty, uucp, plugdev groups *******"
echo ""

sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1


acmrules () {

    echo ""
    echo "# Setting serial port rules"
    echo ""

    cat <<EOF
    "KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   "KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   EOF

}

因此,您甚至看到内核都受影响。我的建议:

从arduino ide网站安装。此时,请忽略软件中心,直到对其进行修复。是的,软件中心不允许在安装过程中以及之后一直对串行端口进行渗透。

问题解决了!


0

就我而言,即使我使用以下方法将用户添加到组中,问题仍然存在:

所以当我使用:

sudo gpasswd --add ${USER} dialout

当我键入:groups我得到了这个结果:

ilyahoo adm cdrom sudo dip plugdev lpadmin sambashare

但是当我键入id -Gn ilyahooputput时:

ilyahoo adm tty dialout cdrom sudo dip plugdev lpadmin sambashare 

我知道有一个问题,我不诚实地说是什么。

为了得到一个解决方案,我刚刚输入

newgrp ilyahoo

并且问题得以解决。


欢迎ilyahoo到askubuntu!请尝试根据我们的指南设置帖子的格式。尝试以更具可读性的方式格式化输出。谢谢
abu_bua

1
@abu_bua请为命令输出使用代码格式,而不是引号格式。
muru

0

答案很简单。您需要将用户添加到两个组中才能访问usb端口。这些组是dialouttty

sudo usermod -a -G dialout <user>
sudo usermod -a -G tty <user>

<user>这些命令中的实际用户名替换。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.