From 6f23e142cbaaf38a3f66104655785f212bcb6200 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Fri, 27 Apr 2018 18:53:21 +0200 Subject: [PATCH 1/3] gnome3.gdm: clean up --- pkgs/desktops/gnome-3/core/gdm/default.nix | 64 ++++++++++--------- .../desktops/gnome-3/core/gdm/fix-paths.patch | 49 ++++++++++++++ 2 files changed, 84 insertions(+), 29 deletions(-) create mode 100644 pkgs/desktops/gnome-3/core/gdm/fix-paths.patch diff --git a/pkgs/desktops/gnome-3/core/gdm/default.nix b/pkgs/desktops/gnome-3/core/gdm/default.nix index 6b6b23f21b54..88fed09de382 100644 --- a/pkgs/desktops/gnome-3/core/gdm/default.nix +++ b/pkgs/desktops/gnome-3/core/gdm/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, glib, itstool, libxml2, xorg, dbus +{ stdenv, fetchurl, substituteAll, pkgconfig, glib, itstool, libxml2, xorg, dbus , intltool, accountsservice, libX11, gnome3, systemd, autoreconfHook , gtk, libcanberra-gtk3, pam, libtool, gobjectIntrospection, plymouth , librsvg, coreutils }: @@ -12,50 +12,56 @@ stdenv.mkDerivation rec { sha256 = "1yxjjyrp0ywrc25cp81bsdhp79zn0c0jag48hlp00b5wfnkqy1kp"; }; - passthru = { - updateScript = gnome3.updateScript { packageName = "gdm"; attrPath = "gnome3.gdm"; }; - }; - # Only needed to make it build preConfigure = '' substituteInPlace ./configure --replace "/usr/bin/X" "${xorg.xorgserver.out}/bin/X" ''; - postPatch = '' - substituteInPlace daemon/gdm-manager.c --replace "/bin/plymouth" "${plymouth}/bin/plymouth" - substituteInPlace data/gdm.service.in --replace "/bin/kill" "${coreutils}/bin/kill" - ''; - - configureFlags = [ "--sysconfdir=/etc" - "--localstatedir=/var" - "--with-plymouth=yes" - "--with-initial-vt=7" - "--with-systemdsystemunitdir=$(out)/etc/systemd/system" ]; + configureFlags = [ + "--sysconfdir=/etc" + "--localstatedir=/var" + "--with-plymouth=yes" + "--with-initial-vt=7" + "--with-systemdsystemunitdir=$(out)/etc/systemd/system" + ]; nativeBuildInputs = [ pkgconfig libxml2 itstool intltool autoreconfHook libtool gnome3.dconf ]; - buildInputs = [ glib accountsservice systemd - gobjectIntrospection libX11 gtk - libcanberra-gtk3 pam plymouth librsvg ]; + buildInputs = [ + glib accountsservice systemd + gobjectIntrospection libX11 gtk + libcanberra-gtk3 pam plymouth librsvg + ]; enableParallelBuilding = true; # Disable Access Control because our X does not support FamilyServerInterpreted yet - patches = [ ./sessions_dir.patch - ./gdm-x-session_extra_args.patch - ./gdm-session-worker_xserver-path.patch - ]; + patches = [ + (substituteAll { + src = ./fix-paths.patch; + inherit coreutils plymouth; + }) + ./sessions_dir.patch + ./gdm-x-session_extra_args.patch + ./gdm-session-worker_xserver-path.patch + ]; - postInstall = '' - # Prevent “Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary” - rm $out/share/gdm/greeter/autostart/orca-autostart.desktop - ''; + installFlags = [ + "sysconfdir=$(out)/etc" + "dbusconfdir=$(out)/etc/dbus-1/system.d" + ]; - installFlags = [ "sysconfdir=$(out)/etc" "dbusconfdir=$(out)/etc/dbus-1/system.d" ]; + passthru = { + updateScript = gnome3.updateScript { + packageName = "gdm"; + attrPath = "gnome3.gdm"; + }; + }; meta = with stdenv.lib; { - homepage = https://wiki.gnome.org/Projects/GDM; description = "A program that manages graphical display servers and handles graphical user logins"; - platforms = platforms.linux; + homepage = https://wiki.gnome.org/Projects/GDM; + license = licenses.gpl2Plus; maintainers = gnome3.maintainers; + platforms = platforms.linux; }; } diff --git a/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch b/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch new file mode 100644 index 000000000000..d10283d40eae --- /dev/null +++ b/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch @@ -0,0 +1,49 @@ +--- a/daemon/gdm-manager.c ++++ b/daemon/gdm-manager.c +@@ -147,7 +147,7 @@ + GError *error; + + error = NULL; +- res = g_spawn_command_line_sync ("/bin/plymouth --ping", ++ res = g_spawn_command_line_sync ("@plymouth@/bin/plymouth --ping", + NULL, NULL, &status, &error); + if (! res) { + g_debug ("Could not ping plymouth: %s", error->message); +@@ -165,7 +165,7 @@ + GError *error; + + error = NULL; +- res = g_spawn_command_line_sync ("/bin/plymouth deactivate", ++ res = g_spawn_command_line_sync ("@plymouth@/bin/plymouth deactivate", + NULL, NULL, NULL, &error); + if (! res) { + g_warning ("Could not deactivate plymouth: %s", error->message); +@@ -180,7 +180,7 @@ + GError *error; + + error = NULL; +- res = g_spawn_command_line_async ("/bin/plymouth quit --retain-splash", &error); ++ res = g_spawn_command_line_async ("@plymouth@/bin/plymouth quit --retain-splash", &error); + if (! res) { + g_warning ("Could not quit plymouth: %s", error->message); + g_error_free (error); +@@ -196,7 +196,7 @@ + GError *error; + + error = NULL; +- res = g_spawn_command_line_async ("/bin/plymouth quit", &error); ++ res = g_spawn_command_line_async ("@plymouth@/bin/plymouth quit", &error); + if (! res) { + g_warning ("Could not quit plymouth: %s", error->message); + g_error_free (error); +--- a/data/gdm.service.in ++++ b/data/gdm.service.in +@@ -28,7 +28,7 @@ + StandardOutput=syslog + StandardError=inherit + EnvironmentFile=-@LANG_CONFIG_FILE@ +-ExecReload=/bin/kill -SIGHUP $MAINPID ++ExecReload=@coreutils@/bin/kill -SIGHUP $MAINPID + + [Install] + Alias=display-manager.service From 3bfa8563d10e356f085f122d8982ccd13647ff02 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Fri, 27 Apr 2018 19:03:19 +0200 Subject: [PATCH 2/3] gnome3.gdm: fix wayland detection Apparently, wayland session were not used at all until now. --- pkgs/desktops/gnome-3/core/gdm/default.nix | 4 ++-- pkgs/desktops/gnome-3/core/gdm/fix-paths.patch | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/gnome-3/core/gdm/default.nix b/pkgs/desktops/gnome-3/core/gdm/default.nix index 88fed09de382..247d3566d6f3 100644 --- a/pkgs/desktops/gnome-3/core/gdm/default.nix +++ b/pkgs/desktops/gnome-3/core/gdm/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchurl, substituteAll, pkgconfig, glib, itstool, libxml2, xorg, dbus , intltool, accountsservice, libX11, gnome3, systemd, autoreconfHook , gtk, libcanberra-gtk3, pam, libtool, gobjectIntrospection, plymouth -, librsvg, coreutils }: +, librsvg, coreutils, xwayland }: stdenv.mkDerivation rec { name = "gdm-${version}"; @@ -38,7 +38,7 @@ stdenv.mkDerivation rec { patches = [ (substituteAll { src = ./fix-paths.patch; - inherit coreutils plymouth; + inherit coreutils plymouth xwayland; }) ./sessions_dir.patch ./gdm-x-session_extra_args.patch diff --git a/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch b/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch index d10283d40eae..adac2dc913cc 100644 --- a/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch +++ b/pkgs/desktops/gnome-3/core/gdm/fix-paths.patch @@ -1,3 +1,14 @@ +--- a/daemon/gdm-local-display-factory.c ++++ b/daemon/gdm-local-display-factory.c +@@ -450,7 +450,7 @@ + #ifdef ENABLE_WAYLAND_SUPPORT + gboolean wayland_enabled = FALSE; + if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) { +- if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) ) { ++ if (wayland_enabled && g_file_test ("@xwayland@/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) ) { + session_type = "wayland"; + } + } --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -147,7 +147,7 @@ From 54135fc73350e03787b2496d3e39f7a520d20e09 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Mon, 30 Apr 2018 18:15:28 +0200 Subject: [PATCH 3/3] gnome3.gdm: allow choosing user account without GNOME Account chooser depends on AccountsService, which is normally enabled by GNOME module but it was missing when using GDM without GNOME. --- nixos/modules/services/x11/display-managers/gdm.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix index 70fc7388c2ac..a6a38a21b617 100644 --- a/nixos/modules/services/x11/display-managers/gdm.nix +++ b/nixos/modules/services/x11/display-managers/gdm.nix @@ -135,6 +135,9 @@ in systemd.services.display-manager.path = [ pkgs.gnome3.gnome-session ]; + # Allow choosing an user account + services.accounts-daemon.enable = true; + services.dbus.packages = [ gdm ]; systemd.user.services.dbus.wantedBy = [ "default.target" ];