From 23a2bfcf8a4bc47d53273163cba84afa4f5f08f3 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sat, 6 Sep 2025 17:16:53 +0000 Subject: [PATCH] =?UTF-8?q?gdm:=2048.0=20=E2=86=92=2049.rc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://gitlab.gnome.org/GNOME/gdm/-/compare/48.0...49.rc Co-authored-by: Bobby Rong Changelog-Reviewed-By: Jan Tojnar --- .../modules/services/display-managers/gdm.nix | 42 +++++++++++-- pkgs/by-name/gd/gdm/fix-paths.patch | 63 ++++++++++--------- pkgs/by-name/gd/gdm/package.nix | 8 ++- 3 files changed, 77 insertions(+), 36 deletions(-) diff --git a/nixos/modules/services/display-managers/gdm.nix b/nixos/modules/services/display-managers/gdm.nix index bdf1822c4816..cd8a168c7347 100644 --- a/nixos/modules/services/display-managers/gdm.nix +++ b/nixos/modules/services/display-managers/gdm.nix @@ -183,10 +183,44 @@ in name = "gdm"; uid = config.ids.uids.gdm; group = "gdm"; - home = "/run/gdm"; description = "GDM user"; }; + users.users.gdm-greeter = { + isSystemUser = true; + uid = 60578; + group = "gdm"; + home = "/run/gdm"; + }; + + users.users.gdm-greeter-1 = { + isSystemUser = true; + uid = 60579; + group = "gdm"; + home = "/run/gdm-1"; + }; + + users.users.gdm-greeter-2 = { + isSystemUser = true; + uid = 60580; + group = "gdm"; + home = "/run/gdm-2"; + }; + + users.users.gdm-greeter-3 = { + isSystemUser = true; + uid = 60581; + group = "gdm"; + home = "/run/gdm-3"; + }; + + users.users.gdm-greeter-4 = { + isSystemUser = true; + uid = 60582; + group = "gdm"; + home = "/run/gdm-4"; + }; + users.groups.gdm.gid = config.ids.gids.gdm; # GDM needs different xserverArgs, presumable because using wayland by default. @@ -348,15 +382,15 @@ in # GDM LFS PAM modules, adapted somehow to NixOS security.pam.services = { gdm-launch-environment.text = '' - auth required pam_succeed_if.so audit quiet_success user = gdm + auth required pam_succeed_if.so audit quiet_success user ingroup gdm auth optional pam_permit.so - account required pam_succeed_if.so audit quiet_success user = gdm + account required pam_succeed_if.so audit quiet_success user ingroup gdm account sufficient pam_unix.so password required pam_deny.so - session required pam_succeed_if.so audit quiet_success user = gdm + session required pam_succeed_if.so audit quiet_success user ingroup gdm session required pam_env.so conffile=/etc/pam/environment readenv=0 session optional ${config.systemd.package}/lib/security/pam_systemd.so session optional pam_keyinit.so force revoke diff --git a/pkgs/by-name/gd/gdm/fix-paths.patch b/pkgs/by-name/gd/gdm/fix-paths.patch index 93763ce5ff09..bd4e92e4aadb 100644 --- a/pkgs/by-name/gd/gdm/fix-paths.patch +++ b/pkgs/by-name/gd/gdm/fix-paths.patch @@ -1,7 +1,8 @@ diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c +index 513b9733d..0c1c8007f 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c -@@ -245,9 +245,9 @@ struct GdmDisplayServerConfiguration { +@@ -269,10 +269,10 @@ struct GdmDisplayServerConfiguration { const char *session_type; } display_server_configuration[] = { #ifdef ENABLE_WAYLAND_SUPPORT @@ -15,10 +16,10 @@ diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-facto { NULL, NULL, NULL }, }; diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c -index fc5aef6ac..c61e0046b 100644 +index 9568e963f..b1bc8800a 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c -@@ -151,7 +151,7 @@ plymouth_is_running (void) +@@ -154,7 +154,7 @@ plymouth_is_running (void) GError *error; error = NULL; @@ -27,7 +28,7 @@ index fc5aef6ac..c61e0046b 100644 NULL, NULL, &status, &error); if (! res) { g_debug ("Could not ping plymouth: %s", error->message); -@@ -169,7 +169,7 @@ plymouth_prepare_for_transition (void) +@@ -172,7 +172,7 @@ plymouth_prepare_for_transition (void) GError *error; error = NULL; @@ -36,7 +37,7 @@ index fc5aef6ac..c61e0046b 100644 NULL, NULL, NULL, &error); if (! res) { g_warning ("Could not deactivate plymouth: %s", error->message); -@@ -184,7 +184,7 @@ plymouth_quit_with_transition (void) +@@ -187,7 +187,7 @@ plymouth_quit_with_transition (void) GError *error; error = NULL; @@ -45,7 +46,7 @@ index fc5aef6ac..c61e0046b 100644 if (! res) { g_warning ("Could not quit plymouth: %s", error->message); g_error_free (error); -@@ -200,7 +200,7 @@ plymouth_quit_without_transition (void) +@@ -203,7 +203,7 @@ plymouth_quit_without_transition (void) GError *error; error = NULL; @@ -54,30 +55,32 @@ index fc5aef6ac..c61e0046b 100644 if (! res) { g_warning ("Could not quit plymouth: %s", error->message); g_error_free (error); -diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c -index a4c4b2dcf..67416b204 100644 ---- a/daemon/gdm-session.c -+++ b/daemon/gdm-session.c -@@ -3193,16 +3193,16 @@ gdm_session_start_session (GdmSession *self, - */ - if (run_launcher) { - if (is_x11) { -- program = g_strdup_printf (LIBEXECDIR "/gdm-x-session %s\"dbus-run-session -- %s\"", -+ program = g_strdup_printf (LIBEXECDIR "/gdm-x-session %s\"@dbus@/bin/dbus-run-session --dbus-daemon=@dbus@/bin/dbus-daemon -- %s\"", - register_session ? "--register-session " : "", - self->selected_program); - } else { -- program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"dbus-run-session -- %s\"", -+ program = g_strdup_printf (LIBEXECDIR "/gdm-wayland-session %s\"@dbus@/bin/dbus-run-session --dbus-daemon=@dbus@/bin/dbus-daemon -- %s\"", - register_session ? "--register-session " : "", - self->selected_program); - } - } else { -- program = g_strdup_printf ("dbus-run-session -- %s", -+ program = g_strdup_printf ("@dbus@/bin/dbus-run-session --dbus-daemon=@dbus@/bin/dbus-daemon -- %s", - self->selected_program); - } - } +diff --git a/daemon/gdm-wayland-session.c b/daemon/gdm-wayland-session.c +index d0404d2c1..e916c2723 100644 +--- a/daemon/gdm-wayland-session.c ++++ b/daemon/gdm-wayland-session.c +@@ -136,7 +136,7 @@ spawn_bus (State *state, + + bus_address_fd_string = g_strdup_printf ("%d", BUS_ADDRESS_FILENO); + +- g_ptr_array_add (arguments, "dbus-daemon"); ++ g_ptr_array_add (arguments, "@dbus@/bin/dbus-daemon"); + + g_ptr_array_add (arguments, "--print-address"); + g_ptr_array_add (arguments, bus_address_fd_string); +diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c +index a998d1555..4fe50a2d0 100644 +--- a/daemon/gdm-x-session.c ++++ b/daemon/gdm-x-session.c +@@ -463,7 +463,7 @@ spawn_bus (State *state, + + bus_address_fd_string = g_strdup_printf ("%d", BUS_ADDRESS_FILENO); + +- g_ptr_array_add (arguments, "dbus-daemon"); ++ g_ptr_array_add (arguments, "@dbus@/bin/dbus-daemon"); + + g_ptr_array_add (arguments, "--print-address"); + g_ptr_array_add (arguments, bus_address_fd_string); diff --git a/data/gdm.service.in b/data/gdm.service.in index 17e8a8de8..afc709778 100644 --- a/data/gdm.service.in diff --git a/pkgs/by-name/gd/gdm/package.nix b/pkgs/by-name/gd/gdm/package.nix index 9145153e384a..33ed32667c38 100644 --- a/pkgs/by-name/gd/gdm/package.nix +++ b/pkgs/by-name/gd/gdm/package.nix @@ -44,7 +44,7 @@ in stdenv.mkDerivation (finalAttrs: { pname = "gdm"; - version = "48.0"; + version = "49.rc"; outputs = [ "out" @@ -53,7 +53,7 @@ stdenv.mkDerivation (finalAttrs: { src = fetchurl { url = "mirror://gnome/sources/gdm/${lib.versions.major finalAttrs.version}/gdm-${finalAttrs.version}.tar.xz"; - hash = "sha256-G8Btr/CT7HteN+y0+S5do0dKGxugdu25FR7pZ9HDCt8="; + hash = "sha256-vQdduV2RbiXRhk/n0RSY8YpSiiMYDU4jotXwukRgyBY="; }; mesonFlags = [ @@ -145,6 +145,10 @@ stdenv.mkDerivation (finalAttrs: { # installed (mostly just because .passthru.tests can make use of it). substituteInPlace meson.build \ --replace-fail "dconf_prefix = dconf_dep.get_variable(pkgconfig: 'prefix')" "dconf_prefix = gdm_prefix" + + # Disable userdb dynamic users for now + substituteInPlace meson.build \ + --replace-fail 'have_userdb = libsystemd_dep' 'have_userdb = false #' ''; doInstallCheck = true;