![切换到第二个 X 会话会杀死第一个 X 会话](https://linux22.com/image/138853/%E5%88%87%E6%8D%A2%E5%88%B0%E7%AC%AC%E4%BA%8C%E4%B8%AA%20X%20%E4%BC%9A%E8%AF%9D%E4%BC%9A%E6%9D%80%E6%AD%BB%E7%AC%AC%E4%B8%80%E4%B8%AA%20X%20%E4%BC%9A%E8%AF%9D.png)
我在这里遇到了一个奇怪的问题。我有一个 Linux 机器,其配置如下(总结):
- 戴尔灵越 i5
- 英伟达GP108M
- GNU/Linux Debian “测试”
- xorg 服务器 2:1.20.0-3
根据我的说法Xorg.0.log
,我正在运行的驱动程序是“nouveau”:
[ 30442.522] (II) LoadModule: "nouveau"
<SNIP>
[ 30442.777] (--) NOUVEAU(G0): Chipset: "NVIDIA NV138"
我的迎宾员是 LightDM,我的 DM 是 Xfce。我尝试user2
通过以下过程开始第二个会话:
- 切换到 VT-1 ( Ctrl++ Alt)F1
- 登录方式
user2
- 跑步
startx -- :1
没有迎宾员。user2
的 Xfce 会话正在运行。我可以验证两个会话都在运行htop
。
但是,当我切换回 VT-7 ( ++ Ctrl)时,我看到该会话已终止。 VT-7 回到迎宾处。AltF7user1
来自日志的信息
每当我在 VT 之间切换时,syslog
.然而,这并不意味着任何 X 会话都已被终止。
例如,我在user1
VT-7 上启动 Xfce 会话。然后我切换到 VT-1,然后再切换回 VT-7。出现以下(汇总)错误两次在syslog
:
kernel: ------------[ cut here ]------------
kernel: nouveau 0000:01:00.0: timeout
kernel: WARNING: CPU: 0 PID: 1783 at /build/linux-0buYvw/linux-4.17.8/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.c:86 nvkm_pmu_reset+0x14c/0x160 [nouveau]
---[ cut 4 lines ]---
kernel: Hardware name: Dell Inc. Inspiron 7472/0WFX2M, BIOS 1.1.3 01/25/2018
kernel: RIP: 0010:nvkm_pmu_reset+0x14c/0x160 [nouveau]
---[ cut 9 lines ]---
kernel: Call Trace:
kernel: nvkm_pmu_init+0x16/0x40 [nouveau]
kernel: nvkm_subdev_init+0xb2/0x1f0 [nouveau]
kernel: nvkm_device_init+0x132/0x270 [nouveau]
kernel: nvkm_udevice_init+0x41/0x60 [nouveau]
kernel: nvkm_object_init+0x3d/0x180 [nouveau]
kernel: nvkm_object_init+0xa0/0x180 [nouveau]
kernel: nvkm_object_init+0xa0/0x180 [nouveau]
kernel: ? pci_restore_standard_config+0x40/0x40
kernel: nouveau_do_resume+0x28/0x140 [nouveau]
kernel: nouveau_pmops_runtime_resume+0x88/0x150 [nouveau]
kernel: pci_pm_runtime_resume+0x78/0xb0
kernel: __rpm_callback+0xc7/0x200
kernel: ? pci_restore_standard_config+0x40/0x40
kernel: rpm_callback+0x1f/0x70
kernel: ? pci_restore_standard_config+0x40/0x40
kernel: rpm_resume+0x4c4/0x790
kernel: ? do_wp_page+0x154/0x500
kernel: __pm_runtime_resume+0x47/0x70
kernel: nouveau_drm_ioctl+0x35/0xc0 [nouveau]
kernel: do_vfs_ioctl+0xa4/0x630
kernel: ? handle_mm_fault+0xdc/0x210
kernel: ksys_ioctl+0x70/0x80
kernel: __x64_sys_ioctl+0x16/0x20
kernel: do_syscall_64+0x55/0x110
kernel: entry_SYSCALL_64_after_hwframe+0x44/0xa9
----[ cut 8 lines ]---
kernel: ---[ end trace 81b347516b37c927 ]---
现在我切换到 VT-1,使用 登录user2
并运行startx -- :0
。尽管如此,还没有任何会话被终止,我可以通过 确认这一点htop
。
但,如果我现在从 VT-1 上的 X 会话切换到 VT-7 上的另一个 X 会话,这会出现在syslog
pulseaudio[3372]: XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
pulseaudio[3372]: after 17 requests (17 known processed) with 0 events remaining.
xfce4-notifyd[3565]: xfce4-notifyd: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.
at-spi-bus-launcher[1368]: XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
at-spi-bus-launcher[1368]: after 443 requests (443 known processed) with 0 events remaining.
systemd[1308]: xfce4-notifyd.service: Main process exited, code=exited, status=1/FAILURE
systemd[1308]: xfce4-notifyd.service: Failed with result 'exit-code'.
systemd[1308]: pulseaudio.service: Main process exited, code=exited, status=1/FAILURE
systemd[1308]: pulseaudio.service: Failed with result 'exit-code'.
systemd[1308]: pulseaudio.service: Service RestartSec=100ms expired, scheduling restart.
systemd[1308]: pulseaudio.service: Scheduled restart job, restart counter is at 3.
systemd[1308]: Stopped Sound Service.
systemd[1308]: Starting Sound Service...
rtkit-daemon[1552]: Successfully made thread 3898 of process 3898 (n/a) owned by '1000' high priority at nice level -11.
rtkit-daemon[1552]: Supervising 4 threads of 2 processes of 2 users.
pulseaudio[3898]: W: [pulseaudio] pid.c: Stale PID file, overwriting.
avahi-daemon[644]: Withdrawing address record for ---[ IPv6 redacted ]--- on enp2s0.
lightdm[3907]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Accounts was not provided by any .service files
VT-7 回到迎宾处。 X 服务器已重新启动(?)。
关于Xorg.0.log
,当我从 VT-1 切换到 VT-7 并且会话被终止时,会附加以下行。
[ 15945.806] (II) event7 - Power Button: device removed
[ 15945.832] (II) event10 - Video Bus: device removed
[ 15945.848] (II) event11 - Video Bus: device removed
[ 15945.877] (II) event5 - Power Button: device removed
[ 15945.908] (II) event6 - Sleep Button: device removed
[ 15945.933] (II) event1 - Microsoft Wired Keyboard 600: device removed
[ 15945.953] (II) event20 - PixArt Microsoft USB Optical Mouse: device removed
[ 15945.972] (II) event12 - Integrated Webcam: Integrated W: device removed
[ 15945.988] (II) event8 - DELL0828:00 06CB:7E7E Touchpad: device removed
[ 15946.021] (II) event3 - Intel HID events: device removed
[ 15946.044] (II) event9 - Dell WMI hotkeys: device removed
[ 15946.068] (II) event0 - AT Translated Set 2 keyboard: device removed
[ 15946.084] (II) event21 - PS/2 Generic Mouse: device removed
[ 15946.101] (II) event2 - Microsoft Wired Keyboard 600: device removed
[ 15946.116] (II) AIGLX: Suspending AIGLX clients for VT switch
[ 15946.117] (II) NOUVEAU(G0): NVLeaveVT is called.
答案1
模块中发生内核崩溃nouveau
,这会破坏 DRM 模块,进而在连接到该模块的 X 服务器处于错误状态时会破坏该模块。
升级到最新的内核和nouveau
可能的匹配模块。如果您仍然遇到相同的崩溃,请向开发人员提交错误报告nouveau
。确保包含完整的dmesg
和Xorg.*.log
.
答案2
问题在于 LightDM 不支持由 启动的多个会话startx
。
Startx
是一种运行多个会话的旧方法,但某些现代系统不必支持。有一种受支持的方法如何使用 LightDM 在另一个 VT 上登录另一个用户:用户只需打开终端窗口并运行以下命令:
dm-tool switch-to-greeter
执行此命令后,VT-7 上的前一个 Xsession 将被锁定,并在 VT-8 上打开一个新的 Xsession,以便其他用户可以登录。使用 CTRL-ALT-F7 和 CTRL-ALT-F8 在会话之间切换会照常进行(这切换不会锁定之前的 Xsession)。有关所有运行席位的信息提供了此命令:
dm-tool list-seats
如果有必要运行另一个 Xserver(除了已经运行的 Xserver 之外),您可以尝试遵循完整的答案https://askubuntu.com/a/519164/981550(来自问题https://askubuntu.com/questions/518454/what-does-startx-command-do)建议使用Xnest
(服务器内的图形服务器)。
答案3
我在 Raspberry Pi 上使用 Debian buster 时也有同样的行为,所以没有 nouveau。
当我在 tty1-6 上使用 startx 时,tty7 中由 lightdm 启动的会话将终止并返回到欢迎程序。不过,我可以使用 startx 手动启动多个会话并在它们之间切换,没有任何问题。
(抱歉,这并不是一个真正的答案,但也许它可以算作一种解决方法)