summaryrefslogtreecommitdiff
path: root/x11-misc/sddm
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2023-07-01 04:34:48 +0100
committerV3n3RiX <venerix@koprulu.sector>2023-07-01 04:34:48 +0100
commitf9a445729120f328139aad8832c6c9ea056d9c1b (patch)
tree41fdddb15ee663954249cd46b6825866c8bb4696 /x11-misc/sddm
parent233e52099f9e6aabadb53480dd52dc33e80b4f10 (diff)
x11-misc/sddm : version bump
Diffstat (limited to 'x11-misc/sddm')
-rw-r--r--x11-misc/sddm/Manifest2
-rw-r--r--x11-misc/sddm/files/pam-1.4-substack.patch31
-rw-r--r--x11-misc/sddm/files/sddm-0.12.0-respect-user-flags.patch26
-rw-r--r--x11-misc/sddm/files/sddm-0.14.0-consolekit.patch9
-rw-r--r--x11-misc/sddm/files/sddm-0.16.0-ck2-revert.patch20
-rw-r--r--x11-misc/sddm/files/sddm-0.18.0-sddmconfdir.patch32
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-Xsession.patch (renamed from x11-misc/sddm/files/sddm-0.18.0-Xsession.patch)8
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-cve-2020-28049.patch94
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-drop-wayland-suffix.patch28
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-fix-qt-5.15.7.patch33
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-honor-PAM-supplemental-groups-v2.patch182
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-nvidia-glitches-vt-switch.patch46
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-only-reuse-online-sessions.patch27
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-qt-5.15.2.patch23
-rw-r--r--x11-misc/sddm/files/sddm-0.18.1-revert-honor-PAM-supplemental-groups.patch87
-rw-r--r--x11-misc/sddm/files/sddm-0.20.0-disable-etc-debian-check.patch26
-rw-r--r--x11-misc/sddm/files/sddm-0.20.0-fix-use-development-sessions.patch83
-rw-r--r--x11-misc/sddm/files/sddm-0.20.0-no-default-pam_systemd-module.patch43
-rw-r--r--x11-misc/sddm/files/sddm-0.20.0-respect-user-flags.patch11
-rw-r--r--x11-misc/sddm/files/sddm-0.20.0-sddm.pam-use-substack.patch37
-rw-r--r--x11-misc/sddm/sddm-0.18.1-r11.ebuild110
-rw-r--r--x11-misc/sddm/sddm-0.20.0.ebuild109
22 files changed, 314 insertions, 753 deletions
diff --git a/x11-misc/sddm/Manifest b/x11-misc/sddm/Manifest
index d1006dba..dc2a0ee7 100644
--- a/x11-misc/sddm/Manifest
+++ b/x11-misc/sddm/Manifest
@@ -1 +1 @@
-DIST sddm-0.18.1.tar.xz 3402972 BLAKE2B 99ab43d374e9a3d318f692a6d496d8a6d68927af3c8e8fc2208d7355ec90649a14758b39f5733dd32f942ed569de88085576d4f5f8666f4f97079e0fb6dcb99e SHA512 ff0637600cda2f4da1f643f047f8ee822bd9651ae4ccbb614b9804175c97360ada7af93e07a7b63832f014ef6e7d1b5380ab2b8959f8024ea520fa5ff17efd60
+DIST sddm-0.20.0.tar.gz 3552722 BLAKE2B 8086c9555d5ce1598db3279353de077d51adbcc5222a929750e8558a1bcdad395a411f90608bffdc6e1ca7e7ac2b8325e25cf04cbf8476698d787ce7e60c2105 SHA512 0f64b405f1451873a01a2210530feb6f4cbbdea17be9d039c105088963a48322968db7b60c0d20ac5d97c8ec2a19e5130f0a74c0f9de58c61453d8ce8bb6272a
diff --git a/x11-misc/sddm/files/pam-1.4-substack.patch b/x11-misc/sddm/files/pam-1.4-substack.patch
deleted file mode 100644
index b0467b26..00000000
--- a/x11-misc/sddm/files/pam-1.4-substack.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- sddm-0.18.1/services/sddm-autologin.pam.bak 2020-06-19 22:27:57.305580696 +0200
-+++ sddm-0.18.1/services/sddm-autologin.pam 2020-06-19 22:30:50.513583973 +0200
-@@ -1,6 +1,5 @@
- #%PAM-1.0
- auth required pam_env.so
--auth required pam_tally.so file=/var/log/faillog onerr=succeed
- auth required pam_shells.so
- auth required pam_nologin.so
- auth required pam_permit.so
---- sddm-0.18.1/services/sddm.pam.bak 2020-06-19 22:27:26.721580117 +0200
-+++ sddm-0.18.1/services/sddm.pam 2020-06-19 22:27:48.729580533 +0200
-@@ -1,15 +1,15 @@
- #%PAM-1.0
-
--auth include system-login
-+auth substack system-login
- -auth optional pam_gnome_keyring.so
- -auth optional pam_kwallet5.so
-
--account include system-login
-+account substack system-login
-
--password include system-login
-+password substack system-login
- -password optional pam_gnome_keyring.so use_authtok
-
- session optional pam_keyinit.so force revoke
--session include system-login
-+session substack system-login
- -session optional pam_gnome_keyring.so auto_start
- -session optional pam_kwallet5.so auto_start \ No newline at end of file
diff --git a/x11-misc/sddm/files/sddm-0.12.0-respect-user-flags.patch b/x11-misc/sddm/files/sddm-0.12.0-respect-user-flags.patch
deleted file mode 100644
index fc450169..00000000
--- a/x11-misc/sddm/files/sddm-0.12.0-respect-user-flags.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-diff -u CMakeLists.txt CMakeLists.txt
---- a/CMakeLists.txt 2015-09-05 22:40:50.000000000 +0200
-+++ b/CMakeLists.txt 2015-09-07 12:15:33.419530808 +0200
-@@ -35,22 +35,6 @@
- # Definitions
- add_definitions(-Wall -std=c++11 -DQT_NO_CAST_FROM_ASCII)
-
--# Default build type
--if(NOT CMAKE_BUILD_TYPE)
-- set(CMAKE_BUILD_TYPE Release)
--endif()
--
--# Handle build type
--if(CMAKE_BUILD_TYPE MATCHES [Dd]ebug)
-- message(STATUS "Debug build")
-- add_definitions(-DDEBUG)
-- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0")
--else()
-- message(STATUS "Release build")
-- add_definitions(-DNDEBUG)
-- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
--endif()
--
- # Default absolute paths
- if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)
- set(CMAKE_INSTALL_SYSCONFDIR "/etc")
diff --git a/x11-misc/sddm/files/sddm-0.14.0-consolekit.patch b/x11-misc/sddm/files/sddm-0.14.0-consolekit.patch
deleted file mode 100644
index 64ea0648..00000000
--- a/x11-misc/sddm/files/sddm-0.14.0-consolekit.patch
+++ /dev/null
@@ -1,9 +0,0 @@
---- a/data/scripts/Xsession 2016-08-28 14:52:04.910181422 +0200
-+++ b/data/scripts/Xsession 2016-08-28 14:53:07.157184480 +0200
-@@ -91,5 +91,5 @@
- if [ -z "$@" ]; then
- exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
- else
-- exec $@
-+ exec ck-launch-session $@
- fi
diff --git a/x11-misc/sddm/files/sddm-0.16.0-ck2-revert.patch b/x11-misc/sddm/files/sddm-0.16.0-ck2-revert.patch
deleted file mode 100644
index bbe2a272..00000000
--- a/x11-misc/sddm/files/sddm-0.16.0-ck2-revert.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-SDDM 0.16.0 fails to start with consolekit2 because it assumes consolekit2
-has the same interface names as logind.
-
-This patch forces sddm to use legacy behaviour when consolekit2 is detected.
-
-Bug: https://bugs.gentoo.org/633920
-Bug: https://github.com/sddm/sddm/issues/903
-Bug: https://github.com/ConsoleKit2/ConsoleKit2/issues/99
-
---- a/src/daemon/LogindDBusTypes.cpp
-+++ b/src/daemon/LogindDBusTypes.cpp
-@@ -60,7 +60,7 @@
-
- if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.ConsoleKit"))) {
- qDebug() << "Console kit interface found";
-- available = true;
-+ available = false;
- serviceName = QStringLiteral("org.freedesktop.ConsoleKit");
- managerPath = QStringLiteral("/org/freedesktop/ConsoleKit/Manager");
- managerIfaceName = QStringLiteral("/org.freedesktop.ConsoleKit.Manager"); //note this doesn't match logind
diff --git a/x11-misc/sddm/files/sddm-0.18.0-sddmconfdir.patch b/x11-misc/sddm/files/sddm-0.18.0-sddmconfdir.patch
deleted file mode 100644
index 9d8f2b54..00000000
--- a/x11-misc/sddm/files/sddm-0.18.0-sddmconfdir.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 300078995ae82495cf09a0646a07e0214f0ae030 Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Sat, 21 Jul 2018 22:41:29 +0200
-Subject: [PATCH] Change location of sddm.conf.d to DATAROOTDIR
-
-/usr/lib is not a location that should be hardcoded - depending on
-distribution and architecture this can be different. So far, SDDM
-does not use this path unless the above conditions happen to make
-it coincide with the install location of its Qml modules.
-
-DATAROOTDIR is defined as: Read-only architecture-independent data.
-This seems to be a better fit for a system SDDM default config dir.
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 8500c65..5150b7d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -184,7 +184,7 @@ set(WAYLAND_SESSION_COMMAND "${DATA_INSTALL_DIR}/scripts/wayland-session"
-
- set(CONFIG_FILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf" CACHE PATH "Path of the sddm config file")
- set(CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sddm.conf.d" CACHE PATH "Path of the sddm config directory")
--set(SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/lib/sddm/sddm.conf.d" CACHE PATH "Path of the system sddm config directory")
-+set(SYSTEM_CONFIG_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/sddm/sddm.conf.d" CACHE PATH "Path of the system sddm config directory")
- set(LOG_FILE "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/sddm.log" CACHE PATH "Path of the sddm log file")
- set(DBUS_CONFIG_FILENAME "org.freedesktop.DisplayManager.conf" CACHE STRING "Name of the sddm config file")
- set(COMPONENTS_TRANSLATION_DIR "${DATA_INSTALL_DIR}/translations" CACHE PATH "Components translations directory")
---
-2.18.0
-
diff --git a/x11-misc/sddm/files/sddm-0.18.0-Xsession.patch b/x11-misc/sddm/files/sddm-0.18.1-Xsession.patch
index 41c813a0..e1e3c152 100644
--- a/x11-misc/sddm/files/sddm-0.18.0-Xsession.patch
+++ b/x11-misc/sddm/files/sddm-0.18.1-Xsession.patch
@@ -1,11 +1,11 @@
---- a/data/scripts/Xsession 2016-08-28 14:52:04.910181422 +0200
-+++ b/data/scripts/Xsession 2017-10-21 15:25:47.668886596 +0200
+--- a/data/scripts/Xsession
++++ b/data/scripts/Xsession
@@ -50,6 +50,10 @@
;;
esac
-+# Make D-Bus and ConsoleKit start properly, see:
-+# /etc/X11/xinit/xinitrc.d/{80-dbus,90-consolekit}
++# Make D-Bus start properly, see:
++# /etc/X11/xinit/xinitrc.d/80-dbus
+command="$@"
+
[ -f /etc/xprofile ] && . /etc/xprofile
diff --git a/x11-misc/sddm/files/sddm-0.18.1-cve-2020-28049.patch b/x11-misc/sddm/files/sddm-0.18.1-cve-2020-28049.patch
deleted file mode 100644
index 8209c073..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-cve-2020-28049.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From be202f533ab98a684c6a007e8d5b4357846bc222 Mon Sep 17 00:00:00 2001
-From: Fabian Vogt <fabian@ritter-vogt.de>
-Date: Tue, 6 Oct 2020 21:21:38 +0200
-Subject: [PATCH] Fix X not having access control on startup
-
-If the auth file is empty, X allows any local application (= any user on the
-system) to connect. This is currently the case until X wrote the display
-number to sddm and sddm used that to write the entry into the file.
-To work around this chicken-and-egg problem, make use of the fact that X
-doesn't actually look at the display number in the passed auth file and just
-use :0 unconditionally. Also make sure that writing the entry was actually
-successful.
-
-CVE-2020-28049
----
- src/daemon/XorgDisplayServer.cpp | 25 ++++++++++++++++++++-----
- src/daemon/XorgDisplayServer.h | 2 +-
- 2 files changed, 21 insertions(+), 6 deletions(-)
-
-diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
-index d04f6344..df685b2d 100644
---- a/src/daemon/XorgDisplayServer.cpp
-+++ b/src/daemon/XorgDisplayServer.cpp
-@@ -88,7 +88,7 @@ namespace SDDM {
- return m_cookie;
- }
-
-- void XorgDisplayServer::addCookie(const QString &file) {
-+ bool XorgDisplayServer::addCookie(const QString &file) {
- // log message
- qDebug() << "Adding cookie to" << file;
-
-@@ -104,13 +104,13 @@ namespace SDDM {
-
- // check file
- if (!fp)
-- return;
-+ return false;
- fprintf(fp, "remove %s\n", qPrintable(m_display));
- fprintf(fp, "add %s . %s\n", qPrintable(m_display), qPrintable(m_cookie));
- fprintf(fp, "exit\n");
-
- // close pipe
-- pclose(fp);
-+ return pclose(fp) == 0;
- }
-
- bool XorgDisplayServer::start() {
-@@ -127,6 +127,15 @@ namespace SDDM {
- // log message
- qDebug() << "Display server starting...";
-
-+ // generate auth file.
-+ // For the X server's copy, the display number doesn't matter.
-+ // An empty file would result in no access control!
-+ m_display = QStringLiteral(":0");
-+ if(!addCookie(m_authPath)) {
-+ qCritical() << "Failed to write xauth file";
-+ return false;
-+ }
-+
- if (daemonApp->testing()) {
- QStringList args;
- QDir x11socketDir(QStringLiteral("/tmp/.X11-unix"));
-@@ -217,8 +226,14 @@ namespace SDDM {
- emit started();
- }
-
-- // generate auth file
-- addCookie(m_authPath);
-+ // The file is also used by the greeter, which does care about the
-+ // display number. Write the proper entry, if it's different.
-+ if(m_display != QStringLiteral(":0")) {
-+ if(!addCookie(m_authPath)) {
-+ qCritical() << "Failed to write xauth file";
-+ return false;
-+ }
-+ }
- changeOwner(m_authPath);
-
- // set flag
-diff --git a/src/daemon/XorgDisplayServer.h b/src/daemon/XorgDisplayServer.h
-index d2bdf6d4..e97a0b53 100644
---- a/src/daemon/XorgDisplayServer.h
-+++ b/src/daemon/XorgDisplayServer.h
-@@ -40,7 +40,7 @@ namespace SDDM {
-
- const QString &cookie() const;
-
-- void addCookie(const QString &file);
-+ bool addCookie(const QString &file);
-
- public slots:
- bool start();
diff --git a/x11-misc/sddm/files/sddm-0.18.1-drop-wayland-suffix.patch b/x11-misc/sddm/files/sddm-0.18.1-drop-wayland-suffix.patch
deleted file mode 100644
index 70efa284..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-drop-wayland-suffix.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 9a440ba5917ff93c6a78726380c6267d91c13f19 Mon Sep 17 00:00:00 2001
-From: Alex <alex.shaw.as@gmail.com>
-Date: Mon, 30 Sep 2019 16:50:16 -0400
-Subject: [PATCH] Prevent duplicate session name.
-
-Several desktop sessions (e.g. KDE Plasma) already include the string " (Wayland)" in the session name. When this happens, the session name displayed to the user is "Plasma (Wayland) (Wayland)". This change makes it so that only "Plasma (Wayland)" will be displayed.
-
-(cherry picked from commit f9a0648ff3f841b68a07c139c3540b9e75bfd279)
----
- src/common/Session.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/common/Session.cpp b/src/common/Session.cpp
-index aa4dad3..923ecd4 100644
---- a/src/common/Session.cpp
-+++ b/src/common/Session.cpp
-@@ -169,7 +169,7 @@ namespace SDDM {
-
- if (line.startsWith(QLatin1String("Name="))) {
- if (type == WaylandSession)
-- m_displayName = QObject::tr("%1 (Wayland)").arg(line.mid(5));
-+ m_displayName = QObject::tr("%1").arg(line.mid(5));
- else
- m_displayName = line.mid(5);
- }
---
-2.38.1
-
diff --git a/x11-misc/sddm/files/sddm-0.18.1-fix-qt-5.15.7.patch b/x11-misc/sddm/files/sddm-0.18.1-fix-qt-5.15.7.patch
deleted file mode 100644
index 65e9b857..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-fix-qt-5.15.7.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 5fe712d0e73c6263647bf306f40fbac94a52f4a6 Mon Sep 17 00:00:00 2001
-From: Harald Sitter <sitter@kde.org>
-Date: Mon, 24 Oct 2022 13:15:48 +0200
-Subject: disable automatic portal launching
-
-in Qt6 (and the KDE patch collection for Qt 5) genericunixservices will
-internally attempt to probe the portal tech early on in the app life
-cycle. this causes the protal system to launch app and then crash
-because we aren't actually providing a fully functional session. instead
-opt out of this altogether
-
-(cherry picked from commit fc24321541f6f65b7d1aac89cd82336ffd53e1a0)
----
- src/greeter/GreeterApp.cpp | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
-index 4e117a7..a491f4d 100644
---- a/src/greeter/GreeterApp.cpp
-+++ b/src/greeter/GreeterApp.cpp
-@@ -318,6 +318,9 @@ int main(int argc, char **argv)
- QSurfaceFormat::setDefaultFormat(format);
- }
-
-+ // Qt internally may load the xdg portal system early on, prevent this, we do not have a functional session running.
-+ qputenv("QT_NO_XDG_DESKTOP_PORTAL", "1");
-+
- QGuiApplication app(argc, argv);
-
- QCommandLineParser parser;
---
-2.38.1
-
diff --git a/x11-misc/sddm/files/sddm-0.18.1-honor-PAM-supplemental-groups-v2.patch b/x11-misc/sddm/files/sddm-0.18.1-honor-PAM-supplemental-groups-v2.patch
deleted file mode 100644
index f4ce7ae7..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-honor-PAM-supplemental-groups-v2.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 75e6e00d9e1ecf25e3a9c8332530a1e40d737cdb Mon Sep 17 00:00:00 2001
-From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
-Date: Thu, 9 May 2019 03:06:48 +0200
-Subject: [PATCH] Honor PAM's supplemental groups (v2) (#834, #1159)
-
-This moves the supplemental group initialization step from
-UserSession.cpp to the Backend system, so that the Pam Backend can
-inject additional supplemental groups via modules like pam_group.so.
-
-pam_setcred(3) assumes that it operates on an already initialized
-supplemental group list. However, PamBackend calls
-pam_setcred(PAM_ESTABLISH_CRED) earlier, at the start
-PamBackend::openSession, so a pam_setcred(PAM_REINITIALIZE_CRED) call
-must be issued to repeat the injection of PAM's supplemental groups.
----
- src/helper/Backend.cpp | 5 +++++
- src/helper/Backend.h | 3 +++
- src/helper/HelperApp.cpp | 4 ++++
- src/helper/HelperApp.h | 1 +
- src/helper/UserSession.cpp | 13 ++++++++-----
- src/helper/backend/PamBackend.cpp | 18 ++++++++++++++++++
- src/helper/backend/PamBackend.h | 2 ++
- 7 files changed, 41 insertions(+), 5 deletions(-)
-
-diff --git a/src/helper/Backend.cpp b/src/helper/Backend.cpp
-index d6bb4d0a..35ae2bdf 100644
---- a/src/helper/Backend.cpp
-+++ b/src/helper/Backend.cpp
-@@ -29,6 +29,7 @@
- #include <QtCore/QProcessEnvironment>
-
- #include <pwd.h>
-+#include <grp.h>
-
- namespace SDDM {
- Backend::Backend(HelperApp* parent)
-@@ -79,4 +80,8 @@ namespace SDDM {
- bool Backend::closeSession() {
- return true;
- }
-+
-+ bool Backend::setupSupplementalGroups(struct passwd *pw) {
-+ return !initgroups(pw->pw_name, pw->pw_gid);
-+ }
- }
-diff --git a/src/helper/Backend.h b/src/helper/Backend.h
-index b790e001..3caf1592 100644
---- a/src/helper/Backend.h
-+++ b/src/helper/Backend.h
-@@ -22,6 +22,7 @@
- #define BACKEND_H
-
- #include <QtCore/QObject>
-+#include <pwd.h>
-
- namespace SDDM {
- class HelperApp;
-@@ -38,6 +39,8 @@ namespace SDDM {
- void setAutologin(bool on = true);
- void setGreeter(bool on = true);
-
-+ virtual bool setupSupplementalGroups(struct passwd *pw);
-+
- public slots:
- virtual bool start(const QString &user = QString()) = 0;
- virtual bool authenticate() = 0;
-diff --git a/src/helper/HelperApp.cpp b/src/helper/HelperApp.cpp
-index cad93bd8..d0891d75 100644
---- a/src/helper/HelperApp.cpp
-+++ b/src/helper/HelperApp.cpp
-@@ -253,6 +253,10 @@ namespace SDDM {
- return m_session;
- }
-
-+ Backend *HelperApp::backend() {
-+ return m_backend;
-+ }
-+
- const QString& HelperApp::user() const {
- return m_user;
- }
-diff --git a/src/helper/HelperApp.h b/src/helper/HelperApp.h
-index 3742df12..cb5959a7 100644
---- a/src/helper/HelperApp.h
-+++ b/src/helper/HelperApp.h
-@@ -39,6 +39,7 @@ namespace SDDM {
- virtual ~HelperApp();
-
- UserSession *session();
-+ Backend *backend();
- const QString &user() const;
- const QString &cookie() const;
-
-diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
-index f71fd358..62fd4d70 100644
---- a/src/helper/UserSession.cpp
-+++ b/src/helper/UserSession.cpp
-@@ -19,6 +19,7 @@
- *
- */
-
-+#include "Backend.h"
- #include "Configuration.h"
- #include "UserSession.h"
- #include "HelperApp.h"
-@@ -129,7 +130,8 @@ namespace SDDM {
- #endif
-
- // switch user
-- const QByteArray username = qobject_cast<HelperApp*>(parent())->user().toLocal8Bit();
-+ HelperApp* app = qobject_cast<HelperApp*>(parent());
-+ const QByteArray username = app->user().toLocal8Bit();
- struct passwd pw;
- struct passwd *rpw;
- long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
-@@ -146,12 +148,13 @@ namespace SDDM {
- qCritical() << "getpwnam_r(" << username << ") failed with error: " << strerror(err);
- exit(Auth::HELPER_OTHER_ERROR);
- }
-- if (setgid(pw.pw_gid) != 0) {
-- qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
-+
-+ if (!app->backend()->setupSupplementalGroups(&pw)) {
-+ qCritical() << "failed to set up supplemental groups for user: " << username;
- exit(Auth::HELPER_OTHER_ERROR);
- }
-- if (initgroups(pw.pw_name, pw.pw_gid) != 0) {
-- qCritical() << "initgroups(" << pw.pw_name << ", " << pw.pw_gid << ") failed for user: " << username;
-+ if (setgid(pw.pw_gid) != 0) {
-+ qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
- exit(Auth::HELPER_OTHER_ERROR);
- }
- if (setuid(pw.pw_uid) != 0) {
-diff --git a/src/helper/backend/PamBackend.cpp b/src/helper/backend/PamBackend.cpp
-index f86d77d6..cccfa258 100644
---- a/src/helper/backend/PamBackend.cpp
-+++ b/src/helper/backend/PamBackend.cpp
-@@ -289,6 +289,24 @@ namespace SDDM {
- return QString::fromLocal8Bit((const char*) m_pam->getItem(PAM_USER));
- }
-
-+ bool PamBackend::setupSupplementalGroups(struct passwd *pw) {
-+ if (!Backend::setupSupplementalGroups(pw))
-+ return false;
-+
-+ // pam_setcred(3) may inject additional groups into the user's
-+ // list of supplemental groups, and assumes that the user's
-+ // supplemental groups have already been initialized before
-+ // its invocation. Since pam_setcred was already called at the
-+ // start of openSession, we need to repeat this step here as
-+ // the user's groups have only just now been initialized.
-+
-+ if (!m_pam->setCred(PAM_REINITIALIZE_CRED)) {
-+ m_app->error(m_pam->errorString(), Auth::ERROR_AUTHENTICATION);
-+ return false;
-+ }
-+ return true;
-+ }
-+
- int PamBackend::converse(int n, const struct pam_message **msg, struct pam_response **resp) {
- qDebug() << "[PAM] Conversation with" << n << "messages";
-
-diff --git a/src/helper/backend/PamBackend.h b/src/helper/backend/PamBackend.h
-index 4c8b4b35..5b079099 100644
---- a/src/helper/backend/PamBackend.h
-+++ b/src/helper/backend/PamBackend.h
-@@ -28,6 +28,7 @@
- #include <QtCore/QObject>
-
- #include <security/pam_appl.h>
-+#include <pwd.h>
-
- namespace SDDM {
- class PamHandle;
-@@ -61,6 +62,7 @@ namespace SDDM {
- explicit PamBackend(HelperApp *parent);
- virtual ~PamBackend();
- int converse(int n, const struct pam_message **msg, struct pam_response **resp);
-+ virtual bool setupSupplementalGroups(struct passwd *pw);
-
- public slots:
- virtual bool start(const QString &user = QString());
diff --git a/x11-misc/sddm/files/sddm-0.18.1-nvidia-glitches-vt-switch.patch b/x11-misc/sddm/files/sddm-0.18.1-nvidia-glitches-vt-switch.patch
deleted file mode 100644
index ab2fc18c..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-nvidia-glitches-vt-switch.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 76c11653522453efcf86f6f2f53bca1a497ea350 Mon Sep 17 00:00:00 2001
-From: David Edmundson <kde@davidedmundson.co.uk>
-Date: Thu, 28 Mar 2019 11:43:37 +0000
-Subject: Enable QSurfaceFormat::ResetNotification on new Qt
-
-This fixes graphical glitches on nvidia after VT switching.
-
-It's opt-in as it requires code paths to handle glGetError differently.
-The version comparison is because my early implementations missed a code
-path. This was fixed in 5.12.2, but we may as well play safe
-
-(cherry picked from commit cd4e1fa21e1ab7178fa5d2ef858f3271575fd315)
----
- src/greeter/GreeterApp.cpp | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
-index d47998e..4e117a7 100644
---- a/src/greeter/GreeterApp.cpp
-+++ b/src/greeter/GreeterApp.cpp
-@@ -40,6 +40,9 @@
- #include <QDebug>
- #include <QTimer>
- #include <QTranslator>
-+#include <QLibraryInfo>
-+#include <QVersionNumber>
-+#include <QSurfaceFormat>
-
- #include <iostream>
-
-@@ -309,6 +312,12 @@ int main(int argc, char **argv)
- qDebug() << "High-DPI autoscaling not Enabled";
- }
-
-+ if (QLibraryInfo::version() >= QVersionNumber(5, 13, 0)) {
-+ auto format(QSurfaceFormat::defaultFormat());
-+ format.setOption(QSurfaceFormat::ResetNotification);
-+ QSurfaceFormat::setDefaultFormat(format);
-+ }
-+
- QGuiApplication app(argc, argv);
-
- QCommandLineParser parser;
---
-2.38.1
-
diff --git a/x11-misc/sddm/files/sddm-0.18.1-only-reuse-online-sessions.patch b/x11-misc/sddm/files/sddm-0.18.1-only-reuse-online-sessions.patch
deleted file mode 100644
index b3ea90ff..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-only-reuse-online-sessions.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From f131270ff3ae6e6b4e2dc965cd05b46e194b48c1 Mon Sep 17 00:00:00 2001
-From: Fabian Vogt <fabian@ritter-vogt.de>
-Date: Tue, 31 Jul 2018 16:51:13 +0200
-Subject: [PATCH] Session reuse: Only consider "online" sessions
-
-Otherwise it might switch to already dead sessions ("closing" or "lingering").
----
- src/daemon/Display.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp
-index 86e597e..ec442b0 100644
---- a/src/daemon/Display.cpp
-+++ b/src/daemon/Display.cpp
-@@ -290,8 +290,8 @@ namespace SDDM {
- foreach(const SessionInfo &s, reply.value()) {
- if (s.userName == user) {
- OrgFreedesktopLogin1SessionInterface session(Logind::serviceName(), s.sessionPath.path(), QDBusConnection::systemBus());
-- if (session.service() == QLatin1String("sddm")) {
-- m_reuseSessionId = s.sessionId;
-+ if (session.service() == QLatin1String("sddm") && session.state() == QLatin1String("online")) {
-+ m_reuseSessionId = s.sessionId;
- break;
- }
- }
---
-2.18.0
diff --git a/x11-misc/sddm/files/sddm-0.18.1-qt-5.15.2.patch b/x11-misc/sddm/files/sddm-0.18.1-qt-5.15.2.patch
deleted file mode 100644
index 7179d14e..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-qt-5.15.2.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From e93bf95c54ad8c2a1604f8d7be05339164b19308 Mon Sep 17 00:00:00 2001
-From: "aacid@kde.org" <aacid@kde.org>
-Date: Thu, 12 Nov 2020 23:42:48 +0100
-Subject: [PATCH] Fix compilation once QTBUG-88431 gets fixed
-
-And also comes closes to Qt6 compatibility
----
- src/daemon/XorgDisplayServer.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
-index 5f93a1b3..d5f29a94 100644
---- a/src/daemon/XorgDisplayServer.cpp
-+++ b/src/daemon/XorgDisplayServer.cpp
-@@ -65,7 +65,7 @@ namespace SDDM {
- // create a random hexadecimal number
- const char *digits = "0123456789abcdef";
- for (int i = 0; i < 32; ++i)
-- m_cookie[i] = digits[dis(gen)];
-+ m_cookie[i] = QLatin1Char(digits[dis(gen)]);
- }
-
- XorgDisplayServer::~XorgDisplayServer() {
diff --git a/x11-misc/sddm/files/sddm-0.18.1-revert-honor-PAM-supplemental-groups.patch b/x11-misc/sddm/files/sddm-0.18.1-revert-honor-PAM-supplemental-groups.patch
deleted file mode 100644
index f14ff767..00000000
--- a/x11-misc/sddm/files/sddm-0.18.1-revert-honor-PAM-supplemental-groups.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From d3953e88a94ec25a87d3c5136517b3d1009cb1fd Mon Sep 17 00:00:00 2001
-From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
-Date: Wed, 8 May 2019 18:58:53 +0200
-Subject: [PATCH] Revert "Honor PAM's ambient supplemental groups. (#834)"
-
-This reverts commit 1bc813d08b8130e458a6550ec47fb2bfbe6de080, which
-misuses PAM and leads to pulling in all of root's supplemental groups
-during session initialization instead of only adding PAM's extra
-groups. The problem was masked due to the root user not having any
-supplemental groups in some common contexts, like running sddm from a
-systemd unit.
----
- src/helper/UserSession.cpp | 57 --------------------------------------
- 1 file changed, 57 deletions(-)
-
-diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
-index b3aec356..f71fd358 100644
---- a/src/helper/UserSession.cpp
-+++ b/src/helper/UserSession.cpp
-@@ -150,67 +150,10 @@ namespace SDDM {
- qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
- exit(Auth::HELPER_OTHER_ERROR);
- }
--
--#ifdef USE_PAM
--
-- // fetch ambient groups from PAM's environment;
-- // these are set by modules such as pam_groups.so
-- int n_pam_groups = getgroups(0, NULL);
-- gid_t *pam_groups = NULL;
-- if (n_pam_groups > 0) {
-- pam_groups = new gid_t[n_pam_groups];
-- if ((n_pam_groups = getgroups(n_pam_groups, pam_groups)) == -1) {
-- qCritical() << "getgroups() failed to fetch supplemental"
-- << "PAM groups for user:" << username;
-- exit(Auth::HELPER_OTHER_ERROR);
-- }
-- } else {
-- n_pam_groups = 0;
-- }
--
-- // fetch session's user's groups
-- int n_user_groups = 0;
-- gid_t *user_groups = NULL;
-- if (-1 == getgrouplist(username.constData(), pw.pw_gid,
-- NULL, &n_user_groups)) {
-- user_groups = new gid_t[n_user_groups];
-- if ((n_user_groups = getgrouplist(username.constData(),
-- pw.pw_gid, user_groups,
-- &n_user_groups)) == -1 ) {
-- qCritical() << "getgrouplist(" << username << ", " << pw.pw_gid
-- << ") failed";
-- exit(Auth::HELPER_OTHER_ERROR);
-- }
-- }
--
-- // set groups to concatenation of PAM's ambient
-- // groups and the session's user's groups
-- int n_groups = n_pam_groups + n_user_groups;
-- if (n_groups > 0) {
-- gid_t *groups = new gid_t[n_groups];
-- memcpy(groups, pam_groups, (n_pam_groups * sizeof(gid_t)));
-- memcpy((groups + n_pam_groups), user_groups,
-- (n_user_groups * sizeof(gid_t)));
--
-- // setgroups(2) handles duplicate groups
-- if (setgroups(n_groups, groups) != 0) {
-- qCritical() << "setgroups() failed for user: " << username;
-- exit (Auth::HELPER_OTHER_ERROR);
-- }
-- delete[] groups;
-- }
-- delete[] pam_groups;
-- delete[] user_groups;
--
--#else
--
- if (initgroups(pw.pw_name, pw.pw_gid) != 0) {
- qCritical() << "initgroups(" << pw.pw_name << ", " << pw.pw_gid << ") failed for user: " << username;
- exit(Auth::HELPER_OTHER_ERROR);
- }
--
--#endif /* USE_PAM */
--
- if (setuid(pw.pw_uid) != 0) {
- qCritical() << "setuid(" << pw.pw_uid << ") failed for user: " << username;
- exit(Auth::HELPER_OTHER_ERROR);
diff --git a/x11-misc/sddm/files/sddm-0.20.0-disable-etc-debian-check.patch b/x11-misc/sddm/files/sddm-0.20.0-disable-etc-debian-check.patch
new file mode 100644
index 00000000..b851c852
--- /dev/null
+++ b/x11-misc/sddm/files/sddm-0.20.0-disable-etc-debian-check.patch
@@ -0,0 +1,26 @@
+From 20adb0eb3462e79ec76f93f2a622b99956145424 Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Tue, 13 Oct 2020 01:04:44 +0200
+Subject: [PATCH] Disable /etc/debian_version check
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ services/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt
+index 5032f33..afa5fd5 100644
+--- a/services/CMakeLists.txt
++++ b/services/CMakeLists.txt
+@@ -11,7 +11,7 @@ else()
+ endif()
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sddm-greeter.pam.in" "${CMAKE_CURRENT_BINARY_DIR}/sddm-greeter.pam")
+
+-if(EXISTS "/etc/debian_version")
++if(0)
+ install(FILES debian.sddm-autologin.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-autologin)
+ install(FILES debian.sddm-greeter.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm-greeter)
+ install(FILES debian.sddm.pam DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/pam.d RENAME sddm)
+--
+2.39.1
+
diff --git a/x11-misc/sddm/files/sddm-0.20.0-fix-use-development-sessions.patch b/x11-misc/sddm/files/sddm-0.20.0-fix-use-development-sessions.patch
new file mode 100644
index 00000000..32138281
--- /dev/null
+++ b/x11-misc/sddm/files/sddm-0.20.0-fix-use-development-sessions.patch
@@ -0,0 +1,83 @@
+From 5b702ae986464fe6dbc8557d4b2da725ac1ed175 Mon Sep 17 00:00:00 2001
+From: Fabian Vogt <fvogt@suse.de>
+Date: Mon, 26 Jun 2023 09:52:05 +0200
+Subject: [PATCH] Session: Parse .desktop files manually again
+
+Using QSettings::IniFormat doesn't quite work. Implement a custom parser
+for those files to handle them according to the specification.
+
+Fixes #1745
+---
+ src/common/Session.cpp | 52 +++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 51 insertions(+), 1 deletion(-)
+
+diff --git a/src/common/Session.cpp b/src/common/Session.cpp
+index 4bb2142ca..5eec64859 100644
+--- a/src/common/Session.cpp
++++ b/src/common/Session.cpp
+@@ -34,6 +34,56 @@
+ const QString s_entryExtention = QStringLiteral(".desktop");
+
+ namespace SDDM {
++ // QSettings::IniFormat can't be used to read .desktop files due to different
++ // syntax of values (escape sequences, quoting, automatic QStringList detection).
++ // So implement yet another .desktop file parser.
++ class DesktopFileFormat {
++ static bool readFunc(QIODevice &device, QSettings::SettingsMap &map)
++ {
++ QString currentSectionName;
++ while(!device.atEnd())
++ {
++ // Iterate each line, remove line terminators
++ const auto line = device.readLine().replace("\r", "").replace("\n", "");
++ if(line.isEmpty() || line.startsWith('#'))
++ continue; // Ignore empty lines and comments
++
++ if(line.startsWith('[')) // Section header
++ {
++ // Remove [ and ].
++ currentSectionName = QString::fromUtf8(line.mid(1, line.length() - 2));
++ }
++ else if(int equalsPos = line.indexOf('='); equalsPos > 0) // Key=Value
++ {
++ const auto key = QString::fromUtf8(line.left(equalsPos));
++
++ // Read the value, handle escape sequences
++ auto valueBytes = line.mid(equalsPos + 1);
++ valueBytes.replace("\\s", " ").replace("\\n", "\n");
++ valueBytes.replace("\\t", "\t").replace("\\r", "\r");
++ valueBytes.replace("\\\\", "\\");
++
++ auto value = QString::fromUtf8(valueBytes);
++ map.insert(currentSectionName + QLatin1Char('/') + key, value);
++ }
++ }
++
++ return true;
++ }
++ public:
++ // Register the .desktop file format if necessary, return its id.
++ static QSettings::Format format()
++ {
++ static QSettings::Format s_format = QSettings::InvalidFormat;
++ if (s_format == QSettings::InvalidFormat)
++ s_format = QSettings::registerFormat(QStringLiteral("desktop"),
++ DesktopFileFormat::readFunc, nullptr,
++ Qt::CaseSensitive);
++
++ return s_format;
++ }
++ };
++
+ Session::Session()
+ : m_valid(false)
+ , m_type(UnknownSession)
+@@ -169,7 +219,7 @@ namespace SDDM {
+ if (!file.isOpen())
+ return;
+
+- QSettings settings(m_fileName, QSettings::IniFormat);
++ QSettings settings(m_fileName, DesktopFileFormat::format());
+ #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ settings.setIniCodec("UTF-8");
+ #endif
diff --git a/x11-misc/sddm/files/sddm-0.20.0-no-default-pam_systemd-module.patch b/x11-misc/sddm/files/sddm-0.20.0-no-default-pam_systemd-module.patch
new file mode 100644
index 00000000..2ad739a8
--- /dev/null
+++ b/x11-misc/sddm/files/sddm-0.20.0-no-default-pam_systemd-module.patch
@@ -0,0 +1,43 @@
+From 02a13d11dac72699e7580c538c152a7b5e0eb056 Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Tue, 13 Oct 2020 01:10:00 +0200
+Subject: Don't add pam_systemd.so to pam.d/sddm-greeter in case of NO_SYSTEMD
+
+---
+ services/CMakeLists.txt | 7 +++++--
+ services/sddm-greeter.pam.in | 2 +-
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/services/CMakeLists.txt b/services/CMakeLists.txt
+index 3d12eec..2ff13a8 100644
+--- a/services/CMakeLists.txt
++++ b/services/CMakeLists.txt
+@@ -4,10 +4,13 @@ if(SYSTEMD_FOUND)
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sddm.service" DESTINATION "${SYSTEMD_SYSTEM_UNIT_DIR}")
+ endif()
+
++set(LOGIND_PAM_MODULE "session optional")
+ if(USE_ELOGIND)
+- set(LOGIND_PAM_MODULE "pam_elogind.so")
++ set(LOGIND_PAM_MODULE "${LOGIND_PAM_MODULE} pam_elogind.so")
++elseif(NOT NO_SYSTEMD)
++ set(LOGIND_PAM_MODULE "${LOGIND_PAM_MODULE} pam_systemd.so")
+ else()
+- set(LOGIND_PAM_MODULE "pam_systemd.so")
++ set(LOGIND_PAM_MODULE "")
+ endif()
+ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sddm-greeter.pam.in" "${CMAKE_CURRENT_BINARY_DIR}/sddm-greeter.pam")
+
+diff --git a/services/sddm-greeter.pam.in b/services/sddm-greeter.pam.in
+index d41792d..35dcfd5 100644
+--- a/services/sddm-greeter.pam.in
++++ b/services/sddm-greeter.pam.in
+@@ -14,4 +14,4 @@ password required pam_deny.so
+
+ # Setup session
+ session required pam_unix.so
+-session optional @LOGIND_PAM_MODULE@
++@LOGIND_PAM_MODULE@
+--
+2.35.1
+
diff --git a/x11-misc/sddm/files/sddm-0.20.0-respect-user-flags.patch b/x11-misc/sddm/files/sddm-0.20.0-respect-user-flags.patch
new file mode 100644
index 00000000..daaf9f52
--- /dev/null
+++ b/x11-misc/sddm/files/sddm-0.20.0-respect-user-flags.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -51,7 +51,7 @@
+ message(STATUS "Debug build")
+ add_definitions(-DDEBUG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0")
+-else()
++elseif(CMAKE_BUILD_TYPE MATCHES Release)
+ message(STATUS "Release build")
+ add_definitions(-DNDEBUG)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
diff --git a/x11-misc/sddm/files/sddm-0.20.0-sddm.pam-use-substack.patch b/x11-misc/sddm/files/sddm-0.20.0-sddm.pam-use-substack.patch
new file mode 100644
index 00000000..6267adc7
--- /dev/null
+++ b/x11-misc/sddm/files/sddm-0.20.0-sddm.pam-use-substack.patch
@@ -0,0 +1,37 @@
+From 9cbeb07664f4bd4273c2b62a522a864f6d4f27ae Mon Sep 17 00:00:00 2001
+From: Andreas Sturmlechner <asturm@gentoo.org>
+Date: Sat, 4 Feb 2023 13:31:36 +0100
+Subject: [PATCH] sddm.pam: Change to substack for system-login
+
+Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
+---
+ services/sddm.pam | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/services/sddm.pam b/services/sddm.pam
+index df11003..0a073f4 100644
+--- a/services/sddm.pam
++++ b/services/sddm.pam
+@@ -1,15 +1,15 @@
+ #%PAM-1.0
+
+-auth include system-login
++auth substack system-login
+ -auth optional pam_gnome_keyring.so
+ -auth optional pam_kwallet5.so
+
+-account include system-login
++account substack system-login
+
+-password include system-login
++password substack system-login
+ -password optional pam_gnome_keyring.so use_authtok
+
+ session optional pam_keyinit.so force revoke
+-session include system-login
++session substack system-login
+ -session optional pam_gnome_keyring.so auto_start
+ -session optional pam_kwallet5.so auto_start
+--
+2.39.1
+
diff --git a/x11-misc/sddm/sddm-0.18.1-r11.ebuild b/x11-misc/sddm/sddm-0.18.1-r11.ebuild
deleted file mode 100644
index 3318158b..00000000
--- a/x11-misc/sddm/sddm-0.18.1-r11.ebuild
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright 1999-2020 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-PLOCALES="ar bn ca cs da de es et fi fr hi_IN hu is it ja kk ko lt lv nb nl nn pl pt_BR pt_PT ro ru sk sr sr@ijekavian sr@ijekavianlatin sr@latin sv tr uk zh_CN zh_TW"
-inherit cmake plocale systemd tmpfiles
-
-DESCRIPTION="Simple Desktop Display Manager"
-HOMEPAGE="https://github.com/sddm/sddm"
-SRC_URI="https://github.com/${PN}/${PN}/releases/download/v${PV}/${P}.tar.xz"
-
-LICENSE="GPL-2+ MIT CC-BY-3.0 CC-BY-SA-3.0 public-domain"
-SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
-IUSE="+branding consolekit elogind +pam systemd test"
-RESTRICT="!test? ( test )"
-
-REQUIRED_USE="?? ( elogind systemd )"
-
-BDEPEND="
- dev-python/docutils
- >=dev-qt/linguist-tools-5.9.4:5
- kde-frameworks/extra-cmake-modules:5
- virtual/pkgconfig
-"
-RDEPEND="
- acct-group/${PN}
- acct-user/${PN}
- >=dev-qt/qtcore-5.9.4:5
- >=dev-qt/qtdbus-5.9.4:5
- >=dev-qt/qtdeclarative-5.9.4:5
- >=dev-qt/qtgui-5.9.4:5
- >=dev-qt/qtnetwork-5.9.4:5
- >=x11-base/xorg-server-1.15.1
- x11-libs/libxcb[xkb]
- branding? ( x11-themes/redcore-theme-sddm )
- consolekit? ( >=sys-auth/consolekit-0.9.4 )
- elogind? ( sys-auth/elogind )
- pam? ( sys-libs/pam )
- systemd? ( sys-apps/systemd:= )
- !systemd? ( sys-power/upower )
-"
-DEPEND="${RDEPEND}
- test? ( >=dev-qt/qttest-5.9.4:5 )
-"
-
-PATCHES=(
- "${FILESDIR}/${PN}-0.12.0-respect-user-flags.patch"
- "${FILESDIR}/${PN}-0.18.0-Xsession.patch" # bug 611210
- "${FILESDIR}/${PN}-0.18.0-sddmconfdir.patch"
- "${FILESDIR}/${P}-revert-honor-PAM-supplemental-groups.patch"
- "${FILESDIR}/${P}-honor-PAM-supplemental-groups-v2.patch"
- "${FILESDIR}/${P}-only-reuse-online-sessions.patch"
- "${FILESDIR}/${PN}-0.16.0-ck2-revert.patch" # bug 633920
- "${FILESDIR}/pam-1.4-substack.patch"
- "${FILESDIR}/${P}-qt-5.15.2.patch"
- "${FILESDIR}/${P}-cve-2020-28049.patch"
- "${FILESDIR}/${P}-drop-wayland-suffix.patch"
- "${FILESDIR}/${P}-fix-qt-5.15.7.patch"
- "${FILESDIR}/${P}-nvidia-glitches-vt-switch.patch"
-)
-
-src_prepare() {
- cmake_src_prepare
-
- disable_locale() {
- sed -e "/${1}\.ts/d" -i data/translations/CMakeLists.txt || die
- }
- plocale_find_changes "data/translations" "" ".ts"
- plocale_for_each_disabled_locale disable_locale
-
- if ! use test; then
- sed -e "/^find_package/s/ Test//" -i CMakeLists.txt || die
- cmake_comment_add_subdirectory test
- fi
-}
-
-src_configure() {
- local mycmakeargs=(
- -DENABLE_PAM=$(usex pam)
- -DNO_SYSTEMD=$(usex '!systemd')
- -DUSE_ELOGIND=$(usex 'elogind')
- -DBUILD_MAN_PAGES=ON
- -DDBUS_CONFIG_FILENAME="org.freedesktop.sddm.conf"
- )
- cmake_src_configure
-}
-
-src_install() {
- cmake_src_install
- newtmpfiles "${FILESDIR}/${PN}.tmpfiles" "${PN}.conf"
-
- # since 0.18.0 sddm no longer installs a config file
- # install one ourselves in gentoo's default location
- local confd="usr/share/sddm/sddm.conf.d"
- dodir ${confd}
- insinto ${confd}
- newins ${FILESDIR}/${PN}.conf 00default.conf
-
- # override gentoo's default location with the
- # classical location which is /etc/sddm.conf
- insinto etc
- doins ${FILESDIR}/${PN}.conf
-}
-
-pkg_postinst() {
- chown -R ${PN}:${PN} /var/lib/${PN}
- systemd_reenable sddm.service
-}
diff --git a/x11-misc/sddm/sddm-0.20.0.ebuild b/x11-misc/sddm/sddm-0.20.0.ebuild
new file mode 100644
index 00000000..8bf67d80
--- /dev/null
+++ b/x11-misc/sddm/sddm-0.20.0.ebuild
@@ -0,0 +1,109 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+
+QTMIN=5.15.2
+inherit cmake linux-info systemd tmpfiles
+
+DESCRIPTION="Simple Desktop Display Manager"
+HOMEPAGE="https://github.com/sddm/sddm"
+
+LICENSE="GPL-2+ MIT CC-BY-3.0 CC-BY-SA-3.0 public-domain"
+SLOT="0"
+IUSE="+branding +elogind systemd test"
+
+REQUIRED_USE="^^ ( elogind systemd )"
+RESTRICT="!test? ( test )"
+
+COMMON_DEPEND="
+ acct-group/sddm
+ acct-user/sddm
+ >=dev-qt/qtcore-${QTMIN}:5
+ >=dev-qt/qtdbus-${QTMIN}:5
+ >=dev-qt/qtdeclarative-${QTMIN}:5
+ >=dev-qt/qtgui-${QTMIN}:5
+ >=dev-qt/qtnetwork-${QTMIN}:5
+ sys-libs/pam
+ x11-libs/libXau
+ x11-libs/libxcb:=
+ branding? ( x11-themes/redcore-theme-sddm )
+ elogind? ( sys-auth/elogind[pam] )
+ systemd? ( sys-apps/systemd:=[pam] )
+ !systemd? ( sys-power/upower )
+"
+DEPEND="${COMMON_DEPEND}
+ test? ( >=dev-qt/qttest-${QTMIN}:5 )
+"
+RDEPEND="${COMMON_DEPEND}
+ x11-base/xorg-server
+ !systemd? ( gui-libs/display-manager-init )
+"
+BDEPEND="
+ dev-python/docutils
+ >=dev-qt/linguist-tools-${QTMIN}:5
+ kde-frameworks/extra-cmake-modules:5
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ # Downstream patches
+ "${FILESDIR}/${P}-respect-user-flags.patch"
+ "${FILESDIR}/${PN}-0.18.1-Xsession.patch" # bug 611210
+ "${FILESDIR}/${P}-sddm.pam-use-substack.patch" # bug 728550
+ "${FILESDIR}/${P}-disable-etc-debian-check.patch"
+ "${FILESDIR}/${P}-no-default-pam_systemd-module.patch" # bug 669980
+ "${FILESDIR}/${P}-fix-use-development-sessions.patch" # git master
+)
+
+pkg_setup() {
+ local CONFIG_CHECK="~DRM"
+ use kernel_linux && linux-info_pkg_setup
+}
+
+src_prepare() {
+ cmake_src_prepare
+
+ if ! use test; then
+ sed -e "/^find_package/s/ Test//" -i CMakeLists.txt || die
+ cmake_comment_add_subdirectory test
+ fi
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_MAN_PAGES=ON
+ -DDBUS_CONFIG_FILENAME="org.freedesktop.sddm.conf"
+ -DRUNTIME_DIR=/run/sddm
+ -DSYSTEMD_TMPFILES_DIR="/usr/lib/tmpfiles.d"
+ -DNO_SYSTEMD=$(usex !systemd)
+ -DUSE_ELOGIND=$(usex elogind)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ # since 0.18.0 sddm no longer installs a config file
+ # install one ourselves in gentoo's default location
+ insinto /etc/sddm.conf.d/
+ newins "${FILESDIR}"/"${PN}".conf 01redcore.conf
+
+ # override gentoo's default location with the
+ # classical location which is /etc/sddm.conf
+ insinto etc
+ doins "${FILESDIR}"/"${PN}".conf
+}
+
+pkg_postinst() {
+ tmpfiles_process "${PN}".conf
+ chown -R "${PN}":"${PN}" /var/lib/"${PN}"
+
+ if use systemd; then
+ systemd_reenable sddm.service
+ fi
+}