From 4f126357218314f74e6533daeac5ce0be05466ca Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 19 May 2015 10:13:20 +0200 Subject: [PATCH] Fix "start -- vt7" not working fix breaking headless setups (#1203780) --- ...parse_vt_settings-and-linux_get_keep.patch | 15 ++- ...fail-paramter-to-linux_parse_vt_sett.patch | 121 ++++++++++++++++++ ...nly-use-systemd-logind-integration-t.patch | 30 +++-- xorg-x11-server.spec | 12 +- 4 files changed, 158 insertions(+), 20 deletions(-) rename 0001-linux-Add-linux_get_vtno-and-linux_get_keeptty-helpe.patch => 0001-linux-Add-linux_parse_vt_settings-and-linux_get_keep.patch (94%) create mode 100644 0002-linux-Add-a-may_fail-paramter-to-linux_parse_vt_sett.patch rename 0002-systemd-logind-Only-use-systemd-logind-integration-t.patch => 0003-systemd-logind-Only-use-systemd-logind-integration-t.patch (70%) diff --git a/0001-linux-Add-linux_get_vtno-and-linux_get_keeptty-helpe.patch b/0001-linux-Add-linux_parse_vt_settings-and-linux_get_keep.patch similarity index 94% rename from 0001-linux-Add-linux_get_vtno-and-linux_get_keeptty-helpe.patch rename to 0001-linux-Add-linux_parse_vt_settings-and-linux_get_keep.patch index 6fa9112..7497b26 100644 --- a/0001-linux-Add-linux_get_vtno-and-linux_get_keeptty-helpe.patch +++ b/0001-linux-Add-linux_parse_vt_settings-and-linux_get_keep.patch @@ -1,7 +1,8 @@ -From cd7063aa899b56d407b57eab06b51925c913399d Mon Sep 17 00:00:00 2001 +From 92bc12b7085ff80d4f5a2389b5a00cda501e27c7 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 21 Jan 2015 09:31:39 +0100 -Subject: [PATCH 1/2] linux: Add linux_get_vtno and linux_get_keeptty helpers +Subject: [PATCH v2 1/3] linux: Add linux_parse_vt_settings and + linux_get_keeptty helpers systemd-logind integration does not work when starting X on a new tty, as that detaches X from the current session and after hat systemd-logind revokes @@ -24,13 +25,17 @@ these can be called earlier. Calling this earlier is safe as this code has no side effects other than setting xf86Info.vtno and keepTty. Note this basically only moves a large chunk of xf86OpenConsole() into -linux_get_vtno() without changing a single line of it, this is hard to see -in the diff because the identation level has changed. +linux_parse_vt_settings() without changing a single line of it, this is +hard to see in the diff because the identation level has changed. Signed-off-by: Hans de Goede +Reviewed-by: Peter Hutterer --- Changes in v2: -Rename linux_get_vtno to linux_parse_vt_settings +Changes in v3: +-Carry the rename of linux_get_vtno to linux_parse_vt_settings over into + the commit msg --- hw/xfree86/os-support/linux/linux.h | 32 +++++++++ hw/xfree86/os-support/linux/lnx_init.c | 122 ++++++++++++++++++++------------- @@ -232,5 +237,5 @@ index 9485307..22c61bf 100644 if (!KeepTty) { pid_t ppid = getppid(); -- -2.3.6 +2.4.0 diff --git a/0002-linux-Add-a-may_fail-paramter-to-linux_parse_vt_sett.patch b/0002-linux-Add-a-may_fail-paramter-to-linux_parse_vt_sett.patch new file mode 100644 index 0000000..50ed714 --- /dev/null +++ b/0002-linux-Add-a-may_fail-paramter-to-linux_parse_vt_sett.patch @@ -0,0 +1,121 @@ +From 4237375e8c159ce95ec77868f74edacc896f8714 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Wed, 13 May 2015 13:17:09 +0200 +Subject: [PATCH v2 2/3] linux: Add a may_fail paramter to + linux_parse_vt_settings + +linux_parse_vt_settings() was split out of xf86OpenConsole so that it can +be called earlier during systemd-logind init, but it is possible to run +the xserver in such a way that xf86OpenConsole() is never used. + +The FatalError calls in linux_parse_vt_settings() may stop the Xorg xserver +from working when e.g. no /dev/tty0 is present in such a setup. + +This commit adds a may_fail parameter to linux_parse_vt_settings() which +can be used to make linux_parse_vt_settings() fail silenty with an error +return in this case, rather then calling FatalError(). + +Signed-off-by: Hans de Goede +--- + hw/xfree86/os-support/linux/linux.h | 2 +- + hw/xfree86/os-support/linux/lnx_init.c | 29 +++++++++++++++++++++-------- + 2 files changed, 22 insertions(+), 9 deletions(-) + +diff --git a/hw/xfree86/os-support/linux/linux.h b/hw/xfree86/os-support/linux/linux.h +index 8cb8e3d..83506fd 100644 +--- a/hw/xfree86/os-support/linux/linux.h ++++ b/hw/xfree86/os-support/linux/linux.h +@@ -26,7 +26,7 @@ + #ifndef XF86_LINUX_H + #define XF86_LINUX_H + +-void linux_parse_vt_settings(void); ++int linux_parse_vt_settings(int may_fail); + int linux_get_keeptty(void); + + #endif +diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c +index 22c61bf..12ddf91 100644 +--- a/hw/xfree86/os-support/linux/lnx_init.c ++++ b/hw/xfree86/os-support/linux/lnx_init.c +@@ -80,8 +80,8 @@ switch_to(int vt, const char *from) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wformat-nonliteral" + +-void +-linux_parse_vt_settings(void) ++int ++linux_parse_vt_settings(int may_fail) + { + int i, fd = -1, ret, current_vt = -1; + struct vt_stat vts; +@@ -93,7 +93,7 @@ linux_parse_vt_settings(void) + static int vt_settings_parsed = 0; + + if (vt_settings_parsed) +- return; ++ return 1; + + /* + * setup the virtual terminal manager +@@ -110,24 +110,36 @@ linux_parse_vt_settings(void) + i++; + } + +- if (fd < 0) ++ if (fd < 0) { ++ if (may_fail) ++ return 0; + FatalError("parse_vt_settings: Cannot open /dev/tty0 (%s)\n", + strerror(errno)); ++ } + + if (xf86Info.ShareVTs) { + SYSCALL(ret = ioctl(fd, VT_GETSTATE, &vts)); +- if (ret < 0) ++ if (ret < 0) { ++ if (may_fail) ++ return 0; + FatalError("parse_vt_settings: Cannot find the current" + " VT (%s)\n", strerror(errno)); ++ } + xf86Info.vtno = vts.v_active; + } + else { + SYSCALL(ret = ioctl(fd, VT_OPENQRY, &xf86Info.vtno)); +- if (ret < 0) ++ if (ret < 0) { ++ if (may_fail) ++ return 0; + FatalError("parse_vt_settings: Cannot find a free VT: " + "%s\n", strerror(errno)); +- if (xf86Info.vtno == -1) ++ } ++ if (xf86Info.vtno == -1) { ++ if (may_fail) ++ return 0; + FatalError("parse_vt_settings: Cannot find a free VT\n"); ++ } + } + close(fd); + } +@@ -151,6 +163,7 @@ linux_parse_vt_settings(void) + } + + vt_settings_parsed = 1; ++ return 1; + } + + int +@@ -168,7 +181,7 @@ xf86OpenConsole(void) + const char *vcs[] = { "/dev/vc/%d", "/dev/tty%d", NULL }; + + if (serverGeneration == 1) { +- linux_parse_vt_settings(); ++ linux_parse_vt_settings(FALSE); + + if (!KeepTty) { + pid_t ppid = getppid(); +-- +2.4.0 + diff --git a/0002-systemd-logind-Only-use-systemd-logind-integration-t.patch b/0003-systemd-logind-Only-use-systemd-logind-integration-t.patch similarity index 70% rename from 0002-systemd-logind-Only-use-systemd-logind-integration-t.patch rename to 0003-systemd-logind-Only-use-systemd-logind-integration-t.patch index f3abb4c..522f450 100644 --- a/0002-systemd-logind-Only-use-systemd-logind-integration-t.patch +++ b/0003-systemd-logind-Only-use-systemd-logind-integration-t.patch @@ -1,7 +1,7 @@ -From 4c5a293c20394bad6abb695aaa0d8ef374ed1080 Mon Sep 17 00:00:00 2001 +From 816c85d0e8fc517db3382bce4a94bc5d859b3eca Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 21 Jan 2015 10:13:20 +0100 -Subject: [PATCH 2/2] systemd-logind: Only use systemd-logind integration +Subject: [PATCH v2 3/3] systemd-logind: Only use systemd-logind integration together with keeptty systemd-logind integration does not work when starting X on a new tty, as @@ -16,13 +16,22 @@ not using KeepTty, or iow we may only use systemd-logind integration together with KeepTty. Signed-off-by: Hans de Goede +Reviewed-by: Peter Hutterer +--- +Changes in v2: +-Document that -keeptty must be passed for logind integration in man page +-Print an INFO message when disabling logind integration due to -keeptty + not being set +Changes in v3: +-Fix typo in manpage additions +-Use new may_fail parameter to linux_parse_vt_settings --- hw/xfree86/man/Xorg.man | 6 +++--- - hw/xfree86/os-support/linux/systemd-logind.c | 9 +++++++++ - 2 files changed, 12 insertions(+), 3 deletions(-) + hw/xfree86/os-support/linux/systemd-logind.c | 8 ++++++++ + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man -index 3ff6aef..0864a58 100644 +index 3ff6aef..ddf1358 100644 --- a/hw/xfree86/man/Xorg.man +++ b/hw/xfree86/man/Xorg.man @@ -271,9 +271,9 @@ is ignored if @@ -34,12 +43,12 @@ index 3ff6aef..0864a58 100644 -support (or can use) this option. +Prevent the server from detaching its initial controlling terminal. If you +want to use systemd-logind integration you must specify this option. -+Not all platorms support (or can use) this option. ++Not all platforms support (or can use) this option. .TP 8 .BI \-keyboard " keyboard-name" Use the xorg.conf(__filemansuffix__) file diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c -index 4ad41a3..72f1ae3 100644 +index 4ad41a3..69e2f67 100644 --- a/hw/xfree86/os-support/linux/systemd-logind.c +++ b/hw/xfree86/os-support/linux/systemd-logind.c @@ -34,6 +34,7 @@ @@ -50,12 +59,11 @@ index 4ad41a3..72f1ae3 100644 #include "xf86.h" #include "xf86platformBus.h" #include "xf86Xinput.h" -@@ -596,6 +597,14 @@ static struct dbus_core_hook core_hook = { +@@ -596,6 +597,13 @@ static struct dbus_core_hook core_hook = { int systemd_logind_init(void) { -+ linux_parse_vt_settings(); -+ if (!linux_get_keeptty()) { ++ if (linux_parse_vt_settings(TRUE) && !linux_get_keeptty()) { + LogMessage(X_INFO, + "systemd-logind: logind integration requires -keeptty and " + "-keeptty was not provided, disabling logind integration\n"); @@ -66,5 +74,5 @@ index 4ad41a3..72f1ae3 100644 } -- -2.3.6 +2.4.0 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index e28b3a6..073b59a 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -45,7 +45,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.17.1 -Release: 11%{?gitdate:.%{gitdate}}%{dist} +Release: 12%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -113,11 +113,12 @@ Patch10002: 0001-int10-Fix-mapping-the-interrupt-vector.patch Patch10003: 0001-include-Fix-endianness-setup.patch # rhbz1203780, submitted upstream -Patch10004: 0001-linux-Add-linux_get_vtno-and-linux_get_keeptty-helpe.patch -Patch10005: 0002-systemd-logind-Only-use-systemd-logind-integration-t.patch +Patch10004: 0001-linux-Add-linux_parse_vt_settings-and-linux_get_keep.patch +Patch10005: 0002-linux-Add-a-may_fail-paramter-to-linux_parse_vt_sett.patch +Patch10006: 0003-systemd-logind-Only-use-systemd-logind-integration-t.patch # rhbz1205725, submitted upstream -Patch10006: 0001-modesetting-Fix-software-cursor-fallback.patch +Patch10007: 0001-modesetting-Fix-software-cursor-fallback.patch %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri @@ -652,6 +653,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %changelog +* Tue May 19 2015 Hans de Goede - 1.17.1-12 +- Fix "start -- vt7" not working fix breaking headless setups (#1203780) + * Sat May 02 2015 Adel Gadllah - 1.17.1-11 - modesetting: Fix software cursor fallback (#1205725)