Это что-то среднее между программированием и администратором сервера, но, в конечном счете, это наиболее подходящее место для него.
Я ищу способ определить, является ли переменная$DISPLAY
'рекламирует XServer, к которому мы действительно можем подключиться, то есть, если вся проверка подлинности и все такое, чтобы разрешить выполнение дальнейших действий.
В идеале я ищу какой-нибудь инструмент для оболочки, который возвращает true / false, который можно использовать в сценарии сборки, чтобы определить, должны ли выполняться другие тесты в нем (которые я не контролирую) или нет.
В настоящее время тесты просто проверяют env
переменная "$DISPLAY
", и если он есть, попытается подключиться, а когда подключение не работает, тесты предполагают сбой теста, а не просто дисплей не подключается.
Мне просто нужно уметь делать
if [[ ! can_connect_to_X ]] ; then
unset DISPLAY
fi
Для того, чтобы у этих тестов не было серьезных психических проблем.
В идеальной ситуации инструмент, необходимый для этого, должен поставляться с самими библиотеками X Client, чтобы не создавать особых зависимостей и иметь возможность предположить, что если утилиты нет, мы не можем подключиться ни к какому дисплею.
Вы можете попробовать с помощью команды 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
Но человек, что является некрасиво :-)
Меньше хаки, поместите в 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
Вот возможный способ WayToDoIt, но не уверен, насколько он хорош.
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
...
это появляется работать.