Как программно найти текущее значение ДИСПЛЕЯ, когда ДИСПЛЕЙ сброшен? (для использования в crontab)

У меня есть сценарий, который работает через крон для изменения обоев для рабочего стола. Я могу заставить это работать путем экспорта переменной ДИСПЛЕЯ.

Но проблема, я обеспокоен этим, что сценарий должен работать над всеми системами. Как найти значение ДИСПЛЕЯ установленным X-сервером, не используя $DISPLAY?

Таким образом, как я могу найти правильное значение для DISPLAY программно. Я могу заставить это работать только когда DISPLAY=:1. Установка его к ":0" заставляет сценарий выйти с

No protocol specified
Cannot open display.
6
задан 11 March 2016 в 08:23

2 ответа

Вы не можете наверняка. Необходимо сделать предположения.

Притворяются, что Вы cron, и Вы сталкиваетесь с худшим вариантом развития событий за секунду: существуют многочисленные пользователи, зарегистрированные, и каждый пользователь выполняет приблизительно X сессий. Необходимо будет предположить пользователя (достаточно легкий, мы выполняем их crontab), и одна из X сессий того пользователя.

, Если мы хотим принять, пользователь работает один и только один X сессий от tty, и получите ту сессию $DISPLAY значение, которое мы можем использовать w:

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     tty1                      16:32    7:15   0.21s  0.19s -zsh
user     tty2     :1               15:52   48:13   2:17   0.08s /sbin/upstart
user     pts/3    :1               16:19    0.00s  0.66s  0.00s w

, Например, здесь я зарегистрирован на tty1 на tty2 (куда я выполняю X сессий) и на pts/3 (терминал, от которого я выполняю команду).

С небольшим количеством парсинга:

% w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}'
:1

Так, принимая все вышеупомянутое:

0 0 * * * DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}') command

сделает cron, выполняются command с $DISPLAY набор к первому X сессий, работающих в tty's $DISPLAY значение, найденное для пользователя.

6
ответ дан 23 November 2019 в 07:43

Для более детального обсуждения обратитесь к https://unix.stackexchange.com/questions/17255/is-there-a-command-to-list-all-open-displays-on-a-machine

, я просто перечислю релевантную информацию из того ответа здесь:

, кажется, существует два простых способа найти экземпляры X-сервера, работающие на Вашей системе.

  • w:
    Эти w списки команд все открытые дисплеи. Можно затем использовать awk для отфильтровывания информации, в которой Вы нуждаетесь. Значения под FROM являются значениями, соответствующими DISPLAY.

    ashhar@xenon:[/tmp/.X11-unix]                  
1
ответ дан 23 November 2019 в 07:43

Другие вопросы по тегам:

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