import gdm-40.0-12.el8
This commit is contained in:
parent
0ffac0a180
commit
ce2a9b6701
@ -1,7 +1,7 @@
|
||||
From 911780e9980fe16b18d139f757ff795da1d1882d Mon Sep 17 00:00:00 2001
|
||||
From 85951a0384cb7f37d99669575fad4aea155f25a8 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Wed, 5 May 2021 10:50:56 -0400
|
||||
Subject: [PATCH] Revert "gdm-{wayland,x}-session: don't overwrite user env
|
||||
Subject: [PATCH 1/5] Revert "gdm-{wayland,x}-session: don't overwrite user env
|
||||
with fallback vars"
|
||||
|
||||
This reverts commit ccecd9c975d04da80db4cd547b67a1a94fa83292.
|
||||
@ -237,5 +237,5 @@ index 5962da572..b15483614 100644
|
||||
state->session_command,
|
||||
NULL);
|
||||
--
|
||||
2.31.1
|
||||
2.30.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b840bedd919eb321f2cefd8b9620af5bc28a28b6 Mon Sep 17 00:00:00 2001
|
||||
From cebcf2a4d29f01061dedf8714db2842b9582900c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Tue, 8 Jun 2021 20:45:00 +0200
|
||||
Subject: [PATCH] data: Disable network configuration on login screen
|
||||
Subject: [PATCH 1/3] data: Disable network configuration on login screen
|
||||
|
||||
---
|
||||
data/meson.build | 10 ++++++++++
|
||||
@ -10,10 +10,37 @@ Subject: [PATCH] data: Disable network configuration on login screen
|
||||
create mode 100644 data/org.gnome.gdm.rules.in
|
||||
|
||||
diff --git a/data/meson.build b/data/meson.build
|
||||
index 7c5222ea..20d39a36 100644
|
||||
index 23e2d7f9f..cbd6a6a21 100644
|
||||
--- a/data/meson.build
|
||||
+++ b/data/meson.build
|
||||
@@ -157,6 +157,16 @@ gdm_rules = configure_file(
|
||||
@@ -131,60 +131,70 @@ pam_data_files_map = {
|
||||
'arch': [
|
||||
'gdm-autologin',
|
||||
'gdm-launch-environment',
|
||||
'gdm-fingerprint',
|
||||
'gdm-smartcard',
|
||||
'gdm-password',
|
||||
'gdm-pin',
|
||||
],
|
||||
'none': [],
|
||||
# We should no longer have 'autodetect' at this point
|
||||
}
|
||||
|
||||
pam_data_files = pam_data_files_map[default_pam_config]
|
||||
pam_prefix = (get_option('pam-prefix') != '')? get_option('pam-prefix') : get_option('sysconfdir')
|
||||
foreach _pam_filename : pam_data_files
|
||||
install_data('pam-@0@/@1@.pam'.format(default_pam_config, _pam_filename),
|
||||
rename: _pam_filename,
|
||||
install_dir: pam_prefix / 'pam.d',
|
||||
)
|
||||
endforeach
|
||||
|
||||
gdm_rules = configure_file(
|
||||
input: '61-gdm.rules.in',
|
||||
output: '@BASENAME@',
|
||||
configuration: {
|
||||
'libexecdir': gdm_prefix / get_option('libexecdir'),
|
||||
},
|
||||
install_dir: udev_dir,
|
||||
)
|
||||
|
||||
@ -30,9 +57,36 @@ index 7c5222ea..20d39a36 100644
|
||||
# DBus service files
|
||||
service_config = configuration_data()
|
||||
service_config.set('sbindir', gdm_prefix / get_option('sbindir'))
|
||||
service_config.set('GDM_INITIAL_VT', get_option('initial-vt'))
|
||||
service_config.set('LANG_CONFIG_FILE', lang_config_file)
|
||||
if plymouth_dep.found()
|
||||
service_config.set('PLYMOUTH_QUIT_SERVICE', 'plymouth-quit.service')
|
||||
else
|
||||
service_config.set('PLYMOUTH_QUIT_SERVICE', '')
|
||||
endif
|
||||
|
||||
if get_option('systemdsystemunitdir') != ''
|
||||
systemd_systemunitdir = get_option('systemdsystemunitdir')
|
||||
else
|
||||
systemd_systemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
|
||||
endif
|
||||
|
||||
if get_option('systemduserunitdir') != ''
|
||||
systemd_userunitdir = get_option('systemduserunitdir')
|
||||
else
|
||||
systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir',
|
||||
define_variable: ['prefix', get_option('prefix')])
|
||||
endif
|
||||
|
||||
configure_file(
|
||||
input: 'gdm.service.in',
|
||||
output: '@BASENAME@',
|
||||
configuration: service_config,
|
||||
install_dir: systemd_systemunitdir,
|
||||
format: 'cmake'
|
||||
diff --git a/data/org.gnome.gdm.rules.in b/data/org.gnome.gdm.rules.in
|
||||
new file mode 100644
|
||||
index 00000000..09544f11
|
||||
index 000000000..09544f11e
|
||||
--- /dev/null
|
||||
+++ b/data/org.gnome.gdm.rules.in
|
||||
@@ -0,0 +1,8 @@
|
||||
@ -45,5 +99,5 @@ index 00000000..09544f11
|
||||
+ return polkit.Result.NOT_HANDLED;
|
||||
+});
|
||||
--
|
||||
2.31.1
|
||||
2.30.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b1557adf711577c62609f8a784f11fad66eb54ef Mon Sep 17 00:00:00 2001
|
||||
From 8c9fe8ebd9e584adaec0a80ee4c4eaf5357422a5 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Wed, 31 Jul 2013 17:32:55 -0400
|
||||
Subject: [PATCH] data: add system dconf databases to gdm profile
|
||||
Subject: [PATCH 1/2] data: add system dconf databases to gdm profile
|
||||
|
||||
This way system settings can affect the login screen.
|
||||
---
|
||||
@ -20,5 +20,5 @@ index 4d8bf1748..9694078fb 100644
|
||||
+system-db:distro
|
||||
file-db:@DATADIR@/@PACKAGE@/greeter-dconf-defaults
|
||||
--
|
||||
2.28.0
|
||||
2.30.1
|
||||
|
||||
|
@ -1,26 +1,48 @@
|
||||
From 53afc21a17f002730a53fe790de564f055c07352 Mon Sep 17 00:00:00 2001
|
||||
From afdaf0c31c7fb44e05a271a9047a0993ff1f4ef2 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Mon, 11 Feb 2019 18:14:07 -0500
|
||||
Subject: [PATCH] data: disable wayland on certain hardware
|
||||
|
||||
We're having issues with wayland on passthrough to virt
|
||||
setups and with the vendor nvidia driver, so
|
||||
disable it in those cases.
|
||||
setups and with the vendor nvidia driver on hybrid graphics
|
||||
setups, so disable it in those cases.
|
||||
|
||||
Also disable it on server chips for performance reasons.
|
||||
---
|
||||
data/61-gdm.rules.in | 15 ++++++++++++---
|
||||
1 file changed, 12 insertions(+), 3 deletions(-)
|
||||
data/61-gdm.rules.in | 36 ++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 32 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/data/61-gdm.rules.in b/data/61-gdm.rules.in
|
||||
index b1da191f8..0230e5ca5 100644
|
||||
index b1da191f8..d863a4a4d 100644
|
||||
--- a/data/61-gdm.rules.in
|
||||
+++ b/data/61-gdm.rules.in
|
||||
@@ -1,6 +1,15 @@
|
||||
@@ -1,6 +1,34 @@
|
||||
# disable Wayland on Hi1710 chipsets
|
||||
-ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false"
|
||||
+ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
# disable Wayland when using the proprietary nvidia driver
|
||||
-# disable Wayland when using the proprietary nvidia driver
|
||||
-DRIVER=="nvidia", RUN+="@libexecdir@/gdm-runtime-config set daemon WaylandEnable false"
|
||||
+DRIVER=="nvidia", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x19e5", ATTR{device}=="0x1711", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+
|
||||
+# disable Wayland on Matrox chipsets
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0522", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0524", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0530", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0532", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0533", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0534", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0536", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x102b", ATTR{device}=="0x0538", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+
|
||||
+# disable Wayland on aspeed chipsets
|
||||
+ATTR{vendor}=="0x1a03", ATTR{device}=="0x2010", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ATTR{vendor}=="0x1a03", ATTR{device}=="0x2000", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+
|
||||
+# disable Wayland on hybrid systems with vendor nvidia driver
|
||||
+# default to Xorg on single gpu vendor nvidia systems
|
||||
+DRIVER=="nvidia", ENV{GDM_HAS_VENDOR_NVIDIA_DRIVER}="1"
|
||||
+DRIVER=="nvidia", RUN+="@libexecdir@/gdm-runtime-config set daemon PreferredDisplayServer xorg"
|
||||
+SUBSYSTEM=="drm", KERNEL=="card[1-9]*", ENV{GDM_HAS_NVIDIA_DRIVER}=="1", RUN+="@libexecdir@/gdm-disable-wayland"
|
||||
+ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia_drm", ATTR{parameters/modeset}=="N", RUN+="/usr/libexec/gdm-disable-wayland"
|
||||
+
|
||||
+# disable Wayland on passthrough graphics setups for now (assumes passthrough if
|
||||
+# there is more than one card, and one of the cards is virt: cirrus, bochs, qxl)
|
||||
|
@ -1,7 +1,7 @@
|
||||
From f860f60771cd4f07ae1d06c56621a5aa8545e60b Mon Sep 17 00:00:00 2001
|
||||
From cbfb3ef99ecc9cbb4e6850e5dd0cc9fb65dd398a Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 1 Sep 2020 13:49:27 -0400
|
||||
Subject: [PATCH] display: Handle failure before display registration
|
||||
Subject: [PATCH 1/3] display: Handle failure before display registration
|
||||
|
||||
Normally, e.g., gdm-wayland-session would register its display
|
||||
before starting the session. This display registration is how
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
From 89ec6e57e452c04ffc43ae224052c7ddeea66676 Mon Sep 17 00:00:00 2001
|
||||
From 5c52259331ce0b37dd1b2b092ff41f96b0e5ce64 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Mon, 29 Oct 2018 06:57:59 -0400
|
||||
Subject: [PATCH] local-display-factory: pause for a few seconds before falling
|
||||
@ -12,14 +12,24 @@ back to X.
|
||||
|
||||
http://bugzilla.redhat.com/1643874
|
||||
---
|
||||
daemon/gdm-local-display-factory.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
daemon/gdm-local-display-factory.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
|
||||
index 8a4ef06cd..8554a0442 100644
|
||||
index 0bb3851f1..297c3ac80 100644
|
||||
--- a/daemon/gdm-local-display-factory.c
|
||||
+++ b/daemon/gdm-local-display-factory.c
|
||||
@@ -488,60 +488,65 @@ ensure_display_for_seat (GdmLocalDisplayFactory *factory,
|
||||
@@ -586,60 +586,67 @@ ensure_display_for_seat (GdmLocalDisplayFactory *factory,
|
||||
preferred_display_server = get_preferred_display_server (factory);
|
||||
|
||||
if (g_strcmp0 (preferred_display_server, "none") == 0) {
|
||||
g_debug ("GdmLocalDisplayFactory: Preferred display server is none, so not creating display");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = sd_seat_can_graphical (seat_id);
|
||||
|
||||
if (ret < 0) {
|
||||
g_critical ("Failed to query CanGraphical information for seat %s", seat_id);
|
||||
return;
|
||||
}
|
||||
@ -35,26 +45,25 @@ index 8a4ef06cd..8554a0442 100644
|
||||
if (g_strcmp0 (seat_id, "seat0") == 0) {
|
||||
is_seat0 = TRUE;
|
||||
|
||||
/* If we've failed, or are explicitly told to, fall back to legacy X11 support
|
||||
*/
|
||||
if (factory->num_failures > 0 || !gdm_local_display_factory_use_wayland ()) {
|
||||
session_type = NULL;
|
||||
g_debug ("GdmLocalDisplayFactory: New displays on seat0 will use X11 fallback");
|
||||
falling_back = factory->num_failures > 0;
|
||||
session_type = gdm_local_display_factory_get_session_type (factory, falling_back);
|
||||
|
||||
g_debug ("GdmLocalDisplayFactory: New displays on seat0 will use %s%s",
|
||||
session_type, falling_back? " fallback" : "");
|
||||
+
|
||||
+ if (falling_back) {
|
||||
+ /* workaround logind race for now
|
||||
+ * bug 1643874
|
||||
+ */
|
||||
+ g_usleep (2 * G_USEC_PER_SEC);
|
||||
} else {
|
||||
g_debug ("GdmLocalDisplayFactory: New displays on seat0 will use wayland");
|
||||
}
|
||||
+ }
|
||||
} else {
|
||||
is_seat0 = FALSE;
|
||||
|
||||
g_debug ("GdmLocalDisplayFactory: New displays on seat %s will use X11 fallback", seat_id);
|
||||
/* Force legacy X11 for all auxiliary seats */
|
||||
seat_supports_graphics = TRUE;
|
||||
session_type = NULL;
|
||||
session_type = "x11";
|
||||
}
|
||||
|
||||
/* For seat0, we have a fallback logic to still try starting it after
|
||||
@ -78,13 +87,6 @@ index 8a4ef06cd..8554a0442 100644
|
||||
if (factory->seat0_graphics_check_timeout_id == 0) {
|
||||
g_debug ("GdmLocalDisplayFactory: seat0 doesn't yet support graphics. Waiting %d seconds to try again.", SEAT0_GRAPHICS_CHECK_TIMEOUT);
|
||||
factory->seat0_graphics_check_timeout_id = g_timeout_add_seconds (SEAT0_GRAPHICS_CHECK_TIMEOUT,
|
||||
on_seat0_graphics_check_timeout,
|
||||
factory);
|
||||
|
||||
} else {
|
||||
/* It is not yet time to force X11 fallback. */
|
||||
g_debug ("GdmLocalDisplayFactory: seat0 display requested when there is no graphics support before graphics check timeout.");
|
||||
}
|
||||
--
|
||||
2.31.1
|
||||
2.30.1
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d99f12385d6b04023cbe17f3f6fc2a917066c6e8 Mon Sep 17 00:00:00 2001
|
||||
From d80807171a457ff87bdc9bd861939161749a37a8 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Thu, 20 Dec 2018 14:51:38 -0500
|
||||
Subject: [PATCH 1/3] manager: allow multiple xdmcp logins for the same user
|
||||
@ -10,19 +10,19 @@ Subject: [PATCH 1/3] manager: allow multiple xdmcp logins for the same user
|
||||
3 files changed, 59 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/common/gdm-settings-keys.h b/common/gdm-settings-keys.h
|
||||
index f0059b5cf..33676a851 100644
|
||||
index 87685d3cd..4b3a1ffeb 100644
|
||||
--- a/common/gdm-settings-keys.h
|
||||
+++ b/common/gdm-settings-keys.h
|
||||
@@ -28,37 +28,38 @@ G_BEGIN_DECLS
|
||||
#define GDM_KEY_USER "daemon/User"
|
||||
#define GDM_KEY_GROUP "daemon/Group"
|
||||
@@ -30,37 +30,38 @@ G_BEGIN_DECLS
|
||||
#define GDM_KEY_AUTO_LOGIN_ENABLE "daemon/AutomaticLoginEnable"
|
||||
#define GDM_KEY_AUTO_LOGIN_USER "daemon/AutomaticLogin"
|
||||
#define GDM_KEY_TIMED_LOGIN_ENABLE "daemon/TimedLoginEnable"
|
||||
#define GDM_KEY_TIMED_LOGIN_USER "daemon/TimedLogin"
|
||||
#define GDM_KEY_TIMED_LOGIN_DELAY "daemon/TimedLoginDelay"
|
||||
#define GDM_KEY_INITIAL_SETUP_ENABLE "daemon/InitialSetupEnable"
|
||||
#define GDM_KEY_PREFERRED_DISPLAY_SERVER "daemon/PreferredDisplayServer"
|
||||
#define GDM_KEY_WAYLAND_ENABLE "daemon/WaylandEnable"
|
||||
#define GDM_KEY_XORG_ENABLE "daemon/XorgEnable"
|
||||
|
||||
#define GDM_KEY_DEBUG "debug/Enable"
|
||||
|
||||
@ -53,7 +53,7 @@ index f0059b5cf..33676a851 100644
|
||||
|
||||
#endif /* _GDM_SETTINGS_KEYS_H */
|
||||
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
|
||||
index 9c10adff3..b96295ab6 100644
|
||||
index e433acf3b..ce8565bf9 100644
|
||||
--- a/daemon/gdm-manager.c
|
||||
+++ b/daemon/gdm-manager.c
|
||||
@@ -566,93 +566,106 @@ get_display_and_details_for_bus_sender (GdmManager *self,
|
||||
@ -297,10 +297,10 @@ index 9c10adff3..b96295ab6 100644
|
||||
uid,
|
||||
is_remote);
|
||||
diff --git a/data/gdm.schemas.in b/data/gdm.schemas.in
|
||||
index 255bff023..86059c02e 100644
|
||||
index a1035f95e..929d13d90 100644
|
||||
--- a/data/gdm.schemas.in
|
||||
+++ b/data/gdm.schemas.in
|
||||
@@ -102,33 +102,38 @@
|
||||
@@ -112,33 +112,38 @@
|
||||
<schema>
|
||||
<key>xdmcp/DisplaysPerHost</key>
|
||||
<signature>i</signature>
|
||||
@ -340,5 +340,5 @@ index 255bff023..86059c02e 100644
|
||||
</gdmschemafile>
|
||||
|
||||
--
|
||||
2.31.1
|
||||
2.30.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 4fde9e7882e5d2e42a4ed5a0d71943d5ea966131 Mon Sep 17 00:00:00 2001
|
||||
From 7edce4ef248af01692758caf9dbb945bdd45cb0f Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Wed, 15 Aug 2018 10:48:16 -0400
|
||||
Subject: [PATCH 1/5] worker: don't load user settings for program sessions
|
||||
Subject: [PATCH 1/4] worker: don't load user settings for program sessions
|
||||
|
||||
We don't need or want the login greeter to access accountsservice
|
||||
for its session name
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 81efb06506456a260d63b77e3dda1216041b5bb3 Mon Sep 17 00:00:00 2001
|
||||
From 874b26e3674d540df37d7f145df853bcf81e5a26 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Wed, 5 Feb 2020 15:20:48 -0500
|
||||
Subject: [PATCH 2/3] gdm-x-session: run session bus on non-seat0 seats
|
||||
@ -13,10 +13,10 @@ seats get their own session bus.
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
||||
index 5c5903a49..c891fb577 100644
|
||||
index 418240dc0..77d6b8ff0 100644
|
||||
--- a/daemon/gdm-session.c
|
||||
+++ b/daemon/gdm-session.c
|
||||
@@ -2811,119 +2811,128 @@ on_start_program_cb (GdmDBusWorker *worker,
|
||||
@@ -2822,119 +2822,128 @@ on_start_program_cb (GdmDBusWorker *worker,
|
||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CLOSED) ||
|
||||
g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
return;
|
||||
@ -78,7 +78,7 @@ index 5c5903a49..c891fb577 100644
|
||||
|
||||
register_session = !gdm_session_session_registers (self);
|
||||
|
||||
+ if (g_strcmp0 (priv->display_seat_id, "seat0") != 0 && !run_launcher) {
|
||||
+ if (g_strcmp0 (self->display_seat_id, "seat0") != 0 && !run_launcher) {
|
||||
+ run_separate_bus = TRUE;
|
||||
+ }
|
||||
+
|
||||
@ -147,5 +147,5 @@ index 5c5903a49..c891fb577 100644
|
||||
self->selected_program);
|
||||
}
|
||||
--
|
||||
2.31.1
|
||||
2.30.1
|
||||
|
||||
|
131
SOURCES/0002-libgdm-Sort-session-list.patch
Normal file
131
SOURCES/0002-libgdm-Sort-session-list.patch
Normal file
@ -0,0 +1,131 @@
|
||||
From 6bdb7cf9e8ace0d9a42fd921d7192dcfece687fa Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 20 Jul 2021 13:36:45 -0400
|
||||
Subject: [PATCH 2/2] libgdm: Sort session list
|
||||
|
||||
Right now the session list comes out in hash table order.
|
||||
|
||||
This commit changes the code to sort by description.
|
||||
---
|
||||
libgdm/gdm-sessions.c | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
diff --git a/libgdm/gdm-sessions.c b/libgdm/gdm-sessions.c
|
||||
index 97ed5ef3d..f078e04b8 100644
|
||||
--- a/libgdm/gdm-sessions.c
|
||||
+++ b/libgdm/gdm-sessions.c
|
||||
@@ -311,92 +311,111 @@ collect_sessions (void)
|
||||
g_ptr_array_add (wayland_search_array, g_strdup (wayland_search_dirs[i]));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (gdm_available_sessions_map == NULL) {
|
||||
gdm_available_sessions_map = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
g_free, (GDestroyNotify)gdm_session_file_free);
|
||||
}
|
||||
|
||||
if (!supported_session_types || g_strv_contains ((const char * const *) supported_session_types, "x11")) {
|
||||
for (i = 0; i < xorg_search_array->len; i++) {
|
||||
collect_sessions_from_directory (g_ptr_array_index (xorg_search_array, i));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
#ifdef ENABLE_USER_DISPLAY_SERVER
|
||||
if (!supported_session_types || g_strv_contains ((const char * const *) supported_session_types, "wayland")) {
|
||||
for (i = 0; i < wayland_search_array->len; i++) {
|
||||
collect_sessions_from_directory (g_ptr_array_index (wayland_search_array, i));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
g_hash_table_foreach_remove (gdm_available_sessions_map,
|
||||
remove_duplicate_sessions,
|
||||
names_seen_before);
|
||||
}
|
||||
|
||||
+static gint
|
||||
+compare_session_ids (gconstpointer a,
|
||||
+ gconstpointer b)
|
||||
+{
|
||||
+ GdmSessionFile *session_a, *session_b;
|
||||
+ session_a = (GdmSessionFile *) g_hash_table_lookup (gdm_available_sessions_map, a);
|
||||
+ session_b = (GdmSessionFile *) g_hash_table_lookup (gdm_available_sessions_map, b);
|
||||
+
|
||||
+ if (session_a == NULL)
|
||||
+ return -1;
|
||||
+
|
||||
+ if (session_b == NULL)
|
||||
+ return 1;
|
||||
+
|
||||
+ return g_strcmp0 (session_a->translated_name, session_b->translated_name);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* gdm_get_session_ids:
|
||||
*
|
||||
* Reads /usr/share/xsessions and other relevant places for possible sessions
|
||||
* to log into and returns the complete list.
|
||||
*
|
||||
* Returns: (transfer full): a %NULL terminated list of session ids
|
||||
*/
|
||||
char **
|
||||
gdm_get_session_ids (void)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
GPtrArray *array;
|
||||
|
||||
if (!gdm_sessions_map_is_initialized) {
|
||||
collect_sessions ();
|
||||
|
||||
gdm_sessions_map_is_initialized = TRUE;
|
||||
}
|
||||
|
||||
array = g_ptr_array_new ();
|
||||
g_hash_table_iter_init (&iter, gdm_available_sessions_map);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value)) {
|
||||
GdmSessionFile *session;
|
||||
|
||||
session = (GdmSessionFile *) value;
|
||||
|
||||
g_ptr_array_add (array, g_strdup (session->id));
|
||||
}
|
||||
g_ptr_array_add (array, NULL);
|
||||
|
||||
+ g_ptr_array_sort (array, compare_session_ids);
|
||||
+
|
||||
return (char **) g_ptr_array_free (array, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* gdm_get_session_name_and_description:
|
||||
* @id: an id from gdm_get_session_ids()
|
||||
* @description: (out): optional returned session description
|
||||
*
|
||||
* Takes an xsession id and returns the name and comment about it.
|
||||
*
|
||||
* Returns: The session name if found, or %NULL otherwise
|
||||
*/
|
||||
char *
|
||||
gdm_get_session_name_and_description (const char *id,
|
||||
char **description)
|
||||
{
|
||||
GdmSessionFile *session;
|
||||
char *name;
|
||||
|
||||
if (!gdm_sessions_map_is_initialized) {
|
||||
collect_sessions ();
|
||||
|
||||
gdm_sessions_map_is_initialized = TRUE;
|
||||
}
|
||||
|
||||
session = (GdmSessionFile *) g_hash_table_lookup (gdm_available_sessions_map,
|
||||
id);
|
||||
|
||||
if (session == NULL) {
|
||||
return NULL;
|
||||
--
|
||||
2.31.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 83cdeb662961f8910e79c56f38d9e5e296ac93be Mon Sep 17 00:00:00 2001
|
||||
From c4716129cc3042ca9fa2ab7ee420800d85ec09db Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 14 Aug 2018 14:52:41 -0400
|
||||
Subject: [PATCH 2/5] session: support new accountsservice Session and
|
||||
Subject: [PATCH 2/4] session: support new accountsservice Session and
|
||||
SessionType props
|
||||
|
||||
At the moment the user's session is stored in a property called
|
||||
@ -305,9 +305,9 @@ index 484a3b5b4..5b64cb65b 100644
|
||||
|
||||
- session_name = act_user_get_x_session (settings->priv->user);
|
||||
- g_debug ("GdmSessionSettings: saved session is %s", session_name);
|
||||
+ /* if the user doesn't have saved state, they don't have any settings worth reading */
|
||||
+ if (!act_user_get_saved (settings->priv->user))
|
||||
+ goto out;
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+ session_type = act_user_get_session_type (settings->priv->user);
|
||||
+ session_name = act_user_get_session (settings->priv->user);
|
||||
@ -754,7 +754,7 @@ index 4280fe095..a215779c8 100644
|
||||
</interface>
|
||||
</node>
|
||||
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
||||
index d95cef905..2d471ec46 100644
|
||||
index 6e6326243..73ae5cbc5 100644
|
||||
--- a/daemon/gdm-session.c
|
||||
+++ b/daemon/gdm-session.c
|
||||
@@ -61,60 +61,61 @@
|
||||
@ -819,25 +819,14 @@ index d95cef905..2d471ec46 100644
|
||||
char *display_name;
|
||||
char *display_hostname;
|
||||
char *display_device;
|
||||
@@ -319,312 +320,328 @@ on_establish_credentials_cb (GdmDBusWorker *proxy,
|
||||
return;
|
||||
|
||||
self = g_object_ref (conversation->session);
|
||||
service_name = g_strdup (conversation->service_name);
|
||||
|
||||
if (worked) {
|
||||
@@ -328,309 +329,325 @@ on_establish_credentials_cb (GdmDBusWorker *proxy,
|
||||
case GDM_SESSION_VERIFICATION_MODE_REAUTHENTICATE:
|
||||
if (self->user_verifier_interface != NULL) {
|
||||
gdm_dbus_user_verifier_emit_verification_complete (self->user_verifier_interface,
|
||||
service_name);
|
||||
g_signal_emit (self, signals[VERIFICATION_COMPLETE], 0, service_name);
|
||||
}
|
||||
|
||||
switch (self->verification_mode) {
|
||||
case GDM_SESSION_VERIFICATION_MODE_LOGIN:
|
||||
case GDM_SESSION_VERIFICATION_MODE_CHOOSER:
|
||||
gdm_session_open_session (self, service_name);
|
||||
break;
|
||||
case GDM_SESSION_VERIFICATION_MODE_REAUTHENTICATE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -849,6 +838,17 @@ index d95cef905..2d471ec46 100644
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
supports_session_type (GdmSession *self,
|
||||
const char *session_type)
|
||||
{
|
||||
if (session_type == NULL)
|
||||
return TRUE;
|
||||
|
||||
return g_strv_contains ((const char * const *) self->supported_session_types,
|
||||
session_type);
|
||||
}
|
||||
|
||||
static char **
|
||||
-get_system_session_dirs (GdmSession *self)
|
||||
+get_system_session_dirs (GdmSession *self,
|
||||
@ -856,7 +856,7 @@ index d95cef905..2d471ec46 100644
|
||||
{
|
||||
GArray *search_array = NULL;
|
||||
char **search_dirs;
|
||||
int i;
|
||||
int i, j;
|
||||
const gchar * const *system_data_dirs = g_get_system_data_dirs ();
|
||||
|
||||
static const char *x_search_dirs[] = {
|
||||
@ -870,40 +870,33 @@ index d95cef905..2d471ec46 100644
|
||||
|
||||
search_array = g_array_new (TRUE, TRUE, sizeof (char *));
|
||||
|
||||
- for (i = 0; system_data_dirs[i]; i++) {
|
||||
- gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
|
||||
- g_array_append_val (search_array, dir);
|
||||
- }
|
||||
+ if (type == NULL || strcmp (type, "x11") == 0) {
|
||||
+ for (i = 0; system_data_dirs[i]; i++) {
|
||||
+ gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
|
||||
+ g_array_append_val (search_array, dir);
|
||||
+ }
|
||||
for (j = 0; self->supported_session_types[j] != NULL; j++) {
|
||||
const char *supported_type = self->supported_session_types[j];
|
||||
|
||||
- g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
|
||||
+ g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
|
||||
+ }
|
||||
- if (g_str_equal (supported_type, "x11")) {
|
||||
+ if (g_str_equal (supported_type, "x11") ||
|
||||
+ (type == NULL || g_str_equal (type, supported_type))) {
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
|
||||
g_array_append_val (search_array, dir);
|
||||
}
|
||||
|
||||
g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
|
||||
}
|
||||
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
- if (!self->ignore_wayland) {
|
||||
+ if ((!self->ignore_wayland && type == NULL) || g_strcmp0 (type, "wayland") == 0) {
|
||||
#ifdef ENABLE_USER_DISPLAY_SERVER
|
||||
g_array_prepend_val (search_array, wayland_search_dir);
|
||||
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
|
||||
g_array_insert_val (search_array, i, dir);
|
||||
}
|
||||
#else
|
||||
- if (g_str_equal (supported_type, "wayland")) {
|
||||
+ if (g_str_equal (supported_type, "wayland") ||
|
||||
+ (type == NULL || g_str_equal (type, supported_type))) {
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
|
||||
g_array_append_val (search_array, dir);
|
||||
}
|
||||
|
||||
g_array_append_val (search_array, wayland_search_dir);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
search_dirs = g_strdupv ((char **) search_array->data);
|
||||
|
||||
@ -983,9 +976,9 @@ index d95cef905..2d471ec46 100644
|
||||
*command = NULL;
|
||||
}
|
||||
|
||||
+ if (self->ignore_wayland && g_strcmp0 (type, "wayland") == 0) {
|
||||
+ g_debug ("GdmSession: ignoring wayland session command request for file '%s'",
|
||||
+ file);
|
||||
+ if (!supports_session_type (self, type)) {
|
||||
+ g_debug ("GdmSession: ignoring %s session command request for file '%s'",
|
||||
+ type, file);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
@ -1165,7 +1158,7 @@ index d95cef905..2d471ec46 100644
|
||||
|
||||
out:
|
||||
return self->fallback_session_name;
|
||||
@@ -643,60 +660,63 @@ get_default_session_name (GdmSession *self)
|
||||
@@ -649,60 +666,63 @@ get_default_session_name (GdmSession *self)
|
||||
static void
|
||||
gdm_session_defaults_changed (GdmSession *self)
|
||||
{
|
||||
@ -1229,7 +1222,7 @@ index d95cef905..2d471ec46 100644
|
||||
|
||||
static void
|
||||
set_pending_query (GdmSessionConversation *conversation,
|
||||
@@ -963,80 +983,91 @@ worker_on_reauthenticated (GdmDBusWorker *worker,
|
||||
@@ -969,80 +989,91 @@ worker_on_reauthenticated (GdmDBusWorker *worker,
|
||||
GdmSession *self = conversation->session;
|
||||
g_debug ("GdmSession: Emitting 'reauthenticated' signal ");
|
||||
g_signal_emit (self, signals[REAUTHENTICATED], 0, service_name);
|
||||
@ -1322,7 +1315,7 @@ index d95cef905..2d471ec46 100644
|
||||
uid_t connecting_user;
|
||||
|
||||
connecting_user = g_credentials_get_unix_user (credentials, NULL);
|
||||
@@ -1116,60 +1147,63 @@ register_worker (GdmDBusWorkerManager *worker_manager_interface,
|
||||
@@ -1122,60 +1153,63 @@ register_worker (GdmDBusWorkerManager *worker_manager_interface,
|
||||
g_dbus_method_invocation_return_value (invocation, NULL);
|
||||
|
||||
conversation->worker_proxy = gdm_dbus_worker_proxy_new_sync (connection,
|
||||
@ -1386,7 +1379,7 @@ index d95cef905..2d471ec46 100644
|
||||
g_debug ("GdmSession: Conversation started");
|
||||
|
||||
return TRUE;
|
||||
@@ -1912,60 +1946,63 @@ free_conversation (GdmSessionConversation *conversation)
|
||||
@@ -1918,60 +1952,63 @@ free_conversation (GdmSessionConversation *conversation)
|
||||
close_conversation (conversation);
|
||||
|
||||
if (conversation->job != NULL) {
|
||||
@ -1450,7 +1443,7 @@ index d95cef905..2d471ec46 100644
|
||||
error = NULL;
|
||||
if (!g_file_get_contents (config_file, &contents, &length, &error)) {
|
||||
g_debug ("Failed to parse '%s': %s",
|
||||
@@ -2520,83 +2557,83 @@ gdm_session_send_environment (GdmSession *self,
|
||||
@@ -2530,83 +2567,83 @@ gdm_session_send_environment (GdmSession *self,
|
||||
g_return_if_fail (GDM_IS_SESSION (self));
|
||||
|
||||
conversation = find_conversation_by_name (self, service_name);
|
||||
@ -1536,8 +1529,7 @@ index d95cef905..2d471ec46 100644
|
||||
g_strdup (value));
|
||||
}
|
||||
|
||||
@@ -3165,85 +3202,87 @@ gdm_session_get_conversation_session_id (GdmSession *self,
|
||||
|
||||
@@ -3176,148 +3213,150 @@ gdm_session_get_conversation_session_id (GdmSession *self,
|
||||
conversation = find_conversation_by_name (self, service_name);
|
||||
|
||||
if (conversation == NULL) {
|
||||
@ -1567,11 +1559,16 @@ index d95cef905..2d471ec46 100644
|
||||
|
||||
filename = get_session_filename (self);
|
||||
|
||||
if (supports_session_type (self, "wayland")) {
|
||||
- key_file = load_key_file_for_file (self, filename, &full_path);
|
||||
+ key_file = load_key_file_for_file (self, filename, "wayland", &full_path);
|
||||
+ key_file = load_key_file_for_file (self, filename, NULL, &full_path);
|
||||
|
||||
if (key_file == NULL) {
|
||||
goto out;
|
||||
- if (key_file == NULL) {
|
||||
- goto out;
|
||||
- }
|
||||
+ if (key_file == NULL) {
|
||||
+ goto out;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (full_path != NULL && strstr (full_path, "/wayland-sessions/") != NULL) {
|
||||
@ -1593,7 +1590,7 @@ index d95cef905..2d471ec46 100644
|
||||
- gboolean is_wayland_session;
|
||||
+ gboolean is_wayland_session = FALSE;
|
||||
+
|
||||
+ if (!self->ignore_wayland)
|
||||
+ if (supports_session_type (self, "wayland"))
|
||||
+ is_wayland_session = gdm_session_is_wayland_session (self);
|
||||
|
||||
- is_wayland_session = gdm_session_is_wayland_session (self);
|
||||
@ -1618,7 +1615,8 @@ index d95cef905..2d471ec46 100644
|
||||
|
||||
filename = get_session_filename (self);
|
||||
|
||||
key_file = load_key_file_for_file (self, filename, NULL);
|
||||
- key_file = load_key_file_for_file (self, filename, NULL);
|
||||
+ key_file = load_key_file_for_file (self, filename, NULL, NULL);
|
||||
|
||||
session_registers = g_key_file_get_boolean (key_file,
|
||||
G_KEY_FILE_DESKTOP_GROUP,
|
||||
@ -1627,7 +1625,7 @@ index d95cef905..2d471ec46 100644
|
||||
if (!session_registers &&
|
||||
error != NULL &&
|
||||
!g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
|
||||
@@ -3251,61 +3290,61 @@ gdm_session_session_registers (GdmSession *self)
|
||||
g_warning ("GdmSession: Couldn't read session file '%s'", filename);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 35e2d1d298607c3fdb2cbbfb1cf878dc9cbbf546 Mon Sep 17 00:00:00 2001
|
||||
From 09e4f57ea2525e48bd22a34cb0c9b917ce7565df Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Mon, 20 Aug 2018 14:30:59 -0400
|
||||
Subject: [PATCH 3/5] daemon: save os-release in accountsservice
|
||||
Subject: [PATCH 3/4] daemon: save os-release in accountsservice
|
||||
|
||||
It can be useful to know what OS a user was running
|
||||
when they logged in (to detect upgrades).
|
||||
@ -10,8 +10,9 @@ This commit saves that information in accountsservice.
|
||||
---
|
||||
.../com.redhat.AccountsServiceUser.System.xml | 10 ++
|
||||
daemon/gdm-session-settings.c | 98 +++++++++++++++++++
|
||||
daemon/gdm-session.c | 4 +-
|
||||
daemon/meson.build | 8 ++
|
||||
3 files changed, 116 insertions(+)
|
||||
4 files changed, 118 insertions(+), 2 deletions(-)
|
||||
create mode 100644 daemon/com.redhat.AccountsServiceUser.System.xml
|
||||
|
||||
diff --git a/daemon/com.redhat.AccountsServiceUser.System.xml b/daemon/com.redhat.AccountsServiceUser.System.xml
|
||||
@ -232,9 +233,9 @@ index 5b64cb65b..5bcfdc14f 100644
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* if the user doesn't have saved state, they don't have any settings worth reading */
|
||||
if (!act_user_get_saved (settings->priv->user))
|
||||
goto out;
|
||||
|
||||
|
||||
|
||||
|
||||
session_type = act_user_get_session_type (settings->priv->user);
|
||||
session_name = act_user_get_session (settings->priv->user);
|
||||
@ -399,6 +400,85 @@ index 5b64cb65b..5bcfdc14f 100644
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
||||
index 73ae5cbc5..ce6df14c6 100644
|
||||
--- a/daemon/gdm-session.c
|
||||
+++ b/daemon/gdm-session.c
|
||||
@@ -351,72 +351,72 @@ supports_session_type (GdmSession *self,
|
||||
if (session_type == NULL)
|
||||
return TRUE;
|
||||
|
||||
return g_strv_contains ((const char * const *) self->supported_session_types,
|
||||
session_type);
|
||||
}
|
||||
|
||||
static char **
|
||||
get_system_session_dirs (GdmSession *self,
|
||||
const char *type)
|
||||
{
|
||||
GArray *search_array = NULL;
|
||||
char **search_dirs;
|
||||
int i, j;
|
||||
const gchar * const *system_data_dirs = g_get_system_data_dirs ();
|
||||
|
||||
static const char *x_search_dirs[] = {
|
||||
"/etc/X11/sessions/",
|
||||
DMCONFDIR "/Sessions/",
|
||||
DATADIR "/gdm/BuiltInSessions/",
|
||||
DATADIR "/xsessions/",
|
||||
};
|
||||
|
||||
static const char *wayland_search_dir = DATADIR "/wayland-sessions/";
|
||||
|
||||
search_array = g_array_new (TRUE, TRUE, sizeof (char *));
|
||||
|
||||
for (j = 0; self->supported_session_types[j] != NULL; j++) {
|
||||
const char *supported_type = self->supported_session_types[j];
|
||||
|
||||
- if (g_str_equal (supported_type, "x11") ||
|
||||
+ if (g_str_equal (supported_type, "x11") &&
|
||||
(type == NULL || g_str_equal (type, supported_type))) {
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
gchar *dir = g_build_filename (system_data_dirs[i], "xsessions", NULL);
|
||||
g_array_append_val (search_array, dir);
|
||||
}
|
||||
|
||||
g_array_append_vals (search_array, x_search_dirs, G_N_ELEMENTS (x_search_dirs));
|
||||
}
|
||||
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
- if (g_str_equal (supported_type, "wayland") ||
|
||||
+ if (g_str_equal (supported_type, "wayland") &&
|
||||
(type == NULL || g_str_equal (type, supported_type))) {
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
|
||||
g_array_append_val (search_array, dir);
|
||||
}
|
||||
|
||||
g_array_append_val (search_array, wayland_search_dir);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
search_dirs = g_strdupv ((char **) search_array->data);
|
||||
|
||||
g_array_free (search_array, TRUE);
|
||||
|
||||
return search_dirs;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
is_prog_in_path (const char *prog)
|
||||
{
|
||||
char *f;
|
||||
gboolean ret;
|
||||
|
||||
f = g_find_program_in_path (prog);
|
||||
ret = (f != NULL);
|
||||
g_free (f);
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff --git a/daemon/meson.build b/daemon/meson.build
|
||||
index 2e61b6447..71c650398 100644
|
||||
--- a/daemon/meson.build
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 9a2de416bc13fc40a6d7f2e4e6cb9cf64be2854f Mon Sep 17 00:00:00 2001
|
||||
From 64e8db8432158e5115df18a03bb87ecc1d58ae63 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Mon, 11 Feb 2019 10:32:55 -0500
|
||||
Subject: [PATCH 3/3] session: ensure login screen over XDMCP connects to its
|
||||
@ -17,10 +17,10 @@ the session is X11.
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
||||
index c891fb577..d95cef905 100644
|
||||
index 77d6b8ff0..357e4a297 100644
|
||||
--- a/daemon/gdm-session.c
|
||||
+++ b/daemon/gdm-session.c
|
||||
@@ -2686,60 +2686,79 @@ set_up_session_environment (GdmSession *self)
|
||||
@@ -2697,60 +2697,79 @@ set_up_session_environment (GdmSession *self)
|
||||
}
|
||||
|
||||
static void
|
||||
@ -101,5 +101,5 @@ index c891fb577..d95cef905 100644
|
||||
gpointer key, value;
|
||||
|
||||
--
|
||||
2.31.1
|
||||
2.30.1
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 234fdc6e4bd4d4c19fefba27495db5bdc9642217 Mon Sep 17 00:00:00 2001
|
||||
From de103948b84188cd2273c9aab904a633323a9479 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Mon, 20 Aug 2018 14:30:59 -0400
|
||||
Subject: [PATCH 4/5] daemon: handle upgrades from RHEL 7
|
||||
Subject: [PATCH 4/4] daemon: handle upgrades from RHEL 7
|
||||
|
||||
RHEL 7 users need to stay on X if they were using X,
|
||||
and they need to stay on gnome-classic if they were using
|
||||
@ -12,7 +12,8 @@ or not they were using RHEL 7 and in the event they were
|
||||
try to get the right settings.
|
||||
---
|
||||
daemon/gdm-session-settings.c | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
daemon/gdm-session.c | 19 ++++++++-----------
|
||||
2 files changed, 27 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/daemon/gdm-session-settings.c b/daemon/gdm-session-settings.c
|
||||
index 5bcfdc14f..a7eaa8b2f 100644
|
||||
@ -79,9 +80,9 @@ index 5bcfdc14f..a7eaa8b2f 100644
|
||||
}
|
||||
}
|
||||
|
||||
/* if the user doesn't have saved state, they don't have any settings worth reading */
|
||||
if (!act_user_get_saved (settings->priv->user))
|
||||
goto out;
|
||||
|
||||
|
||||
|
||||
|
||||
session_type = act_user_get_session_type (settings->priv->user);
|
||||
session_name = act_user_get_session (settings->priv->user);
|
||||
@ -133,6 +134,117 @@ index 5bcfdc14f..a7eaa8b2f 100644
|
||||
G_CALLBACK (on_user_is_loaded_changed),
|
||||
settings);
|
||||
}
|
||||
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
||||
index ce6df14c6..6bda6d6e2 100644
|
||||
--- a/daemon/gdm-session.c
|
||||
+++ b/daemon/gdm-session.c
|
||||
@@ -3202,98 +3202,95 @@ gdm_session_get_session_id (GdmSession *self)
|
||||
return conversation->session_id;
|
||||
}
|
||||
|
||||
const char *
|
||||
gdm_session_get_conversation_session_id (GdmSession *self,
|
||||
const char *service_name)
|
||||
{
|
||||
GdmSessionConversation *conversation;
|
||||
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), NULL);
|
||||
|
||||
conversation = find_conversation_by_name (self, service_name);
|
||||
|
||||
if (conversation == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return conversation->session_id;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_session_filename (GdmSession *self)
|
||||
{
|
||||
return g_strdup_printf ("%s.desktop", get_session_name (self));
|
||||
}
|
||||
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
static gboolean
|
||||
gdm_session_is_wayland_session (GdmSession *self)
|
||||
{
|
||||
- GKeyFile *key_file;
|
||||
+ g_autoptr (GKeyFile) key_file = NULL;
|
||||
gboolean is_wayland_session = FALSE;
|
||||
- char *filename;
|
||||
- char *full_path = NULL;
|
||||
+ g_autofree char *filename = NULL;
|
||||
+ g_autofree char *full_path = NULL;
|
||||
|
||||
g_return_val_if_fail (self != NULL, FALSE);
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
|
||||
|
||||
filename = get_session_filename (self);
|
||||
|
||||
if (supports_session_type (self, "wayland")) {
|
||||
key_file = load_key_file_for_file (self, filename, NULL, &full_path);
|
||||
|
||||
if (key_file == NULL) {
|
||||
goto out;
|
||||
}
|
||||
- }
|
||||
|
||||
- if (full_path != NULL && strstr (full_path, "/wayland-sessions/") != NULL) {
|
||||
- is_wayland_session = TRUE;
|
||||
+ if (full_path != NULL && strstr (full_path, "/wayland-sessions/") != NULL) {
|
||||
+ is_wayland_session = TRUE;
|
||||
+ }
|
||||
}
|
||||
- g_debug ("GdmSession: checking if file '%s' is wayland session: %s", filename, is_wayland_session? "yes" : "no");
|
||||
|
||||
out:
|
||||
- g_clear_pointer (&key_file, g_key_file_free);
|
||||
- g_free (filename);
|
||||
+ g_debug ("GdmSession: checking if file '%s' is wayland session: %s", filename, is_wayland_session? "yes" : "no");
|
||||
return is_wayland_session;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
update_session_type (GdmSession *self)
|
||||
{
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
gboolean is_wayland_session = FALSE;
|
||||
|
||||
- if (supports_session_type (self, "wayland"))
|
||||
- is_wayland_session = gdm_session_is_wayland_session (self);
|
||||
+ is_wayland_session = gdm_session_is_wayland_session (self);
|
||||
|
||||
if (is_wayland_session) {
|
||||
set_session_type (self, "wayland");
|
||||
} else {
|
||||
set_session_type (self, NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdm_session_session_registers (GdmSession *self)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GKeyFile) key_file = NULL;
|
||||
gboolean session_registers = FALSE;
|
||||
g_autofree char *filename = NULL;
|
||||
|
||||
g_return_val_if_fail (self != NULL, FALSE);
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
|
||||
|
||||
filename = get_session_filename (self);
|
||||
|
||||
key_file = load_key_file_for_file (self, filename, NULL, NULL);
|
||||
|
||||
session_registers = g_key_file_get_boolean (key_file,
|
||||
G_KEY_FILE_DESKTOP_GROUP,
|
||||
"X-GDM-SessionRegisters",
|
||||
&error);
|
||||
if (!session_registers &&
|
||||
error != NULL &&
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
@ -1,221 +0,0 @@
|
||||
From 4862efc8bb38e97a785bd9c368d9b701c2acba68 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Sun, 15 Dec 2019 14:51:44 -0500
|
||||
Subject: [PATCH 5/5] daemon: fix wayland detection when deciding to bypass
|
||||
Xsession
|
||||
|
||||
At the moment if there's a session file with the same name in
|
||||
both /usr/share/xsessions and /usr/share/wayland-sessions, GDM
|
||||
will think the wayland is getting used when deciding whether or
|
||||
not to bypass the /etc/gdm/Xsession script, even if wayland is
|
||||
explicitly being ignored.
|
||||
|
||||
This commit fixes the check.
|
||||
---
|
||||
daemon/gdm-session.c | 31 +++++++++++++++----------------
|
||||
1 file changed, 15 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
||||
index 2d471ec46..38a32fdab 100644
|
||||
--- a/daemon/gdm-session.c
|
||||
+++ b/daemon/gdm-session.c
|
||||
@@ -2898,61 +2898,61 @@ gdm_session_start_session (GdmSession *self,
|
||||
char *command;
|
||||
char *program;
|
||||
gboolean register_session;
|
||||
|
||||
g_return_if_fail (GDM_IS_SESSION (self));
|
||||
g_return_if_fail (self->session_conversation == NULL);
|
||||
|
||||
conversation = find_conversation_by_name (self, service_name);
|
||||
|
||||
if (conversation == NULL) {
|
||||
g_warning ("GdmSession: Tried to start session of "
|
||||
"nonexistent conversation %s", service_name);
|
||||
return;
|
||||
}
|
||||
|
||||
stop_all_other_conversations (self, conversation, FALSE);
|
||||
|
||||
display_mode = gdm_session_get_display_mode (self);
|
||||
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
is_x11 = g_strcmp0 (self->session_type, "wayland") != 0;
|
||||
#endif
|
||||
|
||||
if (display_mode == GDM_SESSION_DISPLAY_MODE_LOGIND_MANAGED ||
|
||||
display_mode == GDM_SESSION_DISPLAY_MODE_NEW_VT) {
|
||||
run_launcher = TRUE;
|
||||
}
|
||||
|
||||
register_session = !gdm_session_session_registers (self);
|
||||
|
||||
- if (g_strcmp0 (priv->display_seat_id, "seat0") != 0 && !run_launcher) {
|
||||
+ if (g_strcmp0 (self->display_seat_id, "seat0") != 0 && !run_launcher) {
|
||||
run_separate_bus = TRUE;
|
||||
}
|
||||
|
||||
if (self->selected_program == NULL) {
|
||||
gboolean run_xsession_script;
|
||||
|
||||
command = get_session_command (self);
|
||||
|
||||
run_xsession_script = !gdm_session_bypasses_xsession (self);
|
||||
|
||||
if (self->display_is_local) {
|
||||
gboolean disallow_tcp = TRUE;
|
||||
gdm_settings_direct_get_boolean (GDM_KEY_DISALLOW_TCP, &disallow_tcp);
|
||||
allow_remote_connections = !disallow_tcp;
|
||||
} else {
|
||||
allow_remote_connections = TRUE;
|
||||
}
|
||||
|
||||
if (run_launcher) {
|
||||
if (is_x11) {
|
||||
program = g_strdup_printf (LIBEXECDIR "/gdm-x-session %s%s %s\"%s\"",
|
||||
register_session ? "--register-session " : "",
|
||||
run_xsession_script? "--run-script " : "",
|
||||
allow_remote_connections? "--allow-remote-connections " : "",
|
||||
command);
|
||||
} else {
|
||||
program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"%s\"",
|
||||
register_session ? "--register-session " : "",
|
||||
command);
|
||||
}
|
||||
@@ -3192,119 +3192,118 @@ gdm_session_get_session_id (GdmSession *self)
|
||||
return conversation->session_id;
|
||||
}
|
||||
|
||||
const char *
|
||||
gdm_session_get_conversation_session_id (GdmSession *self,
|
||||
const char *service_name)
|
||||
{
|
||||
GdmSessionConversation *conversation;
|
||||
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), NULL);
|
||||
|
||||
conversation = find_conversation_by_name (self, service_name);
|
||||
|
||||
if (conversation == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return conversation->session_id;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_session_filename (GdmSession *self)
|
||||
{
|
||||
return g_strdup_printf ("%s.desktop", get_session_name (self));
|
||||
}
|
||||
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
static gboolean
|
||||
gdm_session_is_wayland_session (GdmSession *self)
|
||||
{
|
||||
- GKeyFile *key_file;
|
||||
+ g_autoptr (GKeyFile) key_file = NULL;
|
||||
gboolean is_wayland_session = FALSE;
|
||||
- char *filename;
|
||||
- char *full_path = NULL;
|
||||
+ g_autofree char *filename = NULL;
|
||||
+ g_autofree char *full_path = NULL;
|
||||
|
||||
g_return_val_if_fail (self != NULL, FALSE);
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
|
||||
|
||||
filename = get_session_filename (self);
|
||||
|
||||
- key_file = load_key_file_for_file (self, filename, "wayland", &full_path);
|
||||
+ if (!self->ignore_wayland) {
|
||||
+ key_file = load_key_file_for_file (self, filename, "wayland", &full_path);
|
||||
|
||||
- if (key_file == NULL) {
|
||||
- goto out;
|
||||
- }
|
||||
+ if (key_file == NULL) {
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
- if (full_path != NULL && strstr (full_path, "/wayland-sessions/") != NULL) {
|
||||
- is_wayland_session = TRUE;
|
||||
+ if (full_path != NULL && strstr (full_path, "/wayland-sessions/") != NULL) {
|
||||
+ is_wayland_session = TRUE;
|
||||
+ }
|
||||
}
|
||||
- g_debug ("GdmSession: checking if file '%s' is wayland session: %s", filename, is_wayland_session? "yes" : "no");
|
||||
|
||||
out:
|
||||
- g_clear_pointer (&key_file, g_key_file_free);
|
||||
- g_free (filename);
|
||||
+ g_debug ("GdmSession: checking if file '%s' is wayland session: %s", filename, is_wayland_session? "yes" : "no");
|
||||
return is_wayland_session;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
update_session_type (GdmSession *self)
|
||||
{
|
||||
#ifdef ENABLE_WAYLAND_SUPPORT
|
||||
gboolean is_wayland_session = FALSE;
|
||||
|
||||
- if (!self->ignore_wayland)
|
||||
- is_wayland_session = gdm_session_is_wayland_session (self);
|
||||
+ is_wayland_session = gdm_session_is_wayland_session (self);
|
||||
|
||||
if (is_wayland_session) {
|
||||
set_session_type (self, "wayland");
|
||||
} else {
|
||||
set_session_type (self, NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdm_session_session_registers (GdmSession *self)
|
||||
{
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GKeyFile) key_file = NULL;
|
||||
gboolean session_registers = FALSE;
|
||||
g_autofree char *filename = NULL;
|
||||
|
||||
g_return_val_if_fail (self != NULL, FALSE);
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
|
||||
|
||||
filename = get_session_filename (self);
|
||||
|
||||
- key_file = load_key_file_for_file (self, filename, NULL);
|
||||
+ key_file = load_key_file_for_file (self, filename, NULL, NULL);
|
||||
|
||||
session_registers = g_key_file_get_boolean (key_file,
|
||||
G_KEY_FILE_DESKTOP_GROUP,
|
||||
"X-GDM-SessionRegisters",
|
||||
&error);
|
||||
if (!session_registers &&
|
||||
error != NULL &&
|
||||
!g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {
|
||||
g_warning ("GdmSession: Couldn't read session file '%s'", filename);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_debug ("GdmSession: '%s' %s self", filename,
|
||||
session_registers ? "registers" : "does not register");
|
||||
|
||||
return session_registers;
|
||||
}
|
||||
|
||||
gboolean
|
||||
gdm_session_bypasses_xsession (GdmSession *self)
|
||||
{
|
||||
GError *error;
|
||||
GKeyFile *key_file;
|
||||
gboolean res;
|
||||
gboolean bypasses_xsession = FALSE;
|
||||
char *filename = NULL;
|
||||
|
||||
g_return_val_if_fail (self != NULL, FALSE);
|
||||
g_return_val_if_fail (GDM_IS_SESSION (self), FALSE);
|
||||
|
||||
--
|
||||
2.31.1
|
||||
|
@ -12,7 +12,7 @@
|
||||
Name: gdm
|
||||
Epoch: 1
|
||||
Version: 40.0
|
||||
Release: 3%{?dist}
|
||||
Release: 12%{?dist}
|
||||
Summary: The GNOME Display Manager
|
||||
|
||||
License: GPLv2+
|
||||
@ -20,6 +20,10 @@ URL: https://wiki.gnome.org/Projects/GDM
|
||||
Source0: http://download.gnome.org/sources/gdm/40/gdm-%{version}.tar.xz
|
||||
Source1: org.gnome.login-screen.gschema.override
|
||||
|
||||
# Lets customers using vendor nvidia driver pick wayland sessions from the login screen
|
||||
Patch10001: 0001-local-display-factory-Provide-more-flexibility-for-c.patch
|
||||
Patch10002: 0002-libgdm-Sort-session-list.patch
|
||||
|
||||
# Race fix
|
||||
Patch40001: 0001-display-Handle-failure-before-display-registration.patch
|
||||
|
||||
@ -45,7 +49,6 @@ Patch99920001: 0001-worker-don-t-load-user-settings-for-program-sessions.patch
|
||||
Patch99920002: 0002-session-support-new-accountsservice-Session-and-Sess.patch
|
||||
Patch99920003: 0003-daemon-save-os-release-in-accountsservice.patch
|
||||
Patch99920004: 0004-daemon-handle-upgrades-from-RHEL-7.patch
|
||||
Patch99920005: 0005-daemon-fix-wayland-detection-when-deciding-to-bypass.patch
|
||||
|
||||
Patch99920006: 0001-data-Disable-network-configuration-on-login-screen.patch
|
||||
|
||||
@ -357,6 +360,21 @@ fi
|
||||
%{_libdir}/pkgconfig/gdm-pam-extensions.pc
|
||||
|
||||
%changelog
|
||||
* Thu Aug 19 2021 Ray Strode <rstrode@redhat.com> - 40.0-12
|
||||
- Redisable on server chips since rebase
|
||||
Related: #1909300
|
||||
|
||||
* Wed Aug 04 2021 Ray Strode <rstrode@redhat.com> - 40.0-11
|
||||
- Read session settings from users even if they've never saved
|
||||
before. Needed to support accountsservice templated user
|
||||
defaults.
|
||||
Related: #1812788
|
||||
|
||||
* Tue Jul 27 2021 Ray Strode <rstrode@redhat.com> - 40.0-10
|
||||
- Let customers using vendor nvidia driver choose wayland sessions
|
||||
Resolves: #1962211
|
||||
- Drop unused patches
|
||||
|
||||
* Tue Jun 08 2021 Florian Müllner <fmuellner@redhat.com> - 40.0-3
|
||||
- Disable network items on login screen
|
||||
Resolves: #1935261
|
||||
|
Loading…
Reference in New Issue
Block a user