Quase todas as páginas que encontrei estão prestes a iniciar automaticamente o Xorg após o login sem explicação, ~/.bash_profile
por exemplo:
if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
exec xinit
fi
Suponho que $XDG_VTNR
poderia ser uma variável para obter o número TTY atual, porém, já existe um comando chamado tty
, que pode atender ao mesmo propósito.
Minhas perguntas:
- O que é
$XDG_VTNR
? Onde e quando está sendo definido? - Onde posso encontrar a documentação oficial sobre esta variável?
tty
é um comando embutido enquanto$XDG_VTNR
é fornecido pelo Xorg, por que as pessoas escolhem usar$XDG_VTNR
em vez de embutidotty
?
Ele é definido pelo
pam_systemd
módulo PAM e é definido apenas em máquinas que estão usando o systemd, o que significa que você não deve confiar nele em seus scripts, a menos que queira torná-los dependentes do systemd.Em sistemas que estão usando systemd,
$XDG_VTNR
será definido tanto em sessões gráficas (porlightdm
,gdm
, etc) quanto em sessões de modo de texto (por/bin/login
).Na página de
pam_systemd(8)
manual.1)
tty
é um programa autônomo, não embutido, e$XDG_VTNR
não é fornecido pelo Xorg.2) Porque são coisas completamente diferentes. Conforme claramente indicado em sua página de manual,
tty(1)
ele informará o nome do terminal conectado à sua entrada padrão, não o nome do terminal virtual em que sua sessão de GUI ou semelhante pode estar sendo executada[1]. Considere isto:[1] para o qual
XDG_VTNR
também não é um indicador confiável.XDG_VTNR
é uma variável ambiental pouco documentada. Systemd usa/configura. Vejasystemd.exec
epam_systemd
man pages. Alguns gerenciadores de exibição também o usam/configuram. Alguns scripts de inicialização do X11 usam/configuram.De
systemd/pam_systemd.c
:Você pode iniciar uma sessão X11 em um terminal virtual (VT), não apenas em seu console. A
XDG_VTNR
variável especifica o número do VT.O
DISPLAY
teste adicional é necessário, pois o trecho de código pode ser executado em logins gráficos e não gráficos. ComoXDG_VTNR
será definido com o mesmo valor nos shells iniciados na sessão do X11 (por exemplo, terminais), é necessário evitar que eles tentem iniciar o X11.O
exec
comando substitui o shell de login pela sessão X11. Isso significa que quando a sessão X11 terminar, você será desconectado.