我有一个正在运行的守护程序,该守护程序在root上运行,并通过logind
监督登录和注销。登录后,守护程序会在该会话中生成一个托盘图标。它将设置变量DISPLAY
,XAUTHORITY
,XDG_SESSION_PATH
,XDG_SEAT_PATH
。
出现托盘图标,问题在于其中一项操作将执行特权操作。为此,我创建了一个polkit操作,并尝试使用pkexec
运行该工具。为此,我在/usr/bin
中创建了一个Shebang脚本,它将执行pkexec
部分。从登录的终端运行时,它会生成polkit代理(在我的情况下为MATE代理),并且所有工作正常。当派生我的生成托盘图标时,pkexec将找不到该代理,并将尝试使用基于内部文本的tty代理来实现。对于GUI应用程序,这是不幸的,因为没有终端可以输入文本。
从根守护程序派生GUI应用程序以确保正确找到代理和会话信息的正确环境是什么合适的方法? polkit必须满足什么条件才能找到正确的代理?
编辑:我现在尝试的是在/ proc中搜索具有相同会话ID和相同座椅路径的另一个进程,并克隆整个环境。没有成功。