получить первый неиспользуемый номер

1252
uswaretech

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

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

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

1

2 ответа на вопрос

1
Conley Owens

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
quack quixote

Возможно, есть более простой способ, но я бы написал скрипт, который запрашивает дисплеи с помощью 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" 

Похожие вопросы