我已经阅读了手册页 X(7) 并搜索了这个问题,但找不到解决方案。
DISPLAY=:0
如果环境仍然是有效的显示,如何检查长时间运行的进程? (用户可能同时注销,但进程仍然存在)
锦上添花的是检查 DISPLAY 是否仍然属于<USER>
答案1
也许是这样的:
if sudo -Hu "$user" xdpyinfo -display "$DISPLAY" > /dev/null 2>&1; then
echo "user $user can connect to display $DISPLAY"
else
echo "user $user cannot connect to display $DISPLAY"
fi
如果您没有xdpyinfo
,您可以尝试任何在 X 服务器上不显示任何内容的标准简单 X11 实用程序(其 stdout 和 stderr 重定向到 /dev/null ,如上所示):
xlsatoms -name PRIMARY
xprop -notype -root CUT_BUFFER0
xwininfo -root
答案2
如果:0
曾经是有效显示,则该进程(即提供该进程的 xserver)将归 root 所有。无论您如何理解“有效”。
如果您想知道是否可以连接到 xserver,我建议使用xlsclients
连接到该显示器。如果该命令可以连接,则返回 0,如果不能连接,则返回 1。
X 的工作方式不是一个用户一次连接到一台 xserver。要将用户绑定到 xsessions,您必须查看连接到 xserver 的程序。窗口管理器是很好的候选者,因为任何时候只能有一个(活动的)窗口管理器。您还可以从显示管理器开始跟踪进程关系(父进程、子进程)。然而,这绝不是微不足道的。也许显示管理器将这些信息存储在某个地方,但我不知道。