Compare commits

...

1 Commits

Author SHA1 Message Date
madomado b85494dcc0 add: terra-sddm (#1204)
* add: sddm

* fix: terra-sddm instead of just sddm

(cherry picked from commit 61ee2b6de9)
2024-05-05 10:41:53 +00:00
17 changed files with 1795 additions and 0 deletions
@@ -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
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
+5
View File
@@ -0,0 +1,5 @@
project pkg {
rpm {
spec = "terra-sddm.spec"
}
}
@@ -0,0 +1,11 @@
diff -up sddm-0.18.0/services/sddm.service.in.env sddm-0.18.0/services/sddm.service.in
--- sddm-0.18.0/services/sddm.service.in.env 2018-07-18 05:31:40.000000000 -0500
+++ sddm-0.18.0/services/sddm.service.in 2019-03-14 08:23:22.095498405 -0500
@@ -7,6 +7,7 @@ After=systemd-user-sessions.service gett
[Service]
ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/sddm
Restart=always
+EnvironmentFile=-/etc/sysconfig/sddm
[Install]
Alias=display-manager.service
@@ -0,0 +1,53 @@
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"
@@ -51,7 +50,7 @@ namespace SDDM {
// Name Entries (but it's a regular class again)
Section(Theme,
Entry(ThemeDir, QString, _S(DATA_INSTALL_DIR "/themes"), _S("Theme directory path"));
- Entry(Current, QString, _S(""), _S("Current theme name"));
+ Entry(Current, QString, _S("01-breeze-fedora"), _S("Current theme name"));
Entry(FacesDir, QString, _S(DATA_INSTALL_DIR "/faces"), _S("Global directory for user avatars\n"
"The files should be named <username>.face.icon"));
Entry(CursorTheme, QString, QString(), _S("Cursor theme used in the greeter"));
@@ -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"));
@@ -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
File diff suppressed because it is too large Load Diff
+20
View File
@@ -0,0 +1,20 @@
#%PAM-1.0
auth required pam_env.so
auth required pam_permit.so
auth include postlogin
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session required pam_loginuid.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include system-auth
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start
-session optional pam_kwallet.so auto_start
session include postlogin
+17
View File
@@ -0,0 +1,17 @@
#%PAM-1.0
# Load environment from /etc/environment and ~/.pam_environment
auth required pam_env.so
# Always let the greeter start without authentication
auth required pam_permit.so
# No action required for account management
account required pam_permit.so
# Can't change password
password required pam_deny.so
# Setup session
session required pam_unix.so
session optional pam_systemd.so
@@ -0,0 +1,12 @@
diff --git a/services/sddm-tmpfiles.conf.in b/services/sddm-tmpfiles.conf.in
index fb45553..6acfb6c 100644
--- a/services/sddm-tmpfiles.conf.in
+++ b/services/sddm-tmpfiles.conf.in
@@ -1,5 +1,7 @@
# Home dir of the sddm user, also contains state.conf
d ${STATE_DIR} 0750 sddm sddm
+# Workaround for https://pagure.io/fedora-kde/SIG/issue/87
+Z ${STATE_DIR} - sddm sddm
# This contains X11 auth files passed to Xorg and the greeter
d ${RUNTIME_DIR} 0711 root root
# Sockets for IPC
@@ -0,0 +1,2 @@
#Type Name ID GECOS Home directory Shell
u sddm - "SDDM Greeter Account" /var/lib/sddm -
+2
View File
@@ -0,0 +1,2 @@
[General]
DisplayServer=x11
+122
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=01-breeze-fedora
# 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
+23
View File
@@ -0,0 +1,23 @@
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth substack password-auth
-auth optional pam_gnome_keyring.so
-auth optional pam_kwallet5.so
-auth optional pam_kwallet.so
auth include postlogin
account required pam_nologin.so
account include password-auth
password include password-auth
session required pam_selinux.so close
session required pam_loginuid.so
-session optional pam_ck_connector.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include password-auth
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start
-session optional pam_kwallet.so auto_start
session include postlogin
+5
View File
@@ -0,0 +1,5 @@
# workaround https://bugzilla.redhat.com/1686675
# see also https://bugreports.qt.io/browse/QTBUG-58508
QML_DISABLE_DISK_CACHE=1
# enable qDebug messages for debug build
# QT_LOGGING_RULES="*.debug=true"
+293
View File
@@ -0,0 +1,293 @@
# Disable X11 for RHEL 10+
%bcond x11 %[%{undefined rhel} || 0%{?rhel} < 10]
Name: terra-sddm
Version: 0.21.0
Release: 5%{?dist}
License: GPL-2.0-or-later
Summary: QML based desktop and login manager
Provides: sddm = %version-%release
URL: https://github.com/sddm/sddm
Source0: %{url}/archive/v%{version}/sddm-%{version}.tar.gz
## upstream patches
# Port all themes to Qt 6
# Submitted: https://github.com/sddm/sddm/pull/1876
Patch1: sddm-PR1876.patch
## upstreamable patches
# Fix race with logind restart, and start seat0 if !CanGraphical on timer
# https://bugzilla.redhat.com/show_bug.cgi?id=2011991
# https://bugzilla.redhat.com/show_bug.cgi?id=2016310
# Submmited: https://github.com/sddm/sddm/pull/1494
Patch11: 0001-Delay-for-logind-and-fallback-to-seat0.patch
## downstream patches
Patch101: sddm-0.20.0-fedora_config.patch
# sddm.service: +EnvironmentFile=-/etc/sysconfig/sddm
Patch103: sddm-0.18.0-environment_file.patch
# Workaround for https://pagure.io/fedora-kde/SIG/issue/87
Patch104: sddm-rpmostree-tmpfiles-hack.patch
# Workaround lack of Qt 5 greeter build
Patch105: sddm-0.21.0-qt6greeter.patch
# https://github.com/sddm/sddm/pull/1779
Patch106: https://github.com/sddm/sddm/pull/1779.patch
# Shamelessly stolen from gdm
Source10: sddm.pam
# Shamelessly stolen from gdm
Source11: sddm-autologin.pam
# Previously included in sddm sources
Source12: sddm-greeter.pam
# sample sddm.conf generated with sddm --example-config, and entries commented-out
Source13: sddm.conf
# README.scripts
Source14: README.scripts
# sysconfig snippet
Source15: sddm.sysconfig
# sddm x11 override config
Source16: sddm-x11.conf
# sysusers config file. note these are shipped in the upstream tarball
# but we cannot use the files 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/
Source17: sddm-systemd-sysusers.conf
Provides: service(graphical-login) = sddm
BuildRequires: cmake >= 2.8.8
BuildRequires: extra-cmake-modules
BuildRequires: pam-devel
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(systemd)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-xkb)
# sometimes python-docutils, sometimes python2-docutils, sometimes python3-docutils.
# use path then for sanity
BuildRequires: /usr/bin/rst2man
BuildRequires: cmake(Qt6Core)
BuildRequires: cmake(Qt6DBus)
BuildRequires: cmake(Qt6Gui)
BuildRequires: cmake(Qt6Qml)
BuildRequires: cmake(Qt6Quick)
BuildRequires: cmake(Qt6LinguistTools)
BuildRequires: cmake(Qt6Test)
BuildRequires: cmake(Qt6QuickTest)
# verify presence to pull defaults from /etc/login.defs
BuildRequires: shadow-utils
BuildRequires: systemd
BuildRequires: systemd-rpm-macros
Obsoletes: kde-settings-sddm < 20-5
%if 0%{?fedora}
# for /usr/share/backgrounds/default.png
BuildRequires: desktop-backgrounds-compat
BuildRequires: GraphicsMagick
Requires: desktop-backgrounds-compat
# for /usr/share/pixmaps/system-logo-white.png
Requires: system-logos
%endif
Requires: systemd
%if %{with x11}
Requires: xorg-x11-xinit
%endif
%{?systemd_requires}
Requires(pre): shadow-utils
# Virtual dependency for sddm greeter setup
Requires: sddm-greeter-displayserver
Suggests: sddm-wayland-generic
%description
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.
%package wayland-generic
Summary: Generic Wayland SDDM greeter configuration
Provides: sddm-greeter-displayserver
Conflicts: sddm-greeter-displayserver
Requires: weston
Requires: %{name} = %{version}-%{release}
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
# This will eventually go away...
Provides: deprecated()
Requires: xorg-x11-server-Xorg
Requires: %{name} = %{version}-%{release}
Recommends: qt6-qtvirtualkeyboard
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-0.12
Requires: %{name} = %{version}-%{release}
BuildArch: noarch
%description themes
A collection of sddm themes, including: elarun, maldives, maya
%prep
%autosetup -p1 %{?commitdate:-n sddm-%{commit}} -n sddm-%version
%if 0%{?fedora}
#FIXME/TODO: use version on filesystem instead of using a bundled copy
cp -v /usr/share/backgrounds/default.png \
src/greeter/theme/background.png
ls -sh src/greeter/theme/background.png
gm mogrify -resize 1920x1200 src/greeter/theme/background.png
ls -sh src/greeter/theme/background.png
%endif
%build
%cmake \
-DBUILD_WITH_QT6:BOOL=ON \
-DBUILD_MAN_PAGES:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING="Release" \
-DENABLE_JOURNALD:BOOL=ON \
-DSESSION_COMMAND:PATH=/etc/X11/xinit/Xsession \
-DWAYLAND_SESSION_COMMAND:PATH=/etc/sddm/wayland-session
%cmake_build
%install
%cmake_install
mkdir -p %{buildroot}%{_sysconfdir}/sddm.conf.d
mkdir -p %{buildroot}%{_prefix}/lib/sddm/sddm.conf.d
install -Dpm 644 %{SOURCE10} %{buildroot}%{_sysconfdir}/pam.d/sddm
install -Dpm 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/pam.d/sddm-autologin
install -Dpm 644 %{SOURCE12} %{buildroot}%{_sysconfdir}/pam.d/sddm-greeter
install -Dpm 644 %{SOURCE13} %{buildroot}%{_sysconfdir}/sddm.conf
install -Dpm 644 %{SOURCE14} %{buildroot}%{_datadir}/sddm/scripts/README.scripts
install -Dpm 644 %{SOURCE15} %{buildroot}%{_sysconfdir}/sysconfig/sddm
%if %{with x11}
install -Dpm 644 %{SOURCE16} %{buildroot}%{_prefix}/lib/sddm/sddm.conf.d/x11.conf
%endif
mkdir -p %{buildroot}/run/sddm
mkdir -p %{buildroot}%{_localstatedir}/lib/sddm
mkdir -p %{buildroot}%{_sysconfdir}/sddm/
cp -a %{buildroot}%{_datadir}/sddm/scripts/* \
%{buildroot}%{_sysconfdir}/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%{?fedora} && 0%{?fedora} < 43
# Provide unversioned greeter until F40 is EOL
ln -sr %{buildroot}%{_bindir}/sddm-greeter-qt6 %{buildroot}%{_bindir}/sddm-greeter
%endif
%pre
%sysusers_create_compat %{SOURCE17}
%post
%systemd_post sddm.service
# handle incompatible configuration changes
(grep \
-e '^Current=fedora$' \
-e '^\[XDisplay\]$' \
-e '^\[WaylandDisplay\]$' \
%{_sysconfdir}/sddm.conf > /dev/null && \
sed -i.rpmsave \
-e 's|^Current=fedora$|#Current=01-breeze-fedora|' \
-e 's|^\[XDisplay\]$|\[X11\]|' \
-e 's|^\[WaylandDisplay\]$|\[Wayland\]|' \
%{_sysconfdir}/sddm.conf
) ||:
%preun
%systemd_preun sddm.service
%postun
%systemd_postun sddm.service
%files
%license LICENSE
%doc README.md CONTRIBUTORS
%dir %{_sysconfdir}/sddm/
%dir %{_sysconfdir}/sddm.conf.d
%dir %{_prefix}/lib/sddm/sddm.conf.d
%config(noreplace) %{_sysconfdir}/sddm/*
%config(noreplace) %{_sysconfdir}/sddm.conf
%config(noreplace) %{_sysconfdir}/sysconfig/sddm
%config(noreplace) %{_sysconfdir}/pam.d/sddm*
%{_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
%attr(0711, root, sddm) %dir /run/sddm
%attr(1770, sddm, sddm) %dir %{_localstatedir}/lib/sddm
%{_unitdir}/sddm.service
%{_qt6_archdatadir}/qml/SddmComponents/
%dir %{_datadir}/sddm
%{_datadir}/sddm/faces/
%{_datadir}/sddm/flags/
%{_datadir}/sddm/scripts/
%dir %{_datadir}/sddm/themes/
# %%lang'ify? they're small, probably not worth it -- rex
%{_datadir}/sddm/translations*/
%{_mandir}/man1/sddm.1*
%{_mandir}/man1/sddm-greeter.1*
%{_mandir}/man5/sddm.conf.5*
%{_mandir}/man5/sddm-state.conf.5*
%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/
%changelog
%autochangelog
+1
View File
@@ -0,0 +1 @@
rpm.version(gh("sddm/sddm"));