for p in $(pgrep -t $(cat /sys/class/tty/tty0/active)); do d=$(awk -v RS='\0' -F= '$1=="DISPLAY" {print $2}' /proc/$p/environ 2>/dev/null); [[ -n $d ]] && break; done; echo $d
Эта команда позволяет узнать активный номер сервера Xorg display снаружи, то есть из другого процесса или сценария.
Описывая детали выполнения команды, она последовательно выполняет следующие действия:
1. pgrep -t $(cat /sys/class/tty/tty0/active)
— находит идентификаторы процессов, связанных с активным терминалом (tty0).
2. $(...)
— выражение возвращает результат выполнения команды внутри скобок (идентификаторы процессов).
3. for p in $(...)
— цикл, выполняющийся для каждого идентификатора процесса, полученного в предыдущем шаге.
4. awk -v rs='\0' -f= '$1=="display" {print $2}' /proc/$p/environ 2>/dev/null
— для каждого процесса, считывает переменную окружения display
из файла /proc//environ
и выводит ее значение.
— awk
— используется для обработки текстовых данных.
— -v rs='\0'
— определяет разделитель записей в awk как символ с кодом 0, что позволяет обрабатывать значения переменных окружения, разделенных символом NULL.
— '$1=="display" {print $2}'
— проверяет, является ли первое поле строки переменной окружения display и, если это так, выводит второе поле (значение).
— /proc/$p/environ
— путь к файлу, содержащему переменные окружения для каждого процесса.
— 2>/dev/null
— перенаправляет сообщения об ошибках в никуда, чтобы предотвратить их отображение в выводе.
5. [[ -n $d ]] && break
— проверяет, имеет ли переменная $d
ненулевую длину (есть ли значение), и если это так, останавливает цикл.
6. echo $d
— выводит значение переменной $d
, которое является активным номером сервера Xorg display.
Эта команда полезна для автоматизации процесса определения активного номера сервера Xorg display извне, что может быть полезно, например, при написании скрипта, требующего взаимодействия с графическими приложениями, работающими на сервере Xorg display.
Альтернативным способом может быть использование утилиты xdpyinfo
, которая также позволяет получить информацию о сервере Xorg display, но в более прямой и удобочитаемой форме.