Em distribuições com o sistema init systemd da saída de
systemctl --user show-environment
mostra DISPLAY e XAUTHORITY . Isso é pelo menos verdadeiro para meu sistema debian 9 com systemd e gdm3 como gerenciador de exibição.
Pitfall: Depois de executar startx xterm -- :2 vt2 em tty2 systemctl me deu DISPLAY e XAUTHORITY da nova exibição; minha exibição principal :0 não era mais observável desta maneira.
Outras abordagens:
Pelo menos para XAUTHORITY , é mais confiável analisar a saída de ps aux | grep Xorg e procurar a opção -auth . No meu caso, ele está localizado em /run/user/1000/gdm/Xauthority e não em ~/.Xauthority .
Armadilhas:
- Pode haver mais de uma instância do Xorg.
- Em vez do Xorg, pode haver
Xwayland .
- Em vez do Xorg, pode haver
Xvfb ou outra coisa.
- Pode ser uma sessão remota sem o Xorg local.
Normalmente, os comandos Xorg também contêm o número de exibição. Infelizmente, o meu não:
/usr/lib/xorg/Xorg vt1 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
-displayfd 3 de alguma forma aponta para DISPLAY . Se estiver procurando como root em /proc/$(pidof Xorg)/fd/3 , localizo
lrwx------ 1 root root 64 Mär 8 22:45 3 -> socket:[21437]
No entanto, não sei como procurar o soquete 21437 . Tenho certeza de que aponta para /tmp/.X11-unix/X0 . Uma abordagem é lsof +E -aUc Xorg que mostra uma saída interessante: muitas conexões contendo @/tmp/.X11-unix/X0 e uma dbus conexão.
Um pouco sujo: A pasta fd também me mostra
l-wx------ 1 root root 64 Mär 8 22:45 5 -> /var/log/Xorg.0.log
Xorg.0.log é uma indicação clara para exibição :0 .
Outra abordagem: notify-send parece reunir DISPLAY e XAUTHORITY com alguma dbus magic. Mas eu não tenho ideia de como. Essa pode ser a maneira mais limpa e mais portátil, se pelo menos um daemon dbus estiver rodando.