SHA256
1
0
forked from pool/gdm
gdm/gdm-add-runtime-option-to-disable-starting-X-server-as-u.patch
Dominique Leuenberger b451a7ac96 Accepting request 573608 from home:qkzhu:branches:home:michalsrb:branches:bnc1075805
- Add runtime option to start X under root instead of regular user.
  Necessary if no DRI drivers are present. (bnc#1075805)
  * gdm-add-runtime-option-to-disable-starting-X-server-as-u.patch
  * Updated X11-displaymanager-gdm to set the
    GDM_DISABLE_USER_DISPLAY_SERVER variable when needed.

GDM can currently start X server both ways - as regular user or as
root, unfortunately the only way to switch it is using a compilation
option. We need to run X as root in some cases, but want to keep the
increased security of running it under regular user in most cases.
This patch adds the ability to switch it using environmental
variable.

OBS-URL: https://build.opensuse.org/request/show/573608
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gdm?expand=0&rev=378
2018-02-08 12:02:45 +00:00

92 lines
3.4 KiB
Diff

From a19b51ad9e446948ba60c359641f6c4c14fec1da Mon Sep 17 00:00:00 2001
From: Michal Srb <msrb@suse.com>
Date: Fri, 26 Jan 2018 10:49:18 +0100
Subject: [PATCH] Add runtime option to disable starting X server as user
If the environmental variable GDM_DISABLE_USER_DISPLAY_SERVER is defined, the
X server will be started under root. The same way as if gdm was built with
--disable-user-display-server option.
This allows system to run X server under root if and only-if necessary.
---
daemon/gdm-local-display-factory.c | 10 ++++++----
daemon/gdm-session.c | 13 +++++++++----
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index b29f5ac5..7c687cf6 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -207,8 +207,11 @@ gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *fact
g_debug ("GdmLocalDisplayFactory: Creating transient display");
#ifdef ENABLE_USER_DISPLAY_SERVER
- display = gdm_local_display_new ();
-#else
+ if (getenv ("GDM_DISABLE_USER_DISPLAY_SERVER") == NULL) {
+ display = gdm_local_display_new ();
+ }
+#endif
+
if (display == NULL) {
guint32 num;
@@ -216,7 +219,6 @@ gdm_local_display_factory_create_transient_display (GdmLocalDisplayFactory *fact
display = gdm_legacy_display_new (num);
}
-#endif
g_object_set (display,
"seat-id", "seat0",
@@ -369,7 +371,7 @@ create_display (GdmLocalDisplayFactory *factory,
g_debug ("GdmLocalDisplayFactory: Adding display on seat %s", seat_id);
#ifdef ENABLE_USER_DISPLAY_SERVER
- if (g_strcmp0 (seat_id, "seat0") == 0) {
+ if (getenv ("GDM_DISABLE_USER_DISPLAY_SERVER") == NULL && g_strcmp0 (seat_id, "seat0") == 0) {
display = gdm_local_display_new ();
if (session_type != NULL) {
g_object_set (G_OBJECT (display), "session-type", session_type, NULL);
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 610ebcd0..cb37ed4e 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -360,7 +360,11 @@ get_system_session_dirs (GdmSession *self)
#ifdef ENABLE_WAYLAND_SUPPORT
if (!self->priv->ignore_wayland) {
#ifdef ENABLE_USER_DISPLAY_SERVER
- g_array_prepend_val (search_array, wayland_search_dir);
+ if (getenv ("GDM_DISABLE_USER_DISPLAY_SERVER") == NULL) {
+ g_array_prepend_val (search_array, wayland_search_dir);
+ } else {
+ g_array_append_val (search_array, wayland_search_dir);
+ }
#else
g_array_append_val (search_array, wayland_search_dir);
#endif
@@ -3147,8 +3151,10 @@ gdm_session_get_display_mode (GdmSession *self)
* right now. It will die with an error if logind devices
* are paused when handed out.
*/
- return GDM_SESSION_DISPLAY_MODE_NEW_VT;
-#else
+ if (getenv ("GDM_DISABLE_USER_DISPLAY_SERVER") == NULL) {
+ return GDM_SESSION_DISPLAY_MODE_NEW_VT;
+ }
+#endif
#ifdef ENABLE_WAYLAND_SUPPORT
/* Wayland sessions are for now assumed to run in a
@@ -3159,7 +3165,6 @@ gdm_session_get_display_mode (GdmSession *self)
}
#endif
return GDM_SESSION_DISPLAY_MODE_REUSE_VT;
-#endif
}
void
--
2.13.6