Linux

如何以程式方式測試是否可以連接到 $DISPLAY 中指定的 X 伺服器

  • August 29, 2009

這是程式和伺服器管理之間的一個中間地帶,但這似乎最終是最相關的地方。

我正在尋找一種方法來確定變數 ’ $DISPLAY’ 是否正在宣傳我們可以實際連接到的 XServer,也就是說,是否所有身份驗證和諸如此類的東西都已到位以允許執行進一步的操作。

理想情況下,我正在尋找返回 true/false 的 shell-end 工具,它可以在建構腳本中用於確定是否應該執行其中的其他測試(我無法控制)。

目前的測試只是簡單地檢查env變數“ $DISPLAY”,如果有,就會嘗試連接,當連接不通時,測試假設測試失敗,而不是簡單的顯示無法連接。

我只需要能夠做到

if [[ ! can_connect_to_X ]] ; then 
   unset DISPLAY
fi

為了阻止這些測試有嚴重的精神問題。

在理想情況下,執行此操作所需的工具應該與 X 客戶端庫本身一起提供,以免產生特殊的依賴關係,並且能夠假設如果該實用程序不存在,我們就無法連接到任何顯示器。

您可以嘗試使用 xset 命令:

if [[ ! $(xset -q) ]]; then
  # the X server is not reachable
else
  # the X server is reachable
fi

我猜有更好的解決方案。但是您始終可以使用 xclock 之類的小工具並檢查退出狀態。

if [[ ! xclock ]]; then
 exit 1
fi
pkill xclock

但是,伙計,這很醜:-)

少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

引用自:https://serverfault.com/questions/59199