У меня есть скрипт, который будет выполняться incrond, когда он увидит изменения в директории часов. В сценарии доступно только несколько переменных env, остальные очищаются с помощью incrond. Таким образом, это становится проблемой, когда вы хотите выполнить что-то, что зависит от X-переменных, таких как $ DISPLAY. Поэтому мне интересно, возможно ли получить var $ DISPLAY изнутри скрипта, не запрашивая пользовательскую оболочку
Для получения переменной среды рабочего процесса необходимо посмотреть environ
файл в proc
файловая система. В Вашем случае это:
user@host:~$ strings /proc/$(pidof -s Xorg)/environ
XORGCONFIG=/etc/X11/xorg.conf
UPSTART_INSTANCE=
LANG=de_CH.UTF-8
DISPLAY==:0
TERM=linux
PWD=/
UPSTART_JOB=gdm
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
используя systemd login manager (немного медленно):
#!/bin/bash
user=bac0n
# Cannot find how multiple session is presented.
session=($(loginctl show-user --value -p Sessions $user))
# Get display from the first array element.
display=$(loginctl show-session --value -p Display $session)
echo $display