Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何获得GUI会话(linux)的根访问权限_Python_Linux_Root_Sudo_Privileges - Fatal编程技术网

Python:如何获得GUI会话(linux)的根访问权限

Python:如何获得GUI会话(linux)的根访问权限,python,linux,root,sudo,privileges,Python,Linux,Root,Sudo,Privileges,我正在尝试编写一个GUI,它需要root用户才能执行某些操作(它在过程的不同阶段修改和访问系统文件(请参阅)。现在,当使用pkexec、kdesudo或gksudo执行多个操作时,这些操作不会授予“会话”权限root访问,意味着每次需要root访问时,都需要一个新的弹出窗口,要求用户输入root密码 有没有办法获得该程序在会话中的root访问权限?我知道,在终端中,使用sudo,访问权限会被授予特定的时间(我不知道多长时间),但不知道背后的机制,也不知道如何在GUI中复制它 我不希望整个GUI在

我正在尝试编写一个GUI,它需要root用户才能执行某些操作(它在过程的不同阶段修改和访问系统文件(请参阅)。现在,当使用
pkexec
kdesudo
gksudo
执行多个操作时,这些操作不会授予“会话”权限root访问,意味着每次需要root访问时,都需要一个新的弹出窗口,要求用户输入root密码

有没有办法获得该程序在会话中的root访问权限?我知道,在终端中,使用
sudo
,访问权限会被授予特定的时间(我不知道多长时间),但不知道背后的机制,也不知道如何在GUI中复制它

我不希望整个GUI在根目录下运行。我知道该软件包,但它使调试变得很困难,因为它不再易于单步执行代码。此外,虚拟环境似乎不起作用(环境变量已清理?)

我的直觉是创建一个子根进程,它等待来自父进程的stdin并执行从父进程传递给它的命令

parser=argparse.ArgumentParser()
subparsers=parser.add_subparsers(dest=“command”)
#添加子parser及其参数
尽管如此:
输入线=输入()
尝试:
args=parser.parse_args(shlex(输入线))
如果args.command==“some_command”:
某些命令(*args)
elif args.command==“其他命令”:
其他_命令(*args)
例外情况除外:
处理异常(异常)
#怎么处理出口?

但我不知道这有多安全。子进程除了它知道的命令之外,无法执行任何命令,但仍然…

一个合理合理的方法是使用
NOPASSWD
选项将您知道需要运行的所有命令添加到
/etc/sudoers.d/
中的文件中。这就是您不断收到promp的原因ted的意思是,您确实为每个命令生成了一个新的shell,默认情况下,超时不是每个用户而是每个进程。您还可以修改
tty_tickets
timestamp_timeout
…我查看了
/etc/sudoers.d/
,它可能会导致
pip安装--user
安装出现问题。
kdesu
似乎每次调用时都会创建一个新会话,即使是在终端中完成。选项二呢?可行吗?这些需要修改系统文件,我希望这能在一个独立的解决方案上工作,这不会对用户产生意外的副作用-修改系统配置以使其正常工作将是一个重要的方面如果没有这些副作用,这可能是不可能的