Was ist $XDG_VTNR ? Wo und wann wird es gesetzt?
Es wird durch die pam_systemd gesetzt PAM-Modul und wird nur auf Rechnern gesetzt, die systemd verwenden, was bedeutet, dass Sie nicht sollten Verlassen Sie sich in Ihren Skripten darauf, es sei denn, Sie möchten sie von systemd abhängig machen.
Auf Systemen, die systemd verwenden, $XDG_VTNR werden sowohl grafisch (durch lightdm , gdm , usw.) und in Sitzungen im Textmodus (durch /bin/login ).
Wo finde ich die offizielle Dokumentation zu dieser Variable?
Im pam_systemd(8) Handbuchseite.
tty ist ein eingebauter Befehl, während $XDG_VTNR wird von Xorg bereitgestellt, warum sich Leute für $XDG_VTNR entscheiden statt eingebautem tty ?
1) tty ist ein eigenständiges Programm, kein eingebautes, und $XDG_VTNR wird nicht von Xorg bereitgestellt.
2) Weil es völlig verschiedene Dinge sind. Wie in seiner Manpage deutlich angegeben, tty(1) teilt Ihnen den Namen des Terminals mit, das mit seiner Standardeingabe verbunden ist, nicht den Namen des virtuellen Terminals, auf dem Ihre GUI-Sitzung oder dergleichen möglicherweise ausgeführt wird[1]. Bedenken Sie Folgendes:
$ script -q /dev/null
$ tty
/dev/pts/5
$ script -q /dev/null
$ tty
/dev/pts/6
$ tty </dev/zero
not a tty
[1] für die XDG_VTNR ist auch kein zuverlässiger Indikator.