1

Мне нужно дать команду, как

Xvfb:6-экран 0 1024x768x24

Где 6 может быть номером дисплея. Теперь Xvfb уже может использовать этот дисплей, так как я могу получить первый номер дисплея, который не используется?

2 ответа2

1

xvfb-run имеет флаг --auto-servernum который работает путем поиска файлов блокировки X в /tmp .

Выделенный в одну строку, чтобы вы могли использовать псевдоним в вашем .bashrc, это выглядит так:

i=0; while [ -f /tmp/.X$i-lock ]; do i=$(($i + 1)); done; echo $i

Если вы просто пытаетесь запустить программу с установленным на Xvfb дисплеем, я бы просто использовал xvfb-run.

0

Возможно, есть более простой способ, но я бы написал скрипт, который запрашивает отображение с помощью xdpyinfo.

Есть почти 3 случая:

  1. Дисплей существует, и ваша оболочка имеет доступ к дисплею. xdpyinfo выложит много информации.

  2. Дисплей существует, а ваша оболочка не имеет доступа к дисплею. xdpyinfo выдаст ошибку доступа и ошибку невозможности открыть, например так:
    Invalid MIT-MAGIC-COOKIE-1 keyxdpyinfo: unable to open display ":0".

  3. Дисплей не существует. xdpyinfo выдаст ошибку, которая не может быть открыта:
    xdpyinfo: unable to open display ":1".

Сценарий будет выглядеть примерно так:

#/bin/bash
CHECKDISPLAY=0
DONE="no"

while [ "$DONE" == "no" ]
do
   out=$(xdpyinfo -display :$CHECKDISPLAY 2>&1)
   if [[ "$out" == name* ]] || [[ "$out" == Invalid* ]]
   then
      # command succeeded; or failed with access error;  display exists
      (( CHECKDISPLAY+=1 ))
   else
      # display doesn't exist
      DONE="yes"
   fi
done

echo "first available display is :$CHECKDISPLAY"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .