为什么 VT 切换对于以 root 身份运行的 Xorg 不起作用?

为什么 VT 切换对于以 root 身份运行的 Xorg 不起作用?

受影响软件的版本:

$ rpm -q --whatprovides /usr/bin/Xorg
xorg-x11-server-Xorg-1.19.6-8.fc28.x86_64

(换句话说,这是在当前最新安装的 Fedora 28 Workstation 上)。

重现步骤:

  1. 使用ctrl+alt+f5,切换到文本vt 5并登录
  2. sudo -i
  3. Xorg :10
  4. 使用ctrl+alt+f6,切换到文本vt 6
  5. 使用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,则gettylogin都不会在 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.

相关内容