更改串口权限

我在Ubuntu上使用Arduino IDE,并且遇到了串口的问题。过去它是可以正常工作的,但由于某些原因,我觉得有必要将一些文件的所有权从root所有者更改为我的用户所有者。
这样做使得IDE能够正常工作,但我失去了使用正确串口的能力。在dev文件夹中,我需要的串口被列为权限166。有人(现在已经不在附近帮助我了)将权限更改为666,这使得一切都正常工作。
然而,一旦我重新启动电脑,它就会恢复到原来的状态,如果我现在尝试使用以下命令:
sudo chmod 666 ttyACM0

没有任何反应。没有错误信息,但权限也没有改变。
我该如何更改它,以及如何使其永久更改。
如果这个问题过于简单或者不清楚,我向您道歉,我是一个Ubuntu新手,我不会介意得到反馈!

1sudo chmod 666 /dev/ttyACM0 这是这个页面上唯一一个在我的14.04 beta2实时环境中起作用的建议。谢谢! - user264842
5个回答

使用以下命令,将自己加入到“dialout”组,可以永久解决有关“/dev/ttyACM0”权限的问题: sudo usermod -a -G dialout $USER
登出并重新登录以使组更改生效。

当Arduino IDE要求授予root权限将自己添加到“拨号组”时,我了解了这个。现在我知道它是什么了。 - Ufoguy
我刚刚购买了一款Pulse-Eight USB-CEC适配器,用于连接我的新电视,并发现它最初在Ubuntu系统中与Kodi不兼容。在检查崩溃日志并谷歌搜索错误信息"ERROR: CecLogMessage - error opening serial port '/dev/ttyACM0': Permission denied"后,我找到了这个页面。感谢您(还有下面的Don Kirkby,他的方法也有效),我立即解决了这个问题。 - Rich.T.
另外,来自“user247020”的回答给了我另一个解决方案:打开图形用户界面工具“用户和组”,将自己设置为“管理员”。这将把您添加到“dialout”组(即“使用调制解调器”),以及其他一些组。 - Rich.T.
使用者模式 -a -G dialout pi 在 sudo chgrp dialout /dev/ttyS0 之后可以正常工作,但是当我重新启动时所有的配置都会丢失。我使用的是树莓派3代。 - J261
将需要重新执行的任何命令添加到启动脚本中。可以是bash脚本、/etc/profile或init脚本。 - Rinzwind
1请注意,logout 的意思是“退出 X 会话”,而不仅仅是“打开新的 X 终端”。我花了一些时间才弄明白这个。 - johndodo
对于匿名用户的编辑:我已经拒绝了。在重启过程中,/dev/目录下的chmod会被覆盖。 - Rinzwind
这在我的Xubuntu 18.04上没有起作用。 - user171780
为什么不呢?这是一个通用的解决方案。我们都有一个名为"dialout"的用户,并且设备归"dialout"所有。 - Rinzwind

我无法让Rinzwind的建议起作用,因为它抱怨用户账户已经存在。相反,我使用了这个命令将一个已存在的用户(terrik)添加到一个已存在的组(dialout),如Ubuntu帮助维基所述。
sudo adduser terrik dialout

此命令也很有用,可以列出您当前的组。不过正如Rinzwind所说,您必须先注销然后重新登录,才能让串口接受您的输入。
groups terrik

另一种可能性是在/etc/udev/rules.d/目录中创建一个规则文件。我遇到了类似的问题,我在上述目录中创建了50-myusb.rules文件,并写入以下内容:
KERNEL=="ttyACM[0-9]*",MODE="0666"

请注意,这将为连接到ttyACM插座的任何设备提供读写权限。如果您只需要特定设备获得读写权限,还必须检查idVendoridProduct。您可以通过两次运行lsusb命令来找到它们,一次是在未连接设备时运行,一次是在连接设备后运行,然后观察输出中的附加行。在那里,您将看到类似于Bus 003 Device 005: ID ffff:0005的内容。在这种情况下,idVendor = ffffidProduct = 0005。您的情况可能不同。然后,您可以修改规则文件如下:
ACTION=="add", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="0005", MODE="0666"

现在只有这个设备获得了权限。点击阅读此文以了解更多关于编写udev规则的内容。

我无法让Terrik的答案起作用,但如果我对ttyACM0的路径进行微调,就可以了。
sudo chmod 666 /dev/ttyACM0

想以评论的形式发布,但我还没有这样的权限...


1当拔下并重新插入Arduino时,权限似乎会重置。 - user1063287
不工作。 :( - Freddy
它工作得很好。但是在重新插入时需要udev规则重新授权。 - pylover
我尝试了sudo chmod 666 /dev/ttyACM0,但在重新启动后它并没有起作用。有人有解决办法吗? - user1063287
嗯,伙计们,这确实有效....将该命令添加到启动脚本中。(/Dev在启动时会重新创建,因此您需要在每次启动时重新执行此命令) - Rinzwind
我的观点是:我决定在拔插或重启后重新设置权限的行为相当喜欢。我不确定加入dialout组是否会带来安全隐患,但我认为如果可能的话,将串口和其他外部通信保持为仅限root用户特权是一个好主意。当你准备好刷新时,只需将权限重新设置为0666即可,除非你频繁进行拔插操作。/多疑 - Yankee
请将以下两行代码添加到您的 ~/.bashrc 文件的末尾:# 为 Arduino IDE 使用的串口授予权限 sudo chmod 666 /dev/ttyACM0 - Craig Wilcox

尝试进入“系统/用户和组”并在TTY组中选中您的用户名旁边的复选框。

[Errno 13] 权限被拒绝:'/dev/ttyACM0'。除了 tty 组外,用户还属于 dialout 组。Linux Mint 17.1。 - user1063287
1@user1063287 请尝试使用sudo chmod a+rw /dev/ttyACM0命令。 - Vladimir S.