几乎我发现的每个页面都将在登录后自动启动 Xorg 而没有解释,~/.bash_profile
例如:
if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
exec xinit
fi
我想$XDG_VTNR
可能是获取当前 TTY 号码的变量,但是,已经有一个名为 的命令tty
,它可以达到相同的目的。
我的问题:
- 是什么
$XDG_VTNR
?它是在何时何地设置的? - 我在哪里可以找到有关此变量的官方文档?
tty
是 Xorg 提供的内置命令$XDG_VTNR
,为什么人们选择使用$XDG_VTNR
而不是 built-intty
?
它由
pam_systemd
PAM 模块设置,并且仅在使用 systemd 的机器上设置,这意味着您不应在脚本中依赖它,除非您想让它们依赖于 systemd。在使用 systemd 的系统上,
$XDG_VTNR
将在图形(bylightdm
、gdm
等)和文本模式会话(by/bin/login
)中设置。在
pam_systemd(8)
手册页中。1)
tty
是一个独立的程序,不是内置的,并且$XDG_VTNR
不是由 Xorg 提供的。2)因为它们是完全不同的东西。正如其手册页中明确说明的那样,
tty(1)
它将告诉您连接到其标准输入的终端的名称,而不是您的 GUI 会话或可能正在运行的虚拟终端的名称 [1]。考虑一下:[1] 这
XDG_VTNR
也不是一个可靠的指标。XDG_VTNR
是一个记录不充分的环境变量。Systemd 使用/设置它。请参阅systemd.exec
手册pam_systemd
页。一些显示管理器也使用/设置它。一些 X11 启动脚本使用/设置它。来自
systemd/pam_systemd.c
:您可以在虚拟终端 (VT) 中启动 X11 会话,而不仅仅是在控制台中。该
XDG_VTNR
变量指定 VT 编号。额外的
DISPLAY
测试是必要的,因为代码片段可以在图形和非图形登录上执行。由于XDG_VTNR
将在 X11 会话中启动的 shell(例如终端)中设置为相同的值,因此有必要阻止它们尝试启动 X11。该
exec
命令将登录 shell 替换为 X11 会话。这意味着当 X11 会话终止时,您将被注销。