- Intial commit as sddm-kalpa

- Added Requires: group(sddm)

- Ported over pam configs from o:F/sddm

- Update to 0.21.0
  + Sync changes from Fedora

- Removed:
  * sddm.sysconfig
  * sddm-0.18.0-environment_file.patch
- Neither are needed for openSUSE

- Specfile cleanup for openSUSE

- Initial package forked from Fedora

OBS-URL: https://build.opensuse.org/package/show/devel:microos:kalpa/sddm-kalpa?expand=0&rev=1
This commit is contained in:
Shawn Dunn 2024-10-31 01:37:49 +00:00 committed by Git OBS Bridge
commit decde90825
16 changed files with 1753 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

View File

@ -0,0 +1,142 @@
From 4d44531c8f624f5b479c3ff23e8fecc67eb848ab Mon Sep 17 00:00:00 2001
From: Jeremy Linton <jeremy.linton@arm.com>
Date: Fri, 22 Oct 2021 14:51:54 -0500
Subject: [PATCH] Delay for logind, and fallback to seat0
There is systemd/logind race with when restarting
sddm that causes logind1 not to be available. Previously
this meant the seat0 was immediately created regardless
of the state of CanGraphical.
Fixing this, though we still want seat0 to be started
if none of the seats appear to be graphical. Presumably
there are some graphics on the machine, otherwise
why run sddm? Wait a bit, and create seat0 anyway. If
this fails the output from Xorg should tell us why. This
is generally a better strategy than what happens a good
amount of time now, where sddm is started and silent about
why the screen is blank.
References:
* https://bugzilla.redhat.com/2011991
* https://bugzilla.redhat.com/2016310
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
src/daemon/LogindDBusTypes.cpp | 31 +++++++++++++++++++++----------
src/daemon/SeatManager.cpp | 22 ++++++++++++++++++++++
src/daemon/SeatManager.h | 1 +
3 files changed, 44 insertions(+), 10 deletions(-)
diff --git a/src/daemon/LogindDBusTypes.cpp b/src/daemon/LogindDBusTypes.cpp
index 011bb7f..6255c69 100644
--- a/src/daemon/LogindDBusTypes.cpp
+++ b/src/daemon/LogindDBusTypes.cpp
@@ -8,6 +8,8 @@
#include <QDebug>
+#include <unistd.h>
+
class LogindPathInternal {
public:
LogindPathInternal();
@@ -46,17 +48,26 @@ LogindPathInternal::LogindPathInternal()
qRegisterMetaType<UserInfoList>("UserInfoList");
qDBusRegisterMetaType<UserInfoList>();
- if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.login1"))) {
- qDebug() << "Logind interface found";
- available = true;
- serviceName = QStringLiteral("org.freedesktop.login1");
- managerPath = QStringLiteral("/org/freedesktop/login1");
- managerIfaceName = QStringLiteral("org.freedesktop.login1.Manager");
- seatIfaceName = QStringLiteral("org.freedesktop.login1.Seat");
- sessionIfaceName = QStringLiteral("org.freedesktop.login1.Session");
- userIfaceName = QStringLiteral("org.freedesktop.login1.User");
- return;
+#ifdef HAVE_SYSTEMD
+ // systemd-logind should be running, although because it takes a few moments to restart after
+ // systemctl isolate calls, it may not yet be running. Wait a few seconds for it, while blocking everything else.
+ int logind_wait_seconds = 50;
+ while (logind_wait_seconds--) {
+ if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.login1"))) {
+ qDebug() << "Logind interface found";
+ available = true;
+ serviceName = QStringLiteral("org.freedesktop.login1");
+ managerPath = QStringLiteral("/org/freedesktop/login1");
+ managerIfaceName = QStringLiteral("org.freedesktop.login1.Manager");
+ seatIfaceName = QStringLiteral("org.freedesktop.login1.Seat");
+ sessionIfaceName = QStringLiteral("org.freedesktop.login1.Session");
+ userIfaceName = QStringLiteral("org.freedesktop.login1.User");
+ return;
+ }
+ qDebug() << "Sleeping for systemd-logind";
+ usleep(100000);
}
+#endif
if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.ConsoleKit"))) {
qDebug() << "Console kit interface found";
diff --git a/src/daemon/SeatManager.cpp b/src/daemon/SeatManager.cpp
index bd207e6..39d8b85 100644
--- a/src/daemon/SeatManager.cpp
+++ b/src/daemon/SeatManager.cpp
@@ -26,6 +26,9 @@
#include <QDBusMessage>
#include <QDBusPendingReply>
#include <QDBusContext>
+#include <QDebug>
+#include <QFileInfo>
+#include <QTimer>
#include "LogindDBusTypes.h"
@@ -115,6 +118,8 @@ namespace SDDM {
QDBusConnection::systemBus().connect(Logind::serviceName(), Logind::managerPath(), Logind::managerIfaceName(), QStringLiteral("SeatNew"), this, SLOT(logindSeatAdded(QString,QDBusObjectPath)));
QDBusConnection::systemBus().connect(Logind::serviceName(), Logind::managerPath(), Logind::managerIfaceName(), QStringLiteral("SeatRemoved"), this, SLOT(logindSeatRemoved(QString,QDBusObjectPath)));
+
+ QTimer::singleShot(5000, this, &SeatManager::checkSeat);
}
void SeatManager::createSeat(const QString &name) {
@@ -152,6 +157,23 @@ namespace SDDM {
m_seats.value(name)->createDisplay(Display::defaultDisplayServerType());
}
+ // this is a bit hacky, but linux DRM drivers
+ // won't initially be available so there is a race
+ // between determing if a efifb/etc graphical object
+ // is the only graphics on the machine, or a DRM driver
+ // will take over the display. So we will hang out for a few
+ // seconds and if none of the seats are declared cangraphical
+ // its possible the only graphics on the machine don't have
+ // a drm driver.
+ void SeatManager::checkSeat(void) {
+ if (m_seats.isEmpty()) {
+ //if (QFileInfo::exists(QStringLiteral("/dev/fb0"))) {
+ qWarning() << "No graphical seats found, attempt to start one on the main console anyway...";
+ createSeat(QStringLiteral("seat0"));
+ //}
+ }
+ }
+
void SDDM::SeatManager::logindSeatAdded(const QString& name, const QDBusObjectPath& objectPath)
{
auto logindSeat = new LogindSeat(name, objectPath);
diff --git a/src/daemon/SeatManager.h b/src/daemon/SeatManager.h
index b2f9796..aa43047 100644
--- a/src/daemon/SeatManager.h
+++ b/src/daemon/SeatManager.h
@@ -49,6 +49,7 @@ namespace SDDM {
private:
QHash<QString, Seat *> m_seats; //these will exist only for graphical seats
QHash<QString, LogindSeat*> m_systemSeats; //these will exist for all seats
+ void checkSeat(void);
};
}
--
2.39.2

2
README.scripts Normal file
View File

@ -0,0 +1,2 @@
This scripts dir contains only samples, but are generally not used directly.
In practice, sddm runtime uses items under /etc/sddm by default

View File

@ -0,0 +1,44 @@
diff --git a/src/common/Configuration.h b/src/common/Configuration.h
index 54bcace..9b8fa22 100644
--- a/src/common/Configuration.h
+++ b/src/common/Configuration.h
@@ -37,9 +37,8 @@ namespace SDDM {
enum NumState { NUM_NONE, NUM_SET_ON, NUM_SET_OFF };
// Name Type Default value Description
- // TODO: Change default to x11-user in a future release
- Entry(DisplayServer, QString, _S("x11"), _S("Which display server should be used.\n"
- "Valid values are: x11, x11-user, wayland. Wayland support is experimental"));
+ Entry(DisplayServer, QString, _S("wayland"), _S("Which display server should be used.\n"
+ "Valid values are: x11, x11-user, wayland."));
Entry(HaltCommand, QString, _S(HALT_COMMAND), _S("Halt command"));
Entry(RebootCommand, QString, _S(REBOOT_COMMAND), _S("Reboot command"));
Entry(Numlock, NumState, NUM_NONE, _S("Initial NumLock state. Can be on, off or none.\n"
@@ -71,9 +70,9 @@ namespace SDDM {
Entry(SessionDir, QStringList, {_S("/usr/local/share/xsessions"),
_S("/usr/share/xsessions")}, _S("Comma-separated list of directories containing available X sessions"));
Entry(SessionCommand, QString, _S(SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session"));
- Entry(SessionLogFile, QString, _S(".local/share/sddm/xorg-session.log"), _S("Path to the user session log file"));
- Entry(DisplayCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xsetup"), _S("Path to a script to execute when starting the display server"));
- Entry(DisplayStopCommand, QString, _S(DATA_INSTALL_DIR "/scripts/Xstop"), _S("Path to a script to execute when stopping the display server"));
+ Entry(SessionLogFile, QString, _S(".cache/xsession-errors"), _S("Path to the user session log file"));
+ Entry(DisplayCommand, QString, _S(SYS_CONFIG_DIR "/sddm/Xsetup"), _S("Path to a script to execute when starting the display server"));
+ Entry(DisplayStopCommand, QString, _S(SYS_CONFIG_DIR "/sddm/Xstop"), _S("Path to a script to execute when stopping the display server"));
Entry(EnableHiDPI, bool, true, _S("Enable Qt's automatic high-DPI scaling"));
);
@@ -82,12 +81,12 @@ namespace SDDM {
Entry(SessionDir, QStringList, {_S("/usr/local/share/wayland-sessions"),
_S("/usr/share/wayland-sessions")}, _S("Comma-separated list of directories containing available Wayland sessions"));
Entry(SessionCommand, QString, _S(WAYLAND_SESSION_COMMAND), _S("Path to a script to execute when starting the desktop session"));
- Entry(SessionLogFile, QString, _S(".local/share/sddm/wayland-session.log"),_S("Path to the user session log file"));
+ Entry(SessionLogFile, QString, _S(".cache/wayland-errors"), _S("Path to the user session log file"));
Entry(EnableHiDPI, bool, true, _S("Enable Qt's automatic high-DPI scaling"));
);
Section(Users,
- Entry(DefaultPath, QString, _S("/usr/local/bin:/usr/bin:/bin"), _S("Default $PATH for logged in users"));
+ Entry(DefaultPath, QString, _S("/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"), _S("Default $PATH for logged in users"));
Entry(MinimumUid, int, UID_MIN, _S("Minimum user id for displayed users"));
Entry(MaximumUid, int, UID_MAX, _S("Maximum user id for displayed users"));
Entry(HideUsers, QStringList, QStringList(), _S("Comma-separated list of users that should not be listed"));

View File

@ -0,0 +1,67 @@
From 52175648f4e1b415f93b24a3ef970983024659f2 Mon Sep 17 00:00:00 2001
From: Neal Gompa <neal@gompa.dev>
Date: Wed, 28 Feb 2024 16:47:16 -0500
Subject: [PATCH] Default to Qt6 and always use versioned greeters
Distributors can handle creating an unversioned name if necessary.
---
src/common/ThemeMetadata.cpp | 4 ++--
src/daemon/Greeter.cpp | 3 +--
src/greeter/CMakeLists.txt | 9 +--------
3 files changed, 4 insertions(+), 12 deletions(-)
diff --git a/src/common/ThemeMetadata.cpp b/src/common/ThemeMetadata.cpp
index 2cb3762..003056a 100644
--- a/src/common/ThemeMetadata.cpp
+++ b/src/common/ThemeMetadata.cpp
@@ -28,7 +28,7 @@ namespace SDDM {
QString mainScript { QStringLiteral("Main.qml") };
QString configFile;
QString translationsDirectory { QStringLiteral(".") };
- int qtVersion = 5;
+ int qtVersion = 6;
};
ThemeMetadata::ThemeMetadata(const QString &path, QObject *parent) : QObject(parent), d(new ThemeMetadataPrivate()) {
@@ -61,6 +61,6 @@ namespace SDDM {
d->mainScript = settings.value(QStringLiteral("SddmGreeterTheme/MainScript"), QStringLiteral("Main.qml")).toString();
d->configFile = settings.value(QStringLiteral("SddmGreeterTheme/ConfigFile"), QStringLiteral("theme.conf")).toString();
d->translationsDirectory = settings.value(QStringLiteral("SddmGreeterTheme/TranslationsDirectory"), QStringLiteral(".")).toString();
- d->qtVersion = settings.value(QStringLiteral("SddmGreeterTheme/QtVersion"), 5).toInt();
+ d->qtVersion = settings.value(QStringLiteral("SddmGreeterTheme/QtVersion"), 6).toInt();
}
}
diff --git a/src/daemon/Greeter.cpp b/src/daemon/Greeter.cpp
index 07fccde..5a956b6 100644
--- a/src/daemon/Greeter.cpp
+++ b/src/daemon/Greeter.cpp
@@ -82,8 +82,7 @@ namespace SDDM {
QString Greeter::greeterPathForQt(int qtVersion)
{
- const QString suffix = qtVersion == 5 ? QString() : QStringLiteral("-qt%1").arg(qtVersion);
- return QStringLiteral(BIN_INSTALL_DIR "/sddm-greeter%1").arg(suffix);
+ return QStringLiteral(BIN_INSTALL_DIR "/sddm-greeter-qt%1").arg(qtVersion);
}
bool Greeter::start() {
diff --git a/src/greeter/CMakeLists.txt b/src/greeter/CMakeLists.txt
index 72769e4..524368d 100644
--- a/src/greeter/CMakeLists.txt
+++ b/src/greeter/CMakeLists.txt
@@ -1,11 +1,4 @@
-if(QT_MAJOR_VERSION EQUAL "5")
- # Keep the unversioned name for Qt5. When upgrading SDDM, the old daemon
- # might still be running and only know about "sddm-greeter". Keeping the
- # previous name around also helps users calling it directly.
- set(GREETER_TARGET sddm-greeter)
-else()
- set(GREETER_TARGET sddm-greeter-qt${QT_MAJOR_VERSION})
-endif()
+set(GREETER_TARGET sddm-greeter-qt${QT_MAJOR_VERSION})
message(STATUS "Building greeter for Qt ${QT_MAJOR_VERSION} as ${GREETER_TARGET}")
--
2.43.0

3
sddm-0.21.0.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f895de2683627e969e4849dbfbbb2b500787481ca5ba0de6d6dfdae5f1549abf
size 3557266

1018
sddm-PR1876.patch Normal file

File diff suppressed because it is too large Load Diff

12
sddm-autologin.pam Normal file
View File

@ -0,0 +1,12 @@
#%PAM-1.0
auth requisite pam_nologin.so
auth required pam_permit.so
account substack common-account
account include postlogin-account
password substack common-password
password include postlogin-password
session required pam_loginuid.so
session optional pam_keyinit.so revoke force
session substack common-session
session include postlogin-session

10
sddm-greeter.pam Normal file
View File

@ -0,0 +1,10 @@
#%PAM-1.0
# PAM configuration used only for the greeter session
auth required pam_permit.so
account required pam_permit.so
password required pam_deny.so
session required pam_loginuid.so
session optional pam_keyinit.so revoke
# We need pam_systemd, so can't use -nologin here.
session substack common-session

38
sddm-kalpa.changes Normal file
View File

@ -0,0 +1,38 @@
-------------------------------------------------------------------
Thu Oct 31 01:37:21 UTC 2024 - Shawn Dunn <sfalken@opensuse.org>
- Intial commit as sddm-kalpa
-------------------------------------------------------------------
Thu Mar 21 00:02:00 UTC 2024 - Shawn Dunn <sfalken@opensuse.org>
- Added Requires: group(sddm)
-------------------------------------------------------------------
Wed Mar 20 23:23:14 UTC 2024 - Shawn Dunn <sfalken@opensuse.org>
- Ported over pam configs from o:F/sddm
-------------------------------------------------------------------
Fri Mar 8 12:45:26 UTC 2024 - Neal Gompa <ngompa@opensuse.org>
- Update to 0.21.0
+ Sync changes from Fedora
-------------------------------------------------------------------
Wed Feb 21 01:33:51 UTC 2024 - Shawn Dunn <sfalken@opensuse.org>
- Removed:
* sddm.sysconfig
* sddm-0.18.0-environment_file.patch
- Neither are needed for openSUSE
-------------------------------------------------------------------
Fri Feb 16 21:17:01 UTC 2024 - Shawn Dunn <sfalken@opensuse.org>
- Specfile cleanup for openSUSE
-------------------------------------------------------------------
Sat Jan 27 01:38:33 UTC 2024 - Neal Gompa <ngompa@opensuse.org>
- Initial package forked from Fedora

255
sddm-kalpa.spec Normal file
View File

@ -0,0 +1,255 @@
#
# spec file for package sddm-kalpa
#
# Copyright (c) 2024 Neal Gompa
# Copyright (c) 2024 Shawn W Dunn
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# Disable X11
%bcond x11 0
%define _name sddm
Name: sddm-kalpa
Version: 0.21.0
Release: 0
Summary: QML based desktop and login manager - Wayland Only
License: GPL-2.0-or-later
URL: https://github.com/sddm/sddm
Source0: %{url}/archive/v%{version}/%{_name}-%{version}.tar.gz
Source1: sddm.pam
Source2: sddm-autologin.pam
Source3: sddm.conf
Source4: README.scripts
Source5: sddm-x11.conf
# sysusers config file. note these are shipped in the upstream tarball, but we
# cannot use the fles from the tarball for %%pre scriptlet generation, so we
# duplicate them as source files for that purpose; this is an ugly hack that
# should be removed if it becomes possible.
# see: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/TFDMAU7KLMSQTKPJELHSM6PFVXIZ56GK/
Source6: sddm-systemd-sysusers.conf
Source7: sddm-greeter.pam
Provides: sddm = %{version}
Conflicts: sddm-qt6
# PATCH-FIX-UPSTREAM sddm-PR1876.patch https://github.com/sddm/sddm/pull/1876
Patch1: sddm-PR1876.patch
# PATCH-FIX-UPSTREAM 0001-Delay-for-logind-and-fallback-to-seat0.patch
# https://github.com/sddm/sddm/pull/1494
Patch2: 0001-Delay-for-logind-and-fallback-to-seat0.patch
# PATCH-FIX-OPENSUSE sddm-0.20.0-fedora_config.patch Stolen from Fedora
Patch3: sddm-0.20.0-fedora_config.patch
# PATCH-FIX-OPENSUSE sddm-0.21.0-qt6greeter.patch
Patch4: sddm-0.21.0-qt6greeter.patch
BuildRequires: cmake >= 3.5.0
BuildRequires: docutils
BuildRequires: shadow
BuildRequires: systemd-rpm-macros
BuildRequires: sysuser-tools
BuildRequires: fdupes
BuildRequires: cmake(Qt6Core)
BuildRequires: cmake(Qt6DBus)
BuildRequires: cmake(Qt6Gui)
BuildRequires: cmake(Qt6LinguistTools)
BuildRequires: cmake(Qt6Qml)
BuildRequires: cmake(Qt6Quick)
BuildRequires: cmake(Qt6QuickTest)
BuildRequires: cmake(Qt6Test)
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(pam)
BuildRequires: pkgconfig(systemd)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-xkb)
Requires: systemd
Requires: group(sddm)
Requires: sddm-greeter-displayserver
%if %{with x11}
Requires: xinit
%endif
%{?systemd_requires}
%{?sysusers_requires}
%description
sddm-kalpa provides a stripped down wayland only version of sddm
SDDM is a modern graphical display manager aiming to be fast, simple and
beautiful. It uses modern technologies like QtQuick, which in turn gives the
designer the ability to create smooth, animated user interfaces.
%lang_package
%package wayland-generic
Summary: Generic Wayland SDDM greeter configuration
Provides: sddm-greeter-displayserver
Conflicts: sddm-greeter-displayserver
Requires: weston
Requires: %{name} = %{version}
BuildArch: noarch
%description wayland-generic
This package contains configuration and dependencies for SDDM to use Weston
for the greeter display server.
This is the generic default Wayland configuration provided by SDDM.
%if %{with x11}
%package x11
Summary: X11 SDDM greeter configuration
Provides: sddm-greeter-displayserver
Conflicts: sddm-greeter-displayserver
Requires: xorg-x11-server
Requires: %{name} = %{version}
Recommends: libQt6VirtualKeyboard6
BuildArch: noarch
%description x11
This package contains configuration and dependencies for SDDM to use X11 for
the greeter display server.
%endif
%package themes
Summary: SDDM Themes
# for upgrade path
Obsoletes: sddm < 0.2.0
Requires: %{name} = %{version}
BuildArch: noarch
%description themes
A collection of sddm themes, including: elarun, maldives, maya
%prep
%autosetup -p1 -n %{_name}-%{version}
%build
LOGIN_DEFS_PATH="%{_sysconfdir}/login.defs"
[ -e "$LOGIN_DEFS_PATH" ] || LOGIN_DEFS_PATH="%{_distconfdir}/login.defs"
%cmake -DBUILD_WITH_QT6:BOOL=ON \
-DBUILD_MAN_PAGES:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING="Release" \
-DCMAKE_INSTALL_SYSCONFDIR=%{_distconfdir} \
-DENABLE_JOURNALD:BOOL=ON \
-DPID_FILE="/run/sddm.pid" \
-DLOGIN_DEFS_PATH:PATH="${LOGIN_DEFS_PATH}" \
-DSESSION_COMMAND:PATH=/etc/X11/xdm/Xsession \
-DWAYLAND_SESSION_COMMAND:PATH=/etc/sddm/wayland-session
%cmake_build
%install
%cmake_install
mkdir -p %{buildroot}%{_distconfdir}/sddm.conf.d
mkdir -p %{buildroot}%{_prefix}/lib/sddm/sddm.conf.d
mkdir -p %{buildroot}%{_distconfdir}/pam.d
%dnl mv %{buildroot}%{_sysconfdir}/pam.d/* %{buildroot}%{_distconfdir}/pam.d
install -Dpm 644 %{SOURCE1} %{buildroot}%{_distconfdir}/pam.d/sddm
install -Dpm 644 %{SOURCE2} %{buildroot}%{_distconfdir}/pam.d/sddm-autologin
install -Dpm 644 %{SOURCE7} %{buildroot}%{_distconfdir}/pam.d/sddm-greeter
install -Dpm 644 %{SOURCE3} %{buildroot}%{_distconfdir}/sddm.conf
install -Dpm 644 %{SOURCE4} %{buildroot}%{_datadir}/sddm/scripts/README.scripts
%if %{with x11}
install -Dpm 644 %{SOURCE5} %{buildroot}%{_prefix}/lib/sddm/sddm.conf.d/x11.conf
%endif
mkdir -p %{buildroot}/run/sddm
mkdir -p %{buildroot}%{_localstatedir}/lib/sddm
mkdir -p %{buildroot}%{_distconfdir}/sddm/
cp -a %{buildroot}%{_datadir}/sddm/scripts/* %{buildroot}%{_distconfdir}/sddm/
# We're using /etc/X11/xinit/Xsession (by default) instead
rm -fv %{buildroot}%{_sysconfdir}/sddm/Xsession
# De-conflict the dbus file
mv %{buildroot}%{_datadir}/dbus-1/system.d/org.freedesktop.DisplayManager.conf \
%{buildroot}%{_datadir}/dbus-1/system.d/org.freedesktop.DisplayManager-sddm.conf
%if 0%{?suse_version}
# Provide unversioned greeter
ln -sr %{buildroot}%{_bindir}/sddm-greeter-qt6 %{buildroot}%{_bindir}/sddm-greeter
%endif
%fdupes -s %{buildroot}%{_datadir}
%find_lang %{name} --with-qt --all-name
%pre
%sysusers_create_package %{name} %{SOURCE6}
%service_add_pre sddm.service
%post
%service_add_post sddm.service
%preun
%service_del_preun sddm.service
%postun
%service_del_postun sddm.service
%check
%ctest
%files
%license LICENSE
%doc README.md CONTRIBUTORS
%dir %{_distconfdir}/pam.d
%dir %{_distconfdir}/sddm/
%dir %{_distconfdir}/sddm.conf.d
%dir %{_prefix}/lib/sddm
%dir %{_prefix}/lib/sddm/sddm.conf.d
%dir %{_datadir}/sddm
%dir %{_datadir}/sddm/themes
%{_distconfdir}/sddm/*
%{_distconfdir}/sddm.conf
%{_distconfdir}/pam.d/sddm
%{_distconfdir}/pam.d/sddm-autologin
%{_distconfdir}/pam.d/sddm-greeter
%{_datadir}/dbus-1/system.d/org.freedesktop.DisplayManager-sddm.conf
%{_bindir}/sddm
%{_bindir}/sddm-greeter*
%{_libexecdir}/sddm-helper
%{_libexecdir}/sddm-helper-start-wayland
%{_libexecdir}/sddm-helper-start-x11user
%{_tmpfilesdir}/sddm.conf
%{_sysusersdir}/sddm.conf
%ghost %attr(0711, root, sddm) %dir /run/sddm
%attr(1770, sddm, sddm) %dir %{_localstatedir}/lib/sddm
%{_unitdir}/sddm.service
%{_qt6_archdatadir}/qml/SddmComponents/
%{_datadir}/sddm/faces/
%{_datadir}/sddm/flags/
%{_datadir}/sddm/scripts/
%{_mandir}/man?/sddm*
%files wayland-generic
# No files since default configuration
%if %{with x11}
%files x11
%{_prefix}/lib/sddm/sddm.conf.d/x11.conf
%endif
%files themes
%{_datadir}/sddm/themes/elarun/
%{_datadir}/sddm/themes/maldives/
%{_datadir}/sddm/themes/maya/
%files lang -f %{name}.lang
%dir %{_datadir}/sddm/translations-qt6
%changelog

View File

@ -0,0 +1,2 @@
#Type Name ID GECOS Home directory Shell
u sddm - "SDDM Greeter Account" /var/lib/sddm -

2
sddm-x11.conf Normal file
View File

@ -0,0 +1,2 @@
[General]
DisplayServer=x11

122
sddm.conf Normal file
View File

@ -0,0 +1,122 @@
[Autologin]
# Whether sddm should automatically log back into sessions when they exit
#Relogin=false
# Name of session file for autologin session
#Session=
# Username for autologin session
#User=
[General]
# Enable Qt's automatic high-DPI scaling
#EnableHiDPI=false
# Halt command
#HaltCommand=/usr/bin/systemctl poweroff
# Initial NumLock state. Can be on, off or none.
# If property is set to none, numlock won't be changed
# NOTE: Currently ignored if autologin is enabled.
#Numlock=none
# Reboot command
#RebootCommand=/usr/bin/systemctl reboot
# Control x11/wayland startup
# DisplayServer=wayland
[Theme]
# Current theme name
#Current=
# Cursor theme used in the greeter
#CursorTheme=
# Number of users to use as threshold
# above which avatars are disabled
# unless explicitly enabled with EnableAvatars
#DisableAvatarsThreshold=7
# Enable display of custom user avatars
#EnableAvatars=true
# Global directory for user avatars
# The files should be named <username>.face.icon
#FacesDir=/usr/share/sddm/faces
# Theme directory path
#ThemeDir=/usr/share/sddm/themes
[Users]
# Default $PATH for logged in users
#DefaultPath=/usr/local/bin:/usr/bin:/bin
# Comma-separated list of shells.
# Users with these shells as their default won't be listed
#HideShells=
# Comma-separated list of users that should not be listed
#HideUsers=
# Maximum user id for displayed users
#MaximumUid=60000
# Minimum user id for displayed users
#MinimumUid=1000
# Remember the session of the last successfully logged in user
#RememberLastSession=true
# Remember the last successfully logged in user
#RememberLastUser=true
[Wayland]
# Path to a script to execute when starting the desktop session
#SessionCommand=/etc/sddm/wayland-session
# Directory containing available Wayland sessions
#SessionDir=/usr/share/wayland-sessions
# Path to the user session log file
#SessionLogFile=.cache/wayland-errors
[X11]
# Path to a script to execute when starting the display server
#DisplayCommand=/etc/sddm/Xsetup
# Path to a script to execute when stopping the display server
#DisplayStopCommand=/etc/sddm/Xstop
# The lowest virtual terminal number that will be used.
#MinimumVT=1
# Arguments passed to the X server invocation
#ServerArguments=-nolisten tcp
# Path to X server binary
#ServerPath=/usr/bin/X
# Path to a script to execute when starting the desktop session
#SessionCommand=/etc/X11/xinit/Xsession
# Directory containing available X sessions
#SessionDir=/usr/share/xsessions
# Path to the user session log file
#SessionLogFile=.cache/xsession-errors
# Path to the Xauthority file
#UserAuthFile=.Xauthority
# Path to xauth binary
#XauthPath=/usr/bin/xauth
# Path to Xephyr binary
#XephyrPath=/usr/bin/Xephyr

12
sddm.pam Normal file
View File

@ -0,0 +1,12 @@
#%PAM-1.0
auth requisite pam_nologin.so
auth substack common-auth
account substack common-account
account include postlogin-account
password substack common-password
password include postlogin-password
session required pam_loginuid.so
session optional pam_keyinit.so revoke force
session substack common-session
session include postlogin-session