Arduino程序仅在以root身份运行时才能运行


19

当我以root用户(sudo)运行Arduino程序时,上传简单的草图似乎可以正常工作。我想以普通用户身份运行它。有没有人以前遇到过同样的问题并加以解决?

这是我从中获得的lsusb

$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

Arduino程序将其标识为/dev/ttyACM0。这是它的权限:

$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

这是来自的输出 id

groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

当我从示例中上传草图时,以普通用户的身份遇到此错误:

avrdude:stk500_recv(): programmer not responding

欢迎任何建议。


看看这个帮助,节“设置权限”
alexan_e

4
+1表示不接受以root身份运行IDE的情况,而是试图弄清楚如何正确解决该问题。
jippie 2014年

当您尝试在非特权用户下运行IDE时,会得到什么确切的错误?您可能需要在Preferences菜单中启用详细输出。
jippie 2014年

拔出插头,确保连接到正确的设备,然后等待几秒钟,然后重新插上电源,然后检查dmesg已注册设备文件的输出。
jippie 2014年

检查是否已正确找到设备/dev/ttyACM0: USB ACM device。因此,对我来说这似乎不是问题。另一方面,来自编译和上传的日志(必须在“首选项”中启用它们)似乎很有希望。我只是似乎无法从arduino程序中复制它们:(。((可能它们正在向某个位置的文件中写入内容吗?))
狂热梦

Answers:


13

最简单的解决方案是将您自己添加到dialout群组中。

首先记下的输出id。将其保存在文件中(不保存在文件中/tmp,因为重新启动后该文件将被清除)。如果查看输出,您会注意到您的用户已注册了多个组,这些组代表了系统上的额外特权。默认情况下,您的Arduino被分配到该组,dialout因为它注册为串行接口,并且在过去,它们通常用于...使用调制解调器拨出。

要将自己添加到dialout组中,请发出以下命令:

sudo usermod -a -G dialout $USER

不要忘记该-a标志(用于添加组而不是替换),否则您将遇到完全不同的问题。这就是将id输出复制到文件的原因,因此,如果您搞砸了,至少可以知道用户的配置与以前一样。

然后注销并登录,它应该从那时开始工作。

(可选)您可以id对照之前保存的输出仔细检查输出是否。


感谢@jippie,为您提供周到的解答。我已将自己加入dialout小组,但问题似乎仍然存在。我已经用id命令的输出修改了我的问题。
发狂梦

根据您的更新,我的印象是问题的确切原因已移至下一个问题。您正在解决问题。你什么时候会发生什么cat /dev/ttyACM0?它会引发错误吗?
jippie 2014年

不,当我打开该设备文件时,cat它似乎是空的。
发狂梦

只要您没有收到错误消息,就可以为空。
jippie 2014年

9

经常重复的建议“只是sudo usermod -aG dialout <username>对我没用,我终于弄清了原因。在我的机器上,/dev/ttyUSB0属于该组serial而不是该组dialout,因此添加用户名dialout无济于事。

# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

最后:sudo usermod -aG <group-name> <username>为我修复它。

令人尴尬的是这也明确提到这里下的“设置权限”。叹。


是的,值得检查实际拥有的组。设备文件也可以是ttyUSB#或ttyACM#(或理论上的任何文件),具体取决于板的类型,内核驱动程序以及udev的最终配置或创建节点的方式。
克里斯·斯特拉顿


0

这发生在我身上。就我而言,我已经升级了arduino的版本,似乎首选项文件引起了问题。只需删除〜/ .arduino / preferences.txt文件(关闭Arduino IDE)。

脚步:

  1. 关闭Arduino IDE
  2. 执行此:

    rm〜/ .arduino / preferences.txt

  3. 启动Arduino IDE

这对我有用,希望对其他人也有用。我正在使用Linux Mint 17,并且通过提取Arduino IDE从Arduino 1.05升级到Arduino 1.06,我不在回购中使用一个。(当然,在将您的用户添加到其他人提到的相应组中之后,但是如果这样做不能帮助您尝试此操作)


与此相关的是,以root用户身份运行工具的一个副作用是,您最终可能会留下您的ordinay帐户无法修改或清除的临时,配置或项目文件。
克里斯·斯特拉顿
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.