如何检查DISPLAY是否有效

如何检查DISPLAY是否有效

我已经阅读了手册页 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 的程序。窗口管理器是很好的候选者,因为任何时候只能有一个(活动的)窗口管理器。您还可以从显示管理器开始跟踪进程关系(父进程、子进程)。然而,这绝不是微不足道的。也许显示管理器将这些信息存储在某个地方,但我不知道。

相关内容