gpt4 book ai didi

python - 如何,在 Python PYGtk GUI 中,只使用一次 pkexec 然后成为特定命令的 root

转载 作者:行者123 更新时间:2023-12-01 15:25:16 70 4
gpt4 key购买 nike

我正在尝试用 Python 编写一些代码,使 Apache 停止并启动一个 GUI 应用程序。一切正常,我的意思是我使用 subprocess.Popen 执行命令(服务启动或服务停止)并调用 pkexec 作为第一个参数,以便提示用户并可以启动或停止 apache

问题是,每次用户单击启动或停止 apache 时都会运行 pkexec,这是很正常的。我以为在第一次识别之后,用户将在我的应用程序中以 root 用户身份运行,但他不是,我正在 pkexec 命令前后进行测试...

您认为我可以找到其他解决方案吗?我应该永远坚持使用密码对话框吗

最佳答案

我遇到了和你一样的问题:我的 python GTK 应用程序需要以 root 身份运行命令,但是使用 pkexec 让它每次都询问 root 密码,这真的很烦人。

我看到有两种方法可以解决这个“问题”:

1。使用 pkexec

运行您的应用

该解决方案更适合您的情况。

编写一个 shell 脚本,使用 pkexec 运行您的 python 应用程序。使用该解决方案,用户只被询问一次,并且您的应用程序以根用户身份运行,因此它不再需要使用 pkexec,并且可以运行任何命令。

这样做的缺点是您可能会在一段时间后再次询问密码,以防未经授权的人访问计算机。

2。拆分您的应用

我的用例是一个安装程序,它通过下载、编译和安装软件来简化用户的生活。

以前的解决方案可行,但我更愿意让用户运行安装程序,并在实际点击“安装”按钮时要求输入密码。

解决方案是将应用分成两部分:

  • 图形用户界面
  • “引擎”或命令执行程序进程

GUI 将在需要启动时使用 pkexec 运行“引擎”(在您的情况下,它只需要在第一次启动时使用 pkexec 运行)用户单击“开始/停止”按钮),以便 GUI 以用户身份运行,“引擎”以 root 身份运行。

现在你需要一个进程间通信,这样“引擎”就可以向 GUI 报告,而 GUI 可以向“引擎”发送命令。为此,最好的选择是使用此答案中所示的管道:https://stackoverflow.com/a/3806342/1996540 .

更新

我终于在 this project 中实现了我建议的答案这样您就可以查看一个工作示例。

关于python - 如何,在 Python PYGtk GUI 中,只使用一次 pkexec 然后成为特定命令的 root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31516577/

70 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com