我无法从 sudoed python 脚本运行 firefox,该脚本将权限授予普通用户。如果我写
# 须藤蟒蛇 >>> 导入操作系统 >>> 导入密码,grp >>> uid = pwd.getpwnam('norby')[2] >>> gid = grp.getgrnam('norby')[2] >>> os.setegid(gid) >>> os.seteuid(uid) >>> 导入浏览器 >>> webbrowser.get('firefox').open('www.google.it') 真的 >>> # 它返回 true 但不起作用 >>> 从子流程导入 Popen,PIPE >>> p = Popen('firefox www.google.it', shell=True,stdout=PIPE,stderr=PIPE) >>> # 不执行命令
我认为这不是 python 问题,而是 firefox/iceweasel/debian 配置问题。也许firefox只读取UID而不是EUID,并且不执行进程,因为UID等于0。你怎么看?
问题是它无法访问 X 服务器上的显示,它正在运行吗?我不建议使用 root 权限运行 firefox,这就像在 windows 机器上运行 IE 一样。
您在评论中说您正在以较低的运行级别启动它。该错误是因为您在 X 出现活动显示之前在该较低级别启动了 firefox。延迟它的运行直到 X 启动。
您必须导出名为 DISPLAY 且值为 ':0.0' 的环境变量。这可能使它起作用。如果您不知道如何使用 python 导出环境变量,请咨询 stackoverflow。
你真的真的不应该这样做。就像,真的。
你为什么要这么做?
我猜,你必须指定一个 X 服务器。恐怕我不知道如何在python中实际做到这一点:-)
首先,您通常希望使用
gksu
orgksudo
或sux
获得 X 应用程序的 root 权限。其次,你为什么sudo
在 Debian 上使用?(我sudo
的意思是甚至启用?它不是默认情况下在 Debian 上,而不是 Ubuntu 或 OS X。)第三,我想不出任何实际需要以 root 权限运行浏览器的情况。在某些情况下,您需要以 root 身份使用 gui 应用程序 - 例如,您想要编辑系统文件(例如/etc/network/interfaces),并且您最喜欢使用
gedit
. 这不是一件不合理的事情。但是您可能希望使用gksu
或类似的实用程序来转移权限。我用苏。