If the X server is terminated while its VT is not active, it should not change the current VT.
v2: Query current state in xf86CloseConsole using VT_GETSTATE instead of keeping track in xf86VTEnter/xf86VTLeave/etc. --- Changing the VT in that situation serves no purpose and can be confusing. For example when a user's graphical session is terminated while other user is using the computer, it would switch the VT he is working on. hw/xfree86/os-support/linux/lnx_init.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c index 039dc4a4d..358d89f0f 100644 --- a/hw/xfree86/os-support/linux/lnx_init.c +++ b/hw/xfree86/os-support/linux/lnx_init.c @@ -299,6 +299,7 @@ void xf86CloseConsole(void) { struct vt_mode VT; + struct vt_stat vts; int ret; if (xf86Info.ShareVTs) { @@ -336,10 +337,19 @@ xf86CloseConsole(void) if (xf86Info.autoVTSwitch) { /* - * Perform a switch back to the active VT when we were started - */ + * Perform a switch back to the active VT when we were started if our + * vt is active now. + */ if (activeVT >= 0) { - switch_to(activeVT, "xf86CloseConsole"); + SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETSTATE, &vts)); + if (ret < 0) { + xf86Msg(X_WARNING, "xf86OpenConsole: VT_GETSTATE failed: %s\n", + strerror(errno)); + } else { + if (vts.v_active == xf86Info.vtno) { + switch_to(activeVT, "xf86CloseConsole"); + } + } activeVT = -1; } } -- 2.16.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel