Fix "start -- vt7" not working fix breaking headless setups (#1203780)

This commit is contained in:
Hans de Goede 2015-05-19 10:13:20 +02:00
parent 56c41c9e82
commit 4f12635721
4 changed files with 158 additions and 20 deletions

View File

@ -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 <hdegoede@redhat.com> From: Hans de Goede <hdegoede@redhat.com>
Date: Wed, 21 Jan 2015 09:31:39 +0100 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 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 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. no side effects other than setting xf86Info.vtno and keepTty.
Note this basically only moves a large chunk of xf86OpenConsole() into 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 linux_parse_vt_settings() without changing a single line of it, this is
in the diff because the identation level has changed. hard to see in the diff because the identation level has changed.
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
--- ---
Changes in v2: Changes in v2:
-Rename linux_get_vtno to linux_parse_vt_settings -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/linux.h | 32 +++++++++
hw/xfree86/os-support/linux/lnx_init.c | 122 ++++++++++++++++++++------------- hw/xfree86/os-support/linux/lnx_init.c | 122 ++++++++++++++++++++-------------
@ -232,5 +237,5 @@ index 9485307..22c61bf 100644
if (!KeepTty) { if (!KeepTty) {
pid_t ppid = getppid(); pid_t ppid = getppid();
-- --
2.3.6 2.4.0

View File

@ -0,0 +1,121 @@
From 4237375e8c159ce95ec77868f74edacc896f8714 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
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 <hdegoede@redhat.com>
---
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

View File

@ -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 <hdegoede@redhat.com> From: Hans de Goede <hdegoede@redhat.com>
Date: Wed, 21 Jan 2015 10:13:20 +0100 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 together with keeptty
systemd-logind integration does not work when starting X on a new tty, as 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. with KeepTty.
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
---
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/man/Xorg.man | 6 +++---
hw/xfree86/os-support/linux/systemd-logind.c | 9 +++++++++ hw/xfree86/os-support/linux/systemd-logind.c | 8 ++++++++
2 files changed, 12 insertions(+), 3 deletions(-) 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man 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 --- a/hw/xfree86/man/Xorg.man
+++ b/hw/xfree86/man/Xorg.man +++ b/hw/xfree86/man/Xorg.man
@@ -271,9 +271,9 @@ is ignored if @@ -271,9 +271,9 @@ is ignored if
@ -34,12 +43,12 @@ index 3ff6aef..0864a58 100644
-support (or can use) this option. -support (or can use) this option.
+Prevent the server from detaching its initial controlling terminal. If you +Prevent the server from detaching its initial controlling terminal. If you
+want to use systemd-logind integration you must specify this option. +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 .TP 8
.BI \-keyboard " keyboard-name" .BI \-keyboard " keyboard-name"
Use the xorg.conf(__filemansuffix__) file 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 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 --- a/hw/xfree86/os-support/linux/systemd-logind.c
+++ b/hw/xfree86/os-support/linux/systemd-logind.c +++ b/hw/xfree86/os-support/linux/systemd-logind.c
@@ -34,6 +34,7 @@ @@ -34,6 +34,7 @@
@ -50,12 +59,11 @@ index 4ad41a3..72f1ae3 100644
#include "xf86.h" #include "xf86.h"
#include "xf86platformBus.h" #include "xf86platformBus.h"
#include "xf86Xinput.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 int
systemd_logind_init(void) systemd_logind_init(void)
{ {
+ linux_parse_vt_settings(); + if (linux_parse_vt_settings(TRUE) && !linux_get_keeptty()) {
+ if (!linux_get_keeptty()) {
+ LogMessage(X_INFO, + LogMessage(X_INFO,
+ "systemd-logind: logind integration requires -keeptty and " + "systemd-logind: logind integration requires -keeptty and "
+ "-keeptty was not provided, disabling logind integration\n"); + "-keeptty was not provided, disabling logind integration\n");
@ -66,5 +74,5 @@ index 4ad41a3..72f1ae3 100644
} }
-- --
2.3.6 2.4.0

View File

@ -45,7 +45,7 @@
Summary: X.Org X11 X server Summary: X.Org X11 X server
Name: xorg-x11-server Name: xorg-x11-server
Version: 1.17.1 Version: 1.17.1
Release: 11%{?gitdate:.%{gitdate}}%{dist} Release: 12%{?gitdate:.%{gitdate}}%{dist}
URL: http://www.x.org URL: http://www.x.org
License: MIT License: MIT
Group: User Interface/X Group: User Interface/X
@ -113,11 +113,12 @@ Patch10002: 0001-int10-Fix-mapping-the-interrupt-vector.patch
Patch10003: 0001-include-Fix-endianness-setup.patch Patch10003: 0001-include-Fix-endianness-setup.patch
# rhbz1203780, submitted upstream # rhbz1203780, submitted upstream
Patch10004: 0001-linux-Add-linux_get_vtno-and-linux_get_keeptty-helpe.patch Patch10004: 0001-linux-Add-linux_parse_vt_settings-and-linux_get_keep.patch
Patch10005: 0002-systemd-logind-Only-use-systemd-logind-integration-t.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 # 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 moduledir %{_libdir}/xorg/modules
%global drimoduledir %{_libdir}/dri %global drimoduledir %{_libdir}/dri
@ -652,6 +653,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete
%changelog %changelog
* Tue May 19 2015 Hans de Goede <hdegoede@redhat.com> - 1.17.1-12
- Fix "start -- vt7" not working fix breaking headless setups (#1203780)
* Sat May 02 2015 Adel Gadllah <adel.gadllah@gmail.com> - 1.17.1-11 * Sat May 02 2015 Adel Gadllah <adel.gadllah@gmail.com> - 1.17.1-11
- modesetting: Fix software cursor fallback (#1205725) - modesetting: Fix software cursor fallback (#1205725)