这是编程和服务器管理之间的中间地带,但这似乎最终是与它最相关的地方。
我正在寻找一种方法来确定变量“ $DISPLAY
”是否正在宣传我们可以实际连接的 XServer,也就是说,是否已完成所有身份验证和其他操作以允许执行进一步的操作。
我理想中寻找的是返回 true/false 的 shell-end 工具,它可以在构建脚本中用于确定是否应该运行其中的其他测试(我无法控制)。
目前的测试只是检查env
变量“ $DISPLAY
”,如果存在,就会尝试连接,当连接不起作用时,测试会假定测试失败,而不仅仅是显示器无法连接。
我只需要能够做到
if [[ ! can_connect_to_X ]] ; then
unset DISPLAY
fi
为了阻止这些测试产生严重的精神问题。
在理想情况下,执行此操作所需的工具应该由 X Client 库本身提供,以免产生特殊依赖性,并且能够假设如果没有该实用程序,我们就无法连接到任何显示器。
答案1
您可以尝试使用 xset 命令:
if [[ ! $(xset -q) ]]; then
# the X server is not reachable
else
# the X server is reachable
fi
答案2
我猜有更好的解决方案。但你总是可以使用像 xclock 这样的小工具并检查退出状态。
if [[ ! xclock ]]; then
exit 1
fi
pkill xclock
但是,是丑陋的 :-)
Less Hacky,将以下内容放入 checkX.c 中:
#include <X11/Xlib.h>
#include <stdio.h>
int main()
{
Display *display;
if( ! (display=XOpenDisplay(NULL) ) ) {
return(1);
}
return 0;
}
然后:
gcc -lX11 checkX.c -o checkX
chmod +x checkX
最后:
if ./checkX; then
echo "We are good to go!"
fi
答案3
这是一种可行的方法,但不确定它有多好。
x_works(){
# If there is no xdpyinfo
# Bash will return 127
# If X cant connect, it returns 1
# If X can connect, it returns 0
xdpyinfo 1>/dev/null 2>&1
WORKS="$?"
return $WORKS
}
if x_works; then
...
这出现正在工作。