强制 XWindows 身份验证

强制 XWindows 身份验证

我使用 init.d 启动一个进程,并希望能够创建 GUI 应用程序作为子进程。

由于该过程启动较早,环境变量 DISPLAY 和 XAUTHORITY 尚未设置。

我只需将 DISPLAY 设置为 :0.0 即可,这样就没问题了。但是,我在设置 XAUTHORITY 变量时遇到了更多麻烦。

我可以将 XAUTHORITY 设置为指向用户主目录中的 .XAuthority 文件 - 但该文件不存在。相反,当正常登录到 X-Session 时,XAUTHORITY 变量被设置为 /var/run/gdm/ 下的某个文件,并且具有看似随机的文件名称。

作为 root,我可以为自己生成一个新的 cookie 吗?

答案1

您无法生成新的 cookie:Cookie 是服务器启动时被告知的“秘密密码”,所有客户端都需要知道该密码才能进行连接。

我认为你可以用类似的东西得到你想要的东西

DISPLAY=:0
XAUTHORITY=$(ps auxw | sed -ne "s|.*/[X].* $DISPLAY.*-auth \\([^ ]*\\).*|\\1|p")
export DISPLAY XAUTHORITY
...

该方法通过查找 X 服务器进程并尝试找到-auth传递给它的参数来实现,因为该参数应该是一个包含 XAUTH 设置的文件。请注意,此文件通常(根据我的经验)由 root 拥有,其他用户无法读取它,因此如果您想运行不以 root 身份运行的 X 应用程序,则首先需要将此文件(以 root 身份)复制到其他地方并更改该副本的所有者(或者更可能的情况是,您需要~/.Xauthority使用xauth add或将此文件的内容传输到用户文件中xauth merge)。

查找存储 magic cookie 的文件的另一种方法是查看已登录用户的一些进程的环境(例如进程gnome-shell)。例如,ps您应该能够找到进程的进程 ID gnome-shell(或我们期望作为 X 客户端运行的其他用户进程),然后查看/proc/<process-id>/environment其 XAUTHORITY 环境变量的值。

相关内容