我无法通过 sudo python 脚本运行 Firefox,因为该脚本会将权限降低到普通用户。如果我写
# sudo python >>> 导入操作系统 >>> 导入 pwd,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 而无法执行进程。你怎么看?
答案1
您必须导出名为 DISPLAY 且值为 ':0.0' 的环境变量。这样可能会让它起作用。如果您不知道如何使用 python 导出环境变量,请在 stackoverflow 上提问。
答案2
问题是它无法访问 X 服务器上的显示,它正在运行吗?我不建议以 root 权限运行 Firefox,这就像在 Windows 机器上运行 IE 一样。
您在评论中说您是在较低的运行级别启动它。错误是因为您在 X 出现活动显示之前在较低级别启动 Firefox。延迟它的运行,直到 X 启动。
答案3
你真的不应该这么做。比如,真的。
你为什么要这么做?
答案4
我用的是 sux。
- apt-get 安装 sux
- 火狐
描述:su 的包装器,它将传输您的 X 凭证。Sux 是标准 su 命令的包装器,它将传输您的 X 凭证给目标用户。