受影响软件的版本:
$ rpm -q --whatprovides /usr/bin/Xorg
xorg-x11-server-Xorg-1.19.6-8.fc28.x86_64
(换句话说,这是在当前最新安装的 Fedora 28 Workstation 上)。
重现步骤:
- 使用ctrl+alt+f5,切换到文本vt 5并登录
sudo -i
Xorg :10
- 使用ctrl+alt+f6,切换到文本vt 6
- 使用ctrl+alt+f5,切换回vt 5
预期结果:我看到图形 X 会话(完全黑屏,没有鼠标光标:)。
实际结果:我看到一个文本控制台,其中包含来自 Xorg 的一些日志消息。 Xorg 进程仍在运行。
附加信息:
屏幕上显示的最后一行是
(II) AIGLX: Suspending AIGLX clients for VT switch
另外,/var/log/Xorg.10.log 显示 Xorg 未使用 systemd-logind。
(II) systemd-logind: logind integration requires -keeptty and -keeptty was not provided, disabling logind integration
答案1
您记错了 Xorg 过去的工作方式:)。请记住,X 过去在 VT7 及更高版本上启动,因为 VT1 到 VT6 是为文本控制台保留的。
对于 systemd 和登录,默认情况下 VT 是按需设置的。如果您从未切换到 VT2,则getty
和login
都不会在 VT2 上启动。相反,VT2 仍然可用......并且可以由像 Xorg 这样使用第一个免费 VT 的程序声明。
查看 Xorg 会话实际上位于 VT2 上的另一种方法是,这ps -ax
将显示它已tty2
作为其控制终端。
在旧系统中,如果您登录到文本VT并启动Xorg,它永远不会重新使用您当前的文本VT。我很困惑,因为startx
在现代系统上重新使用您的文本 VT - 但这是由于使用登录所致。通过登录,X 能够作为非特权进程启动...并且它没有切换到不同 VT 的特权。日志消息中提到的选项-keeptty
是专门为此添加的。
我建议不要试图跑Xorg -keeptty
进去sudo -i
。-keeptty
不是专门用于这种情况的。或者至少,它在我的系统上无法正常工作,似乎新旧代码开始互相争斗:) -
我得到一个屏幕,显示文本光标(下划线)不闪烁,并且“ctrl+alt+f6”不会切换到文本 vt6;我必须先使用alt+sysrq+R。 (我有在我的 Fedora 系统上启用 sysrq)。使用“ctrl+alt+f5”切换回原始 vt 然后显示我所期望的黑屏。 X进程的控制终端是tty5
,但lsof -p
显示它也已tty2
打开。切换到 VT2 后我又转回 VT5,Xorg 记录了一个错误
[ 40399.826] (II) AIGLX: Suspending AIGLX clients for VT switch
[ 40399.826] (II) AIGLX: Resuming AIGLX clients after VT switch
[ 40399.826] (EE) modeset(0): failed to set mode: Permission denied
[ 40399.826] (EE)
Fatal server error:
[ 40399.827] (EE) EnterVT failed for screen 0
[ 40399.827] (EE)
[ 40399.827] (EE)
Please consult the Fedora Project support
at http://wiki.x.org
for help.
[ 40399.827] (EE) Please also check the log file at "/var/log/Xorg.10.log" for additional information.
[ 40399.827] (EE)
[ 40399.828] (II) AIGLX: Suspending AIGLX clients for VT switch
[ 40400.029] (EE) Server terminated with error (1). Closing log file.