Cos'è
$XDG_VTNR? Dove e quando viene impostato?
È impostato da pam_systemd modulo PAM, ed è impostato solo su macchine che utilizzano systemd, il che significa che non dovresti non fai affidamento su di esso nei tuoi script, a meno che tu non voglia farli dipendere da systemd.
Sui sistemi che utilizzano systemd, $XDG_VTNR sarà impostato sia in grafica (da lightdm , gdm , ecc.) e nelle sessioni in modalità testo (tramite /bin/login ).
Dove posso trovare la documentazione ufficiale su questa variabile?
Nel pam_systemd(8) manpage.
ttyè un comando integrato mentre$XDG_VTNRè fornito da Xorg, perché le persone scelgono di usare$XDG_VTNRinvece delttyintegrato ?
1) tty è un programma autonomo, non integrato, e $XDG_VTNR non è fornito da Xorg.
2) Perché sono cose completamente diverse. Come chiaramente indicato nella sua manpage, tty(1) ti dirà il nome del terminale connesso al suo input standard, non il nome del terminale virtuale su cui potrebbe essere in esecuzione la tua sessione GUI o simili[1]. Considera questo:
$ script -q /dev/null
$ tty
/dev/pts/5
$ script -q /dev/null
$ tty
/dev/pts/6
$ tty </dev/zero
not a tty
[1] per cui XDG_VTNR non è neanche un indicatore affidabile.