我正在尝试编写一个作为守护进程运行并监视正在运行的 X 会话的应用程序。现在我正在努力寻找有关 X 安全模型的文档。具体来说,我正在尝试从我的守护进程连接到正在运行的 X 显示器。调用
XOpenDisplay(dispName)
不起作用,我猜是因为我的进程无权连接到此显示器。经过一番研究,看来我需要对 xauth 做点什么。
在我的测试环境中,X server 是这样启动的:
/usr/bin/X -br -nolisten tcp :0 vt7 -auth /var/run/xauth/A:0-QBEVDj
该文件包含一个条目,如下所示:
#ffff##: MIT-MAGIC-COOKIE-1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
通过~/.Xauthority
使用相同的十六进制键添加一个条目,我可以连接到 X 服务器。但是,这很困难,因为我需要以编程方式找到 X 服务器正在使用的身份验证文件(我猜它的位置会从发行版更改为发行版,并且可能从一次启动到下一次),然后查询它,然后编写一个新的授权文件。如果进程作为守护进程运行,它可能没有主目录,那么我如何知道将新条目写入何处?
理想情况下,我正在寻找的是一种绕过 xauth cookie 的需要的方法~/.Xauthority
,甚至根本不知道 cookie 是什么。我意识到这不太可能 - 如果安全模型很容易被绕过,它有什么好处?但我希望这个名单上的人可能有一些好主意。有没有办法指定我的进程是特权的,因此应该自动访问本地机器上的任何显示?