我在运行LinuxMint17“mate”的台式机上安装了一个USB GPIO电子Gizmo;在这个环境中,Gizmo显示为/dev/ttyacm0。我已经编写了一个gui python 2.7/tkinter程序,通过pyserial模块控制gizmo。该程序在使用sudo从控制台运行时工作。
作为一个gui程序,我希望能够从“mate”桌面运行它——但我不能,因为作为一个串行设备,访问gizmo需要通过sudo获得的根权限,wot必须在终端调用。

# here's the offending code
import serial
numa = serial.Serial("/dev/ttyACM0", 19200, timeout=1)
....

如何从python程序中调用“输入密码…”例程,以便原始用户不必打开终端输入密码?
谢谢你的建议!

最佳答案

我不能回答你的问题,但我要解决你的问题。
当您列出设备文件时,会看到如下内容:

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 188, 0 Apr  4 11:22 /dev/ttyACM0

所有者(root)和所有者组(dialout)都具有读写访问权限(rw-),而其他所有人都无法访问设备(---)。因此,您可以简单地将用户添加到拨号组,而不是让程序根用户访问您的系统:
$ sudo usermod -aG dialout <username>

注销并重新登录是必要的,但之后您的脚本将能够在不需要根密码的情况下读写串行接口。

10-05 18:11