If the X server is terminated while its VT is not active, it should not change the current VT. --- 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/common/xf86Events.c | 4 ++++ hw/xfree86/common/xf86Globals.c | 1 + hw/xfree86/common/xf86Privstr.h | 1 + hw/xfree86/os-support/linux/lnx_init.c | 4 +++- hw/xfree86/os-support/linux/systemd-logind.c | 5 ++++- 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index 80676c669..1e52c4f12 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -405,6 +405,8 @@ xf86VTLeave(void) if (xorgHWAccess) xf86DisableIO(); + xf86Info.hasVT = FALSE; + xf86UpdateHasVTProperty(FALSE); return; @@ -488,6 +490,8 @@ xf86VTEnter(void) xf86platformVTProbe(); #endif + xf86Info.hasVT = TRUE; + xf86UpdateHasVTProperty(TRUE); input_unlock(); diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c index 193f17aec..8bd8f8165 100644 --- a/hw/xfree86/common/xf86Globals.c +++ b/hw/xfree86/common/xf86Globals.c @@ -106,6 +106,7 @@ xf86InfoRec xf86Info = { .dontVTSwitch = FALSE, .autoVTSwitch = TRUE, .ShareVTs = FALSE, + .hasVT = FALSE, .dontZap = FALSE, .dontZoom = FALSE, .currentScreen = NULL, diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h index 55d1b2455..e4d827dee 100644 --- a/hw/xfree86/common/xf86Privstr.h +++ b/hw/xfree86/common/xf86Privstr.h @@ -61,6 +61,7 @@ typedef struct { Bool dontVTSwitch; Bool autoVTSwitch; Bool ShareVTs; + Bool hasVT; Bool dontZap; Bool dontZoom; diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c index 039dc4a4d..a8c43782a 100644 --- a/hw/xfree86/os-support/linux/lnx_init.c +++ b/hw/xfree86/os-support/linux/lnx_init.c @@ -233,6 +233,8 @@ xf86OpenConsole(void) if (!switch_to(xf86Info.vtno, "xf86OpenConsole")) FatalError("xf86OpenConsole: Switching VT failed\n"); + xf86Info.hasVT = TRUE; + SYSCALL(ret = ioctl(xf86Info.consoleFd, VT_GETMODE, &VT)); if (ret < 0) FatalError("xf86OpenConsole: VT_GETMODE failed %s\n", @@ -334,7 +336,7 @@ xf86CloseConsole(void) strerror(errno)); } - if (xf86Info.autoVTSwitch) { + if (xf86Info.autoVTSwitch && xf86Info.hasVT) { /* * Perform a switch back to the active VT when we were started */ diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c index 13784d15c..0d3f2de27 100644 --- a/hw/xfree86/os-support/linux/systemd-logind.c +++ b/hw/xfree86/os-support/linux/systemd-logind.c @@ -37,6 +37,7 @@ #include "linux.h" #include "xf86.h" #include "xf86platformBus.h" +#include "xf86Priv.h" #include "xf86Xinput.h" #include "globals.h" @@ -242,8 +243,10 @@ systemd_logind_vtenter(void) if (!info->active) return; /* Session not active */ - if (info->vt_active) + if (info->vt_active) { + xf86Info.hasVT = TRUE; return; /* Already did vtenter */ + } for (i = 0; i < xf86_num_platform_devices; i++) { if (xf86_platform_devices[i].flags & XF86_PDEV_PAUSED) -- 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