Мне нужно дать команду, как
Xvfb:6-экран 0 1024x768x24
Где 6 может быть номером дисплея. Теперь Xvfb уже может использовать этот дисплей, так как я могу получить первый номер дисплея, который не используется?
Мне нужно дать команду, как
Xvfb:6-экран 0 1024x768x24
Где 6 может быть номером дисплея. Теперь Xvfb уже может использовать этот дисплей, так как я могу получить первый номер дисплея, который не используется?
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.
Возможно, есть более простой способ, но я бы написал скрипт, который запрашивает отображение с помощью xdpyinfo.
Есть почти 3 случая:
Дисплей существует, и ваша оболочка имеет доступ к дисплею. xdpyinfo выложит много информации.
Дисплей существует, а ваша оболочка не имеет доступа к дисплею. xdpyinfo выдаст ошибку доступа и ошибку невозможности открыть, например так:
Invalid MIT-MAGIC-COOKIE-1 keyxdpyinfo: unable to open display ":0".
Дисплей не существует. 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"