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.