Accepting request 623643 from KDE:Frameworks5
OBS-URL: https://build.opensuse.org/request/show/623643 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/sddm?expand=0&rev=38
This commit is contained in:
@@ -3,3 +3,9 @@ ServerPath=/usr/bin/X
|
||||
SessionCommand=/etc/X11/xdm/Xsession
|
||||
DisplayCommand=/etc/X11/xdm/Xsetup
|
||||
MinimumVT=7
|
||||
# boo#1089932
|
||||
EnableHiDPI=true
|
||||
|
||||
[Users]
|
||||
# boo#979775
|
||||
ReuseSession=true
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
From 9f72d78cd729b76bac96a79ab767b02e30b118c7 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Mon, 14 May 2018 10:06:34 +0200
|
||||
Subject: [PATCH] Don't add session files with NoDisplay=true to SessionModel
|
||||
|
||||
Same treatment as for Hidden. SessionModel is not used for autologin,
|
||||
so for all intents and purposes it's the same. If a user logged in with
|
||||
a NoDisplay=true session, the last session index will be incorrect, but
|
||||
IMO that's the intended behaviour of NoDisplay.
|
||||
---
|
||||
src/common/Session.cpp | 8 ++++++++
|
||||
src/common/Session.h | 2 ++
|
||||
src/greeter/SessionModel.cpp | 2 +-
|
||||
3 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/common/Session.cpp b/src/common/Session.cpp
|
||||
index 4812d67..aa4dad3 100644
|
||||
--- a/src/common/Session.cpp
|
||||
+++ b/src/common/Session.cpp
|
||||
@@ -32,6 +32,7 @@ namespace SDDM {
|
||||
: m_valid(false)
|
||||
, m_type(UnknownSession)
|
||||
, m_isHidden(false)
|
||||
+ , m_isNoDisplay(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -111,6 +112,11 @@ namespace SDDM {
|
||||
return m_isHidden;
|
||||
}
|
||||
|
||||
+ bool Session::isNoDisplay() const
|
||||
+ {
|
||||
+ return m_isNoDisplay;
|
||||
+ }
|
||||
+
|
||||
void Session::setTo(Type type, const QString &_fileName)
|
||||
{
|
||||
QString fileName(_fileName);
|
||||
@@ -177,6 +183,8 @@ namespace SDDM {
|
||||
m_desktopNames = line.mid(13).replace(QLatin1Char(';'), QLatin1Char(':'));
|
||||
if (line.startsWith(QLatin1String("Hidden=")))
|
||||
m_isHidden = line.mid(7).toLower() == QLatin1String("true");
|
||||
+ if (line.startsWith(QLatin1String("NoDisplay=")))
|
||||
+ m_isNoDisplay = line.mid(10).toLower() == QLatin1String("true");
|
||||
}
|
||||
|
||||
file.close();
|
||||
diff --git a/src/common/Session.h b/src/common/Session.h
|
||||
index c8c527e..d285a3f 100644
|
||||
--- a/src/common/Session.h
|
||||
+++ b/src/common/Session.h
|
||||
@@ -60,6 +60,7 @@ namespace SDDM {
|
||||
QString desktopNames() const;
|
||||
|
||||
bool isHidden() const;
|
||||
+ bool isNoDisplay() const;
|
||||
|
||||
void setTo(Type type, const QString &name);
|
||||
|
||||
@@ -79,6 +80,7 @@ namespace SDDM {
|
||||
QString m_xdgSessionType;
|
||||
QString m_desktopNames;
|
||||
bool m_isHidden;
|
||||
+ bool m_isNoDisplay;
|
||||
|
||||
friend class SessionModel;
|
||||
};
|
||||
diff --git a/src/greeter/SessionModel.cpp b/src/greeter/SessionModel.cpp
|
||||
index 27e8c40..2a3c091 100644
|
||||
--- a/src/greeter/SessionModel.cpp
|
||||
+++ b/src/greeter/SessionModel.cpp
|
||||
@@ -143,7 +143,7 @@ namespace SDDM {
|
||||
}
|
||||
}
|
||||
// add to sessions list
|
||||
- if (!si->isHidden() && execAllowed)
|
||||
+ if (!si->isHidden() && !si->isNoDisplay() && execAllowed)
|
||||
d->sessions.push_back(si);
|
||||
else
|
||||
delete si;
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From f6a82a27a0481b761218a5208134c7a72ec8206a Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Sat, 3 Mar 2018 20:07:16 +0100
|
||||
Subject: [PATCH] Don't quit on SIGHUP
|
||||
|
||||
SIGHUP is sent to daemons on reload, so they should reread their configuration.
|
||||
Currently sddm would just quit on reload, which is very unexpected.
|
||||
---
|
||||
src/daemon/DaemonApp.cpp | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/daemon/DaemonApp.cpp b/src/daemon/DaemonApp.cpp
|
||||
index b5c8d49..de78e75 100644
|
||||
--- a/src/daemon/DaemonApp.cpp
|
||||
+++ b/src/daemon/DaemonApp.cpp
|
||||
@@ -68,8 +68,7 @@ namespace SDDM {
|
||||
// initialize signal signalHandler
|
||||
SignalHandler::initialize();
|
||||
|
||||
- // quit when SIGHUP, SIGINT, SIGTERM received
|
||||
- connect(m_signalHandler, SIGNAL(sighupReceived()), this, SLOT(quit()));
|
||||
+ // quit when SIGINT, SIGTERM received
|
||||
connect(m_signalHandler, SIGNAL(sigintReceived()), this, SLOT(quit()));
|
||||
connect(m_signalHandler, SIGNAL(sigtermReceived()), this, SLOT(quit()));
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
From be2f6c82c67a5511b56af66bfe77970c9f72a8c1 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Thu, 22 Mar 2018 09:54:49 +0100
|
||||
Subject: [PATCH] Fix build with Qt < 5.10: Use QString instead of
|
||||
QLatin1String
|
||||
|
||||
QLatin1String only got more QString-like with Qt 5.10, so we can't use
|
||||
those methods.
|
||||
---
|
||||
src/greeter/GreeterApp.cpp | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
|
||||
index 5181e4e..baeb982 100644
|
||||
--- a/src/greeter/GreeterApp.cpp
|
||||
+++ b/src/greeter/GreeterApp.cpp
|
||||
@@ -281,24 +281,24 @@ int main(int argc, char **argv)
|
||||
// We set an attribute based on the platform we run on.
|
||||
// We only know the platform after we constructed QGuiApplication
|
||||
// though, so we need to find it out ourselves.
|
||||
- QLatin1String platform;
|
||||
+ QString platform;
|
||||
for (int i = 1; i < argc - 1; ++i) {
|
||||
if(qstrcmp(argv[i], "-platform") == 0) {
|
||||
- platform = QLatin1String(argv[i + 1]);
|
||||
+ platform = QString::fromUtf8(argv[i + 1]);
|
||||
}
|
||||
}
|
||||
if (platform.isEmpty()) {
|
||||
- platform = QLatin1String(qgetenv("QT_QPA_PLATFORM"));
|
||||
+ platform = QString::fromUtf8(qgetenv("QT_QPA_PLATFORM"));
|
||||
}
|
||||
if (platform.isEmpty()) {
|
||||
- platform = QLatin1String("xcb");
|
||||
+ platform = QStringLiteral("xcb");
|
||||
}
|
||||
|
||||
// HiDPI
|
||||
bool hiDpiEnabled = false;
|
||||
- if (platform == QLatin1String("xcb"))
|
||||
+ if (platform == QStringLiteral("xcb"))
|
||||
hiDpiEnabled = SDDM::mainConfig.X11.EnableHiDPI.get();
|
||||
- else if (platform.startsWith(QLatin1String("wayland")))
|
||||
+ else if (platform.startsWith(QStringLiteral("wayland")))
|
||||
hiDpiEnabled = SDDM::mainConfig.Wayland.EnableHiDPI.get();
|
||||
if (hiDpiEnabled) {
|
||||
qDebug() << "High-DPI autoscaling Enabled";
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
From 287e4b11b940140764131a04dfb4afb3a3d8a84d Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Sat, 28 Apr 2018 11:38:32 +0200
|
||||
Subject: [PATCH] Fix build with Qt 5.11 (#1024)
|
||||
|
||||
qt5_use_modules was deprecated for quite some time and got finally removed.
|
||||
---
|
||||
CMakeLists.txt | 2 +-
|
||||
test/CMakeLists.txt | 3 +--
|
||||
2 files changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: sddm-0.17.0/CMakeLists.txt
|
||||
===================================================================
|
||||
--- sddm-0.17.0.orig/CMakeLists.txt
|
||||
+++ sddm-0.17.0/CMakeLists.txt
|
||||
@@ -93,7 +93,7 @@ find_package(XCB REQUIRED)
|
||||
find_package(XKB REQUIRED)
|
||||
|
||||
# Qt 5
|
||||
-find_package(Qt5 5.6.0 CONFIG REQUIRED Core DBus Gui Qml Quick LinguistTools)
|
||||
+find_package(Qt5 5.6.0 CONFIG REQUIRED Core DBus Gui Qml Quick LinguistTools Test)
|
||||
|
||||
# find qt5 imports dir
|
||||
get_target_property(QMAKE_EXECUTABLE Qt5::qmake LOCATION)
|
||||
Index: sddm-0.17.0/test/CMakeLists.txt
|
||||
===================================================================
|
||||
--- sddm-0.17.0.orig/test/CMakeLists.txt
|
||||
+++ sddm-0.17.0/test/CMakeLists.txt
|
||||
@@ -2,9 +2,8 @@ set(QT_USE_QTTEST TRUE)
|
||||
|
||||
include_directories(../src/common)
|
||||
|
||||
-
|
||||
set(ConfigurationTest_SRCS ConfigurationTest.cpp ../src/common/ConfigReader.cpp)
|
||||
add_executable(ConfigurationTest ${ConfigurationTest_SRCS})
|
||||
add_test(NAME Configuration COMMAND ConfigurationTest)
|
||||
|
||||
-qt5_use_modules(ConfigurationTest Test)
|
||||
+target_link_libraries(ConfigurationTest Qt5::Core Qt5::Test)
|
||||
@@ -1,50 +0,0 @@
|
||||
From 70b1059cebd0bc98d1545a7a702c1c1779286c42 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Thu, 8 Mar 2018 10:47:03 +0100
|
||||
Subject: [PATCH] Fix platform detection for EnableHiDPI
|
||||
|
||||
We can't use QGuiApplication before it's constructed, so find out which
|
||||
platform is requested ourselves.
|
||||
|
||||
Fixes #894
|
||||
---
|
||||
src/greeter/GreeterApp.cpp | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
|
||||
index 1230efa..5181e4e 100644
|
||||
--- a/src/greeter/GreeterApp.cpp
|
||||
+++ b/src/greeter/GreeterApp.cpp
|
||||
@@ -278,11 +278,27 @@ int main(int argc, char **argv)
|
||||
// Install message handler
|
||||
qInstallMessageHandler(SDDM::GreeterMessageHandler);
|
||||
|
||||
+ // We set an attribute based on the platform we run on.
|
||||
+ // We only know the platform after we constructed QGuiApplication
|
||||
+ // though, so we need to find it out ourselves.
|
||||
+ QLatin1String platform;
|
||||
+ for (int i = 1; i < argc - 1; ++i) {
|
||||
+ if(qstrcmp(argv[i], "-platform") == 0) {
|
||||
+ platform = QLatin1String(argv[i + 1]);
|
||||
+ }
|
||||
+ }
|
||||
+ if (platform.isEmpty()) {
|
||||
+ platform = QLatin1String(qgetenv("QT_QPA_PLATFORM"));
|
||||
+ }
|
||||
+ if (platform.isEmpty()) {
|
||||
+ platform = QLatin1String("xcb");
|
||||
+ }
|
||||
+
|
||||
// HiDPI
|
||||
bool hiDpiEnabled = false;
|
||||
- if (QGuiApplication::platformName() == QLatin1String("xcb"))
|
||||
+ if (platform == QLatin1String("xcb"))
|
||||
hiDpiEnabled = SDDM::mainConfig.X11.EnableHiDPI.get();
|
||||
- else if (QGuiApplication::platformName().startsWith(QLatin1String("wayland")))
|
||||
+ else if (platform.startsWith(QLatin1String("wayland")))
|
||||
hiDpiEnabled = SDDM::mainConfig.Wayland.EnableHiDPI.get();
|
||||
if (hiDpiEnabled) {
|
||||
qDebug() << "High-DPI autoscaling Enabled";
|
||||
--
|
||||
2.16.1
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
From 87ff59b5558c3df9384a1d55590a53b9aca74bd0 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Thu, 30 Nov 2017 13:38:27 +0100
|
||||
Subject: [PATCH] Move Xauthority to a different location and truncate it again
|
||||
|
||||
When the hostname changes, started X applications try the new hostname
|
||||
first. If a cookie is found for that new hostname, they try to authenticate
|
||||
(which fails) and exit. So .Xauthority must not contain old cookies.
|
||||
Truncating ~/.Xauthority breaks ssh forwarding though, so the default
|
||||
location is changed to something sddm specific.
|
||||
As it's not possible to login twice as the same user simultaneously,
|
||||
a fixed path at a fixed location is enough.
|
||||
|
||||
Issue #944
|
||||
---
|
||||
data/man/sddm.conf.rst.in | 2 +-
|
||||
src/common/Configuration.h | 2 +-
|
||||
src/daemon/XorgDisplayServer.cpp | 7 +++++--
|
||||
src/helper/UserSession.cpp | 4 ++--
|
||||
4 files changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: sddm-0.17.0/data/man/sddm.conf.rst.in
|
||||
===================================================================
|
||||
--- sddm-0.17.0.orig/data/man/sddm.conf.rst.in
|
||||
+++ sddm-0.17.0/data/man/sddm.conf.rst.in
|
||||
@@ -119,7 +119,7 @@ OPTIONS
|
||||
|
||||
`UserAuthFile=`
|
||||
Path to the Xauthority file, relative to the home directory.
|
||||
- Default value is ".Xauthority".
|
||||
+ Default value is ".local/share/sddm/.Xauthority".
|
||||
|
||||
`DisplayCommand=`
|
||||
Path of script to execute when starting the display server.
|
||||
Index: sddm-0.17.0/src/common/Configuration.h
|
||||
===================================================================
|
||||
--- sddm-0.17.0.orig/src/common/Configuration.h
|
||||
+++ sddm-0.17.0/src/common/Configuration.h
|
||||
@@ -65,7 +65,7 @@ namespace SDDM {
|
||||
Entry(SessionDir, QString, _S("/usr/share/xsessions"), _S("Directory 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(UserAuthFile, QString, _S(".Xauthority"), _S("Path to the Xauthority file"));
|
||||
+ Entry(UserAuthFile, QString, _S(".local/share/sddm/.Xauthority"), _S("Path to the Xauthority 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(MinimumVT, int, MINIMUM_VT, _S("The lowest virtual terminal number that will be used."));
|
||||
Index: sddm-0.17.0/src/daemon/XorgDisplayServer.cpp
|
||||
===================================================================
|
||||
--- sddm-0.17.0.orig/src/daemon/XorgDisplayServer.cpp
|
||||
+++ sddm-0.17.0/src/daemon/XorgDisplayServer.cpp
|
||||
@@ -91,9 +91,12 @@ namespace SDDM {
|
||||
// log message
|
||||
qDebug() << "Adding cookie to" << file;
|
||||
|
||||
- // Touch file
|
||||
+ // Create and truncate the file
|
||||
+ QFileInfo finfo(file);
|
||||
+ QDir().mkpath(finfo.absolutePath());
|
||||
+
|
||||
QFile file_handler(file);
|
||||
- file_handler.open(QIODevice::Append);
|
||||
+ file_handler.open(QIODevice::WriteOnly);
|
||||
file_handler.close();
|
||||
|
||||
QString cmd = QStringLiteral("%1 -f %2 -q").arg(mainConfig.X11.XauthPath.get()).arg(file);
|
||||
Index: sddm-0.17.0/src/helper/UserSession.cpp
|
||||
===================================================================
|
||||
--- sddm-0.17.0.orig/src/helper/UserSession.cpp
|
||||
+++ sddm-0.17.0/src/helper/UserSession.cpp
|
||||
@@ -174,12 +174,12 @@ namespace SDDM {
|
||||
qDebug() << "Adding cookie to" << file;
|
||||
|
||||
|
||||
- // create the path
|
||||
+ // Create and truncate the file
|
||||
QFileInfo finfo(file);
|
||||
QDir().mkpath(finfo.absolutePath());
|
||||
|
||||
QFile file_handler(file);
|
||||
- file_handler.open(QIODevice::Append);
|
||||
+ file_handler.open(QIODevice::WriteOnly);
|
||||
file_handler.close();
|
||||
|
||||
QString cmd = QStringLiteral("%1 -f %2 -q").arg(mainConfig.X11.XauthPath.get()).arg(file);
|
||||
@@ -1,45 +0,0 @@
|
||||
From 2f079338408dfead4ba0e3e424a4d84a6bdf6019 Mon Sep 17 00:00:00 2001
|
||||
From: Sogatori <Sogatori@users.noreply.github.com>
|
||||
Date: Sun, 4 Mar 2018 00:42:28 +0100
|
||||
Subject: [PATCH 1/6] Support for theme supplied default avatars
|
||||
|
||||
This patch adds support for custom default avatars
|
||||
under $ThemeDir/themeName/faces.
|
||||
|
||||
This will make sddm use an avatar icon that is provided by
|
||||
the theme and is consistent with its look.
|
||||
---
|
||||
src/greeter/UserModel.cpp | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
|
||||
index ebc1819..c790336 100644
|
||||
--- a/src/greeter/UserModel.cpp
|
||||
+++ b/src/greeter/UserModel.cpp
|
||||
@@ -52,7 +52,10 @@ namespace SDDM {
|
||||
|
||||
UserModel::UserModel(QObject *parent) : QAbstractListModel(parent), d(new UserModelPrivate()) {
|
||||
const QString facesDir = mainConfig.Theme.FacesDir.get();
|
||||
- const QString defaultFace = QStringLiteral("file://%1/.face.icon").arg(facesDir);
|
||||
+ const QString themeDir = mainConfig.Theme.ThemeDir.get();
|
||||
+ const QString currentTheme = mainConfig.Theme.Current.get();
|
||||
+ const QString themeDefaultFace = QStringLiteral("%1/%2/faces/.face.icon").arg(themeDir).arg(currentTheme);
|
||||
+ const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir);
|
||||
|
||||
struct passwd *current_pw;
|
||||
while ((current_pw = getpwent()) != nullptr) {
|
||||
@@ -91,7 +94,10 @@ namespace SDDM {
|
||||
user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
|
||||
|
||||
// search for face icon
|
||||
- user->icon = defaultFace;
|
||||
+ if (QFile::exists(themeDefaultFace))
|
||||
+ user->icon = QStringLiteral("file://%1").arg(themeDefaultFace);
|
||||
+ else
|
||||
+ user->icon = QStringLiteral("file://%1").arg(defaultFace);
|
||||
|
||||
// add user
|
||||
d->users << user;
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -8,21 +8,18 @@ Subject: [PATCH] Systemd service unit: Use tty7 by default
|
||||
services/sddm.service.in | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/services/sddm.service.in b/services/sddm.service.in
|
||||
index df03d92..0ef4b5d 100644
|
||||
--- a/services/sddm.service.in
|
||||
+++ b/services/sddm.service.in
|
||||
Index: sddm-0.18.0/services/sddm.service.in
|
||||
===================================================================
|
||||
--- sddm-0.18.0.orig/services/sddm.service.in
|
||||
+++ sddm-0.18.0/services/sddm.service.in
|
||||
@@ -1,8 +1,8 @@
|
||||
[Unit]
|
||||
Description=Simple Desktop Display Manager
|
||||
Documentation=man:sddm(1) man:sddm.conf(5)
|
||||
-Conflicts=getty@tty1.service
|
||||
-After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service
|
||||
-After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service systemd-logind.service
|
||||
+Conflicts=getty@tty7.service
|
||||
+After=systemd-user-sessions.service getty@tty7.service plymouth-quit.service
|
||||
+After=systemd-user-sessions.service getty@tty7.service plymouth-quit.service systemd-logind.service
|
||||
|
||||
[Service]
|
||||
ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/sddm
|
||||
--
|
||||
2.12.0
|
||||
|
||||
|
||||
@@ -1,379 +0,0 @@
|
||||
From 66b764abc0f7fa1562cf2b9ef4d751fd5d5a686e Mon Sep 17 00:00:00 2001
|
||||
From: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
||||
Date: Sun, 4 Mar 2018 04:12:55 +0100
|
||||
Subject: [PATCH 1/2] greeter: Use Qt command line parser
|
||||
|
||||
Do not reinvent the wheel with a command line parser.
|
||||
Restructure the code so that GreeterApp no longer need to
|
||||
parse arguments itself.
|
||||
---
|
||||
src/greeter/GreeterApp.cpp | 211 +++++++++++++++++++++++++++------------------
|
||||
src/greeter/GreeterApp.h | 30 +++++--
|
||||
2 files changed, 149 insertions(+), 92 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/GreeterApp.cpp b/src/greeter/GreeterApp.cpp
|
||||
index 5fb70ea..1230efa 100644
|
||||
--- a/src/greeter/GreeterApp.cpp
|
||||
+++ b/src/greeter/GreeterApp.cpp
|
||||
@@ -1,5 +1,5 @@
|
||||
/***************************************************************************
|
||||
-* Copyright (c) 2015-2016 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
|
||||
+* Copyright (c) 2015-2018 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
|
||||
* Copyright (c) 2013 Abdurrahman AVCI <abdurrahmanavci@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@@ -31,6 +31,7 @@
|
||||
|
||||
#include "MessageHandler.h"
|
||||
|
||||
+#include <QCommandLineParser>
|
||||
#include <QGuiApplication>
|
||||
#include <QQuickItem>
|
||||
#include <QQuickView>
|
||||
@@ -42,98 +43,91 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
-namespace SDDM {
|
||||
- QString parameter(const QStringList &arguments, const QString &key, const QString &defaultValue) {
|
||||
- int index = arguments.indexOf(key);
|
||||
+#define TR(x) QT_TRANSLATE_NOOP("Command line parser", QStringLiteral(x))
|
||||
|
||||
- if ((index < 0) || (index >= arguments.size() - 1))
|
||||
- return defaultValue;
|
||||
+static const QEvent::Type StartupEventType = static_cast<QEvent::Type>(QEvent::registerEventType());
|
||||
|
||||
- QString value = arguments.at(index + 1);
|
||||
+namespace SDDM {
|
||||
+ GreeterApp::GreeterApp(QObject *parent)
|
||||
+ : QObject(parent)
|
||||
+ {
|
||||
+ // Translations
|
||||
+ // Components translation
|
||||
+ m_components_tranlator = new QTranslator();
|
||||
+ if (m_components_tranlator->load(QLocale::system(), QString(), QString(), QStringLiteral(COMPONENTS_TRANSLATION_DIR)))
|
||||
+ QCoreApplication::installTranslator(m_components_tranlator);
|
||||
|
||||
- if (value.startsWith(QLatin1Char('-')))
|
||||
- return defaultValue;
|
||||
|
||||
- return value;
|
||||
+ // Create models
|
||||
+ m_sessionModel = new SessionModel();
|
||||
+ m_userModel = new UserModel();
|
||||
+ m_keyboard = new KeyboardModel();
|
||||
}
|
||||
|
||||
- GreeterApp *GreeterApp::self = nullptr;
|
||||
+ bool GreeterApp::isTestModeEnabled() const
|
||||
+ {
|
||||
+ return m_testing;
|
||||
+ }
|
||||
|
||||
- GreeterApp::GreeterApp(int &argc, char **argv) : QGuiApplication(argc, argv) {
|
||||
- // point instance to this
|
||||
- self = this;
|
||||
+ void GreeterApp::setTestModeEnabled(bool value)
|
||||
+ {
|
||||
+ m_testing = value;
|
||||
+ }
|
||||
|
||||
- // Parse arguments
|
||||
- bool testing = false;
|
||||
+ QString GreeterApp::socketName() const
|
||||
+ {
|
||||
+ return m_socket;
|
||||
+ }
|
||||
|
||||
- if (arguments().contains(QStringLiteral("--test-mode")))
|
||||
- testing = true;
|
||||
+ void GreeterApp::setSocketName(const QString &name)
|
||||
+ {
|
||||
+ m_socket = name;
|
||||
+ }
|
||||
|
||||
- // get socket name
|
||||
- QString socket = parameter(arguments(), QStringLiteral("--socket"), QString());
|
||||
+ QString GreeterApp::themePath() const
|
||||
+ {
|
||||
+ return m_themePath;
|
||||
+ }
|
||||
|
||||
- // get theme path (fallback to internal theme)
|
||||
- m_themePath = parameter(arguments(), QStringLiteral("--theme"), QString());
|
||||
+ void GreeterApp::setThemePath(const QString &path)
|
||||
+ {
|
||||
+ m_themePath = path;
|
||||
if (m_themePath.isEmpty())
|
||||
m_themePath = QLatin1String("qrc:/theme");
|
||||
|
||||
- // read theme metadata
|
||||
- m_metadata = new ThemeMetadata(QStringLiteral("%1/metadata.desktop").arg(m_themePath));
|
||||
-
|
||||
- // Translations
|
||||
- // Components translation
|
||||
- m_components_tranlator = new QTranslator();
|
||||
- if (m_components_tranlator->load(QLocale::system(), QString(), QString(), QStringLiteral(COMPONENTS_TRANSLATION_DIR)))
|
||||
- installTranslator(m_components_tranlator);
|
||||
-
|
||||
- // Theme specific translation
|
||||
- m_theme_translator = new QTranslator();
|
||||
- if (m_theme_translator->load(QLocale::system(), QString(), QString(),
|
||||
- QStringLiteral("%1/%2/").arg(m_themePath, m_metadata->translationsDirectory())))
|
||||
- installTranslator(m_theme_translator);
|
||||
+ // Read theme metadata
|
||||
+ const QString metadataPath = QStringLiteral("%1/metadata.desktop").arg(m_themePath);
|
||||
+ if (m_metadata)
|
||||
+ m_metadata->setTo(metadataPath);
|
||||
+ else
|
||||
+ m_metadata = new ThemeMetadata(metadataPath);
|
||||
|
||||
- // get theme config file
|
||||
+ // Get theme config file
|
||||
QString configFile = QStringLiteral("%1/%2").arg(m_themePath).arg(m_metadata->configFile());
|
||||
|
||||
- // read theme config
|
||||
- m_themeConfig = new ThemeConfig(configFile);
|
||||
+ // Read theme config
|
||||
+ if (m_themeConfig)
|
||||
+ m_themeConfig->setTo(configFile);
|
||||
+ else
|
||||
+ m_themeConfig = new ThemeConfig(configFile);
|
||||
|
||||
- // set default icon theme from greeter theme
|
||||
+ // Set default icon theme from greeter theme
|
||||
if (m_themeConfig->contains(QStringLiteral("iconTheme")))
|
||||
QIcon::setThemeName(m_themeConfig->value(QStringLiteral("iconTheme")).toString());
|
||||
|
||||
- // create models
|
||||
-
|
||||
- m_sessionModel = new SessionModel();
|
||||
- m_userModel = new UserModel();
|
||||
- m_proxy = new GreeterProxy(socket);
|
||||
- m_keyboard = new KeyboardModel();
|
||||
-
|
||||
- if(!testing && !m_proxy->isConnected()) {
|
||||
- qCritical() << "Cannot connect to the daemon - is it running?";
|
||||
- exit(EXIT_FAILURE);
|
||||
- }
|
||||
-
|
||||
- // Set numlock upon start
|
||||
- if (m_keyboard->enabled()) {
|
||||
- if (mainConfig.Numlock.get() == MainConfig::NUM_SET_ON)
|
||||
- m_keyboard->setNumLockState(true);
|
||||
- else if (mainConfig.Numlock.get() == MainConfig::NUM_SET_OFF)
|
||||
- m_keyboard->setNumLockState(false);
|
||||
- }
|
||||
-
|
||||
- m_proxy->setSessionModel(m_sessionModel);
|
||||
-
|
||||
- // create views
|
||||
- QList<QScreen *> screens = primaryScreen()->virtualSiblings();
|
||||
- Q_FOREACH (QScreen *screen, screens)
|
||||
- addViewForScreen(screen);
|
||||
+ // Theme specific translation
|
||||
+ if (m_theme_translator)
|
||||
+ m_theme_translator->deleteLater();
|
||||
+ m_theme_translator = new QTranslator();
|
||||
+ if (m_theme_translator->load(QLocale::system(), QString(), QString(),
|
||||
+ QStringLiteral("%1/%2/").arg(m_themePath, m_metadata->translationsDirectory())))
|
||||
+ QCoreApplication::installTranslator(m_theme_translator);
|
||||
+ }
|
||||
|
||||
- // handle screens
|
||||
- connect(this, &GreeterApp::screenAdded, this, &GreeterApp::addViewForScreen);
|
||||
- connect(this, &GreeterApp::primaryScreenChanged, this, [this](QScreen *) {
|
||||
- activatePrimary();
|
||||
- });
|
||||
+ void GreeterApp::customEvent(QEvent *event)
|
||||
+ {
|
||||
+ if (event->type() == StartupEventType)
|
||||
+ startup();
|
||||
}
|
||||
|
||||
void GreeterApp::addViewForScreen(QScreen *screen) {
|
||||
@@ -149,7 +143,7 @@ namespace SDDM {
|
||||
// need to be careful here since Qt will move the view to
|
||||
// another screen before this signal is emitted so we
|
||||
// pass a pointer to the view to our slot
|
||||
- connect(this, &GreeterApp::screenRemoved, this, [view, this](QScreen *) {
|
||||
+ connect(qGuiApp, &QGuiApplication::screenRemoved, this, [view, this](QScreen *) {
|
||||
removeViewForScreen(view);
|
||||
});
|
||||
|
||||
@@ -231,6 +225,38 @@ namespace SDDM {
|
||||
view->deleteLater();
|
||||
}
|
||||
|
||||
+ void GreeterApp::startup()
|
||||
+ {
|
||||
+ // Connect to the daemon
|
||||
+ m_proxy = new GreeterProxy(m_socket);
|
||||
+ if (!m_testing && !m_proxy->isConnected()) {
|
||||
+ qCritical() << "Cannot connect to the daemon - is it running?";
|
||||
+ QCoreApplication::exit(EXIT_FAILURE);
|
||||
+ }
|
||||
+
|
||||
+ // Set numlock upon start
|
||||
+ if (m_keyboard->enabled()) {
|
||||
+ if (mainConfig.Numlock.get() == MainConfig::NUM_SET_ON)
|
||||
+ m_keyboard->setNumLockState(true);
|
||||
+ else if (mainConfig.Numlock.get() == MainConfig::NUM_SET_OFF)
|
||||
+ m_keyboard->setNumLockState(false);
|
||||
+ }
|
||||
+
|
||||
+ // Set session model on proxy
|
||||
+ m_proxy->setSessionModel(m_sessionModel);
|
||||
+
|
||||
+ // Create views
|
||||
+ QList<QScreen *> screens = qGuiApp->primaryScreen()->virtualSiblings();
|
||||
+ Q_FOREACH (QScreen *screen, screens)
|
||||
+ addViewForScreen(screen);
|
||||
+
|
||||
+ // Handle screens
|
||||
+ connect(qGuiApp, &QGuiApplication::screenAdded, this, &GreeterApp::addViewForScreen);
|
||||
+ connect(qGuiApp, &QGuiApplication::primaryScreenChanged, this, [this](QScreen *) {
|
||||
+ activatePrimary();
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
void GreeterApp::activatePrimary() {
|
||||
// activate and give focus to the window assigned to the primary screen
|
||||
Q_FOREACH (QQuickView *view, m_views) {
|
||||
@@ -240,10 +266,16 @@ namespace SDDM {
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+ StartupEvent::StartupEvent()
|
||||
+ : QEvent(StartupEventType)
|
||||
+ {
|
||||
+ }
|
||||
}
|
||||
|
||||
-int main(int argc, char **argv) {
|
||||
- // install message handler
|
||||
+int main(int argc, char **argv)
|
||||
+{
|
||||
+ // Install message handler
|
||||
qInstallMessageHandler(SDDM::GreeterMessageHandler);
|
||||
|
||||
// HiDPI
|
||||
@@ -259,22 +291,29 @@ int main(int argc, char **argv) {
|
||||
qDebug() << "High-DPI autoscaling not Enabled";
|
||||
}
|
||||
|
||||
- QStringList arguments;
|
||||
+ QGuiApplication app(argc, argv);
|
||||
|
||||
- for (int i = 0; i < argc; i++)
|
||||
- arguments << QString::fromLocal8Bit(argv[i]);
|
||||
+ QCommandLineParser parser;
|
||||
+ parser.setApplicationDescription(TR("SDDM greeter"));
|
||||
+ parser.addHelpOption();
|
||||
+ parser.addVersionOption();
|
||||
|
||||
- if (arguments.contains(QStringLiteral("--help")) || arguments.contains(QStringLiteral("-h"))) {
|
||||
- std::cout << "Usage: " << argv[0] << " [options] [arguments]\n"
|
||||
- "Options: \n"
|
||||
- " --theme <theme path> Set greeter theme\n"
|
||||
- " --socket <socket name> Set socket name\n"
|
||||
- " --test-mode Start greeter in test mode" << std::endl;
|
||||
+ QCommandLineOption testModeOption(QLatin1String("test-mode"), TR("Start greeter in test mode"));
|
||||
+ parser.addOption(testModeOption);
|
||||
|
||||
- return EXIT_FAILURE;
|
||||
- }
|
||||
+ QCommandLineOption socketOption(QLatin1String("socket"), TR("Socket name"), TR("name"));
|
||||
+ parser.addOption(socketOption);
|
||||
+
|
||||
+ QCommandLineOption themeOption(QLatin1String("theme"), TR("Greeter theme"), TR("path"));
|
||||
+ parser.addOption(themeOption);
|
||||
+
|
||||
+ parser.process(app);
|
||||
|
||||
- SDDM::GreeterApp app(argc, argv);
|
||||
+ SDDM::GreeterApp *greeter = new SDDM::GreeterApp();
|
||||
+ greeter->setTestModeEnabled(parser.isSet(testModeOption));
|
||||
+ greeter->setSocketName(parser.value(socketOption));
|
||||
+ greeter->setThemePath(parser.value(themeOption));
|
||||
+ QCoreApplication::postEvent(greeter, new SDDM::StartupEvent());
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
diff --git a/src/greeter/GreeterApp.h b/src/greeter/GreeterApp.h
|
||||
index 1ebd981..ed63595 100644
|
||||
--- a/src/greeter/GreeterApp.h
|
||||
+++ b/src/greeter/GreeterApp.h
|
||||
@@ -21,7 +21,7 @@
|
||||
#ifndef GREETERAPP_H
|
||||
#define GREETERAPP_H
|
||||
|
||||
-#include <QGuiApplication>
|
||||
+#include <QObject>
|
||||
#include <QScreen>
|
||||
#include <QQuickView>
|
||||
|
||||
@@ -38,27 +38,38 @@ namespace SDDM {
|
||||
class KeyboardModel;
|
||||
|
||||
|
||||
- class GreeterApp : public QGuiApplication
|
||||
+ class GreeterApp : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_DISABLE_COPY(GreeterApp)
|
||||
public:
|
||||
- explicit GreeterApp(int &argc, char **argv);
|
||||
+ explicit GreeterApp(QObject *parent = nullptr);
|
||||
|
||||
- static GreeterApp *instance() { return self; }
|
||||
+ bool isTestModeEnabled() const;
|
||||
+ void setTestModeEnabled(bool value);
|
||||
+
|
||||
+ QString socketName() const;
|
||||
+ void setSocketName(const QString &name);
|
||||
+
|
||||
+ QString themePath() const;
|
||||
+ void setThemePath(const QString &path);
|
||||
+
|
||||
+ protected:
|
||||
+ void customEvent(QEvent *event) override;
|
||||
|
||||
private slots:
|
||||
void addViewForScreen(QScreen *screen);
|
||||
void removeViewForScreen(QQuickView *view);
|
||||
|
||||
private:
|
||||
- static GreeterApp *self;
|
||||
+ bool m_testing = false;
|
||||
+ QString m_socket;
|
||||
+ QString m_themePath;
|
||||
|
||||
QList<QQuickView *> m_views;
|
||||
QTranslator *m_theme_translator { nullptr },
|
||||
*m_components_tranlator { nullptr };
|
||||
|
||||
- QString m_themePath;
|
||||
ThemeMetadata *m_metadata { nullptr };
|
||||
ThemeConfig *m_themeConfig { nullptr };
|
||||
SessionModel *m_sessionModel { nullptr };
|
||||
@@ -66,8 +77,15 @@ namespace SDDM {
|
||||
GreeterProxy *m_proxy { nullptr };
|
||||
KeyboardModel *m_keyboard { nullptr };
|
||||
|
||||
+ void startup();
|
||||
void activatePrimary();
|
||||
};
|
||||
+
|
||||
+ class StartupEvent : public QEvent
|
||||
+ {
|
||||
+ public:
|
||||
+ StartupEvent();
|
||||
+ };
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
2.16.1
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From 719e6590f325e60e415defc9af3642dbd0183a9f Mon Sep 17 00:00:00 2001
|
||||
From: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
|
||||
Date: Sat, 17 Mar 2018 20:02:48 +0100
|
||||
Subject: [PATCH 2/6] Remove trailing spaces
|
||||
|
||||
---
|
||||
src/greeter/UserModel.cpp | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
|
||||
index c790336..fae5cfa 100644
|
||||
--- a/src/greeter/UserModel.cpp
|
||||
+++ b/src/greeter/UserModel.cpp
|
||||
@@ -94,9 +94,9 @@ namespace SDDM {
|
||||
user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
|
||||
|
||||
// search for face icon
|
||||
- if (QFile::exists(themeDefaultFace))
|
||||
+ if (QFile::exists(themeDefaultFace))
|
||||
user->icon = QStringLiteral("file://%1").arg(themeDefaultFace);
|
||||
- else
|
||||
+ else
|
||||
user->icon = QStringLiteral("file://%1").arg(defaultFace);
|
||||
|
||||
// add user
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
From 47f28bb0b903ae1603b8f855e77bbeb79d8e6ace Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Date: Mon, 19 Mar 2018 19:07:12 -0700
|
||||
Subject: [PATCH 3/6] UserModel: optimize filtering out duplicate users (#995)
|
||||
|
||||
Instead of using naive approach of trying to detect duplicates when
|
||||
inserting a new user into the list of users, which is O(n^2) complexity,
|
||||
let's filter them out after the fact, which is much more efficient on
|
||||
real-world data.
|
||||
|
||||
With this change time to load user list in our environment (over 500000
|
||||
account entries) is reduced from over 1 hour to about 2 seconds.
|
||||
---
|
||||
src/greeter/UserModel.cpp | 10 +++-------
|
||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
|
||||
index fae5cfa..daf93c5 100644
|
||||
--- a/src/greeter/UserModel.cpp
|
||||
+++ b/src/greeter/UserModel.cpp
|
||||
@@ -75,13 +75,6 @@ namespace SDDM {
|
||||
if (mainConfig.Users.HideShells.get().contains(QString::fromLocal8Bit(current_pw->pw_shell)))
|
||||
continue;
|
||||
|
||||
- // skip duplicates
|
||||
- // Note: getpwent() makes no attempt to suppress duplicate information
|
||||
- // if multiple sources are specified in nsswitch.conf(5).
|
||||
- if (d->users.cend()
|
||||
- != std::find_if(d->users.cbegin(), d->users.cend(), [current_pw](const UserPtr & u) { return u->uid == current_pw->pw_uid; }))
|
||||
- continue;
|
||||
-
|
||||
// create user
|
||||
UserPtr user { new User() };
|
||||
user->name = QString::fromLocal8Bit(current_pw->pw_name);
|
||||
@@ -107,6 +100,9 @@ namespace SDDM {
|
||||
|
||||
// sort users by username
|
||||
std::sort(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name < u2->name; });
|
||||
+ // Remove duplicates in case we have several sources specified
|
||||
+ // in nsswitch.conf(5).
|
||||
+ std::unique(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name == u2->name; });
|
||||
|
||||
bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get();
|
||||
if (avatarsEnabled && mainConfig.Theme.EnableAvatars.isDefault()) {
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 126a722a4a36cb4cc6d17714ff4b18b6657493e4 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Date: Wed, 21 Mar 2018 14:24:39 -0700
|
||||
Subject: [PATCH 4/6] UserModel: fix filtering out duplicate users (#998)
|
||||
|
||||
std::unique() is "interesting": it modifies the container, rearranging
|
||||
elements in it, but does not reduce the size of the container, so there
|
||||
are invalid elements at the end that have to be erased explicitly.
|
||||
---
|
||||
src/greeter/UserModel.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
|
||||
index daf93c5..57f236d 100644
|
||||
--- a/src/greeter/UserModel.cpp
|
||||
+++ b/src/greeter/UserModel.cpp
|
||||
@@ -102,7 +102,8 @@ namespace SDDM {
|
||||
std::sort(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name < u2->name; });
|
||||
// Remove duplicates in case we have several sources specified
|
||||
// in nsswitch.conf(5).
|
||||
- std::unique(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name == u2->name; });
|
||||
+ auto newEnd = std::unique(d->users.begin(), d->users.end(), [&](const UserPtr &u1, const UserPtr &u2) { return u1->name == u2->name; });
|
||||
+ d->users.erase(newEnd, d->users.end());
|
||||
|
||||
bool avatarsEnabled = mainConfig.Theme.EnableAvatars.get();
|
||||
if (avatarsEnabled && mainConfig.Theme.EnableAvatars.isDefault()) {
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
From 1ea5a0a85488e425c2d1ffcf3eafa8d8b0abe0b1 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
Date: Fri, 6 Apr 2018 19:56:14 -0700
|
||||
Subject: [PATCH 5/6] UserModel: optimize setting of default user icon (#999)
|
||||
|
||||
Instead of checking for existence of theme-specific icon and re-creating
|
||||
string literals every time we add a new user to the list, do it once.
|
||||
It helps in large organizations with a lot of users.
|
||||
---
|
||||
src/greeter/UserModel.cpp | 9 +++------
|
||||
1 file changed, 3 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/greeter/UserModel.cpp b/src/greeter/UserModel.cpp
|
||||
index 57f236d..f6f4f95 100644
|
||||
--- a/src/greeter/UserModel.cpp
|
||||
+++ b/src/greeter/UserModel.cpp
|
||||
@@ -56,6 +56,8 @@ namespace SDDM {
|
||||
const QString currentTheme = mainConfig.Theme.Current.get();
|
||||
const QString themeDefaultFace = QStringLiteral("%1/%2/faces/.face.icon").arg(themeDir).arg(currentTheme);
|
||||
const QString defaultFace = QStringLiteral("%1/.face.icon").arg(facesDir);
|
||||
+ const QString iconURI = QStringLiteral("file://%1").arg(
|
||||
+ QFile::exists(themeDefaultFace) ? themeDefaultFace : defaultFace);
|
||||
|
||||
struct passwd *current_pw;
|
||||
while ((current_pw = getpwent()) != nullptr) {
|
||||
@@ -85,12 +87,7 @@ namespace SDDM {
|
||||
// if shadow is used pw_passwd will be 'x' nevertheless, so this
|
||||
// will always be true
|
||||
user->needsPassword = strcmp(current_pw->pw_passwd, "") != 0;
|
||||
-
|
||||
- // search for face icon
|
||||
- if (QFile::exists(themeDefaultFace))
|
||||
- user->icon = QStringLiteral("file://%1").arg(themeDefaultFace);
|
||||
- else
|
||||
- user->icon = QStringLiteral("file://%1").arg(defaultFace);
|
||||
+ user->icon = iconURI;
|
||||
|
||||
// add user
|
||||
d->users << user;
|
||||
--
|
||||
2.16.2
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
From 1bc813d08b8130e458a6550ec47fb2bfbe6de080 Mon Sep 17 00:00:00 2001
|
||||
From: Konrad Tegtmeier <jktr@users.noreply.github.com>
|
||||
Date: Fri, 13 Apr 2018 14:06:11 +0200
|
||||
Subject: [PATCH] Honor PAM's ambient supplemental groups. (#834)
|
||||
|
||||
When compiled with USE_PAM, prefer a combination of
|
||||
getgroups(3) and getgrouplist(3) for ambient and user
|
||||
groups, respectively, to initgroups(3).
|
||||
|
||||
This way, groups injected into the PAM environment
|
||||
by means of pam_groups.so aren't ignored.
|
||||
|
||||
Signed-off-by: J. Konrad Tegtmeier-Rottach <jktr@0x16.de>
|
||||
|
||||
Backported to 0.17.0
|
||||
|
||||
Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
|
||||
|
||||
---
|
||||
src/helper/UserSession.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 59 insertions(+)
|
||||
|
||||
diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
|
||||
index 4221ada0..d4fd2cff 100644
|
||||
--- a/src/helper/UserSession.cpp
|
||||
+++ b/src/helper/UserSession.cpp
|
||||
@@ -116,10 +116,69 @@
|
||||
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";
|
||||
+ //free(buffer);
|
||||
+ 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;
|
||||
+ //free(buffer);
|
||||
+ 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);
|
||||
@@ -1,7 +1,7 @@
|
||||
Index: sddm-0.15.0~git/services/sddm-autologin.pam
|
||||
Index: sddm-0.18.0/services/sddm-autologin.pam
|
||||
===================================================================
|
||||
--- sddm-0.15.0~git.orig/services/sddm-autologin.pam
|
||||
+++ sddm-0.15.0~git/services/sddm-autologin.pam
|
||||
--- sddm-0.18.0.orig/services/sddm-autologin.pam
|
||||
+++ sddm-0.18.0/services/sddm-autologin.pam
|
||||
@@ -1,13 +1,6 @@
|
||||
#%PAM-1.0
|
||||
-auth required pam_env.so
|
||||
@@ -21,39 +21,10 @@ Index: sddm-0.15.0~git/services/sddm-autologin.pam
|
||||
+password include common-password
|
||||
+session required pam_loginuid.so
|
||||
+session include common-session
|
||||
Index: sddm-0.15.0~git/services/sddm-greeter.pam
|
||||
Index: sddm-0.18.0/services/sddm.pam
|
||||
===================================================================
|
||||
--- sddm-0.15.0~git.orig/services/sddm-greeter.pam
|
||||
+++ sddm-0.15.0~git/services/sddm-greeter.pam
|
||||
@@ -1,18 +1,7 @@
|
||||
#%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
|
||||
--session optional pam_elogind.so
|
||||
+# PAM configuration used only for the greeter session
|
||||
+auth required pam_permit.so
|
||||
+account required pam_permit.so
|
||||
+password include common-password
|
||||
+session required pam_loginuid.so
|
||||
+session include common-session
|
||||
Index: sddm-0.15.0~git/services/sddm.pam
|
||||
===================================================================
|
||||
--- sddm-0.15.0~git.orig/services/sddm.pam
|
||||
+++ sddm-0.15.0~git/services/sddm.pam
|
||||
--- sddm-0.18.0.orig/services/sddm.pam
|
||||
+++ sddm-0.18.0/services/sddm.pam
|
||||
@@ -1,15 +1,6 @@
|
||||
#%PAM-1.0
|
||||
-
|
||||
@@ -75,3 +46,31 @@ Index: sddm-0.15.0~git/services/sddm.pam
|
||||
+password include common-password
|
||||
+session required pam_loginuid.so
|
||||
+session include common-session
|
||||
Index: sddm-0.18.0/services/sddm-greeter.pam.in
|
||||
===================================================================
|
||||
--- sddm-0.18.0.orig/services/sddm-greeter.pam.in
|
||||
+++ sddm-0.18.0/services/sddm-greeter.pam.in
|
||||
@@ -1,17 +1,7 @@
|
||||
#%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 @LOGIND_PAM_MODULE@
|
||||
+# PAM configuration used only for the greeter session
|
||||
+auth required pam_permit.so
|
||||
+account required pam_permit.so
|
||||
+password include common-password
|
||||
+session required pam_loginuid.so
|
||||
+session include common-session
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0743895b082becb24318564da0de3c2d4d93d567cee78174343716806a6c5704
|
||||
size 3527180
|
||||
3
sddm-0.18.0.tar.gz
Normal file
3
sddm-0.18.0.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9c50b6194f1b4dbf6e1a1b21f23c2c5e384871172985e192b91585986d38eec4
|
||||
size 3526688
|
||||
52
sddm.changes
52
sddm.changes
@@ -1,9 +1,61 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Jul 18 11:16:05 UTC 2018 - fabian@ritter-vogt.de
|
||||
|
||||
- Update to 0.18.0:
|
||||
* Support theme supplied avatars
|
||||
* Compile against Qt 5.11
|
||||
* Fix platform detection for HighDPI
|
||||
* On close, switch VT to a running session if applicable
|
||||
* Better ConsoleKit support
|
||||
* Fix authentication when reusing existing sessions
|
||||
* Hide sessions with NoDisplay=true
|
||||
* Honor PAM's ambient supplemental groups
|
||||
* Cleanup socket destruction
|
||||
* Don't quit on SIGHUP
|
||||
* Updated translations
|
||||
- Set EnableHiDPI=true by default (boo#1089932)
|
||||
- Set ReuseSession=true by default (boo#979775)
|
||||
- Drop patches, now upstream:
|
||||
* 0001-Don-t-add-session-files-with-NoDisplay-true-to-Sessi.patch
|
||||
* 0001-Don-t-quit-on-SIGHUP.patch
|
||||
* 0001-Fix-authentication-when-reusing-an-existing-session.patch
|
||||
* 0001-Fix-build-with-Qt-5.10-Use-QString-instead-of-QLatin.patch
|
||||
* 0001-Fix-build-with-Qt-5.11-1024.patch
|
||||
* 0001-Fix-platform-detection-for-EnableHiDPI.patch
|
||||
* 0001-Skip-theme-for-greeter-call-if-none-is-set.patch
|
||||
* 0001-Support-for-theme-supplied-default-avatars.patch
|
||||
* 0001-greeter-Use-Qt-command-line-parser.patch
|
||||
* 0002-Remove-trailing-spaces.patch
|
||||
* 0003-UserModel-optimize-filtering-out-duplicate-users-995.patch
|
||||
* 0004-UserModel-fix-filtering-out-duplicate-users-998.patch
|
||||
* 0005-UserModel-optimize-setting-of-default-user-icon-999.patch
|
||||
* 0007-Honor-PAMs-ambient-supplemental-groups.patch
|
||||
- Refresh patches:
|
||||
* proper_pam.diff
|
||||
* 0001-Systemd-service-unit-Use-tty7-by-default.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jul 16 15:08:57 UTC 2018 - fabian@ritter-vogt.de
|
||||
|
||||
- Add patch to fix fallback to embedded theme:
|
||||
* 0001-Skip-theme-for-greeter-call-if-none-is-set.patch
|
||||
- Use %license
|
||||
- Add patch to fix authentication when reusing an existing session
|
||||
(boo#1101450, CVE-2018-14345):
|
||||
* 0001-Fix-authentication-when-reusing-an-existing-session.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Jul 7 11:27:49 UTC 2018 - w01dnick@gmail.com
|
||||
|
||||
- Fix 0001-Support-both-X11-XDisplay-Wayland-and-WaylandDisplay.patch
|
||||
* Corrected section name for Wayland
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Jul 3 07:26:24 UTC 2018 - fabian@ritter-vogt.de
|
||||
|
||||
- Remove patch as libxcb bug is fixed meanwhile (bsc#1099908):
|
||||
* 0001-Move-Xauthority-to-a-different-location-and-truncate.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Jul 2 20:53:55 UTC 2018 - luizluca@gmail.com
|
||||
|
||||
|
||||
26
sddm.spec
26
sddm.spec
@@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
Name: sddm
|
||||
Version: 0.17.0
|
||||
Version: 0.18.0
|
||||
Release: 0
|
||||
Summary: QML-based display manager
|
||||
License: GPL-2.0+
|
||||
@@ -28,24 +28,10 @@ Source1: X11-displaymanagers-%{name}
|
||||
Source2: 00-general.conf
|
||||
Source3: 10-theme.conf
|
||||
# Patch0-100: PATCH-FIX-UPSTREAM
|
||||
Patch1: 0001-Don-t-quit-on-SIGHUP.patch
|
||||
Patch2: 0001-greeter-Use-Qt-command-line-parser.patch
|
||||
Patch3: 0001-Fix-platform-detection-for-EnableHiDPI.patch
|
||||
Patch4: 0001-Fix-build-with-Qt-5.10-Use-QString-instead-of-QLatin.patch
|
||||
Patch5: 0001-Support-for-theme-supplied-default-avatars.patch
|
||||
Patch6: 0002-Remove-trailing-spaces.patch
|
||||
Patch7: 0003-UserModel-optimize-filtering-out-duplicate-users-995.patch
|
||||
Patch8: 0004-UserModel-fix-filtering-out-duplicate-users-998.patch
|
||||
Patch9: 0005-UserModel-optimize-setting-of-default-user-icon-999.patch
|
||||
Patch10: 0001-Fix-build-with-Qt-5.11-1024.patch
|
||||
# Backport: https://github.com/sddm/sddm/commit/1bc813d08b8130e458a6550ec47fb2bfbe6de080
|
||||
Patch11: 0007-Honor-PAMs-ambient-supplemental-groups.patch
|
||||
# Not merged yet: https://github.com/sddm/sddm/pull/997
|
||||
Patch50: 0001-Remove-suffix-for-Wayland-session.patch
|
||||
# Not merged yet: https://github.com/sddm/sddm/pull/1017
|
||||
Patch51: 0006-Don-t-fill-UserModel-if-theme-does-not-require-it.patch
|
||||
# Not merged yet: https://github.com/sddm/sddm/pull/1029
|
||||
Patch52: 0001-Don-t-add-session-files-with-NoDisplay-true-to-Sessi.patch
|
||||
# Patch100-?: PATCH-FIX-OPENSUSE
|
||||
# Use openSUSE pam config
|
||||
Patch100: proper_pam.diff
|
||||
@@ -59,7 +45,6 @@ Patch103: 0001-Read-the-DISPLAYMANAGER_AUTOLOGIN-value-from-sysconf.patch
|
||||
Patch104: sddm-service-handle-plymouth.patch
|
||||
# Use tty7 by default in the systemd service unit
|
||||
Patch105: 0001-Systemd-service-unit-Use-tty7-by-default.patch
|
||||
Patch106: 0001-Move-Xauthority-to-a-different-location-and-truncate.patch
|
||||
Patch107: 0003-Leave-duplicate-symlinks-out-of-the-SessionModel.patch
|
||||
Patch108: 0001-Support-both-X11-XDisplay-Wayland-and-WaylandDisplay.patch
|
||||
BuildRequires: cmake
|
||||
@@ -234,7 +219,8 @@ fi
|
||||
:
|
||||
|
||||
%files
|
||||
%doc LICENSE* README*
|
||||
%license LICENSE*
|
||||
%doc README*
|
||||
%config(noreplace) %{_sysconfdir}/sddm.conf
|
||||
%dir %{_sysconfdir}/sddm.conf.d/
|
||||
%config %{_sysconfdir}/pam.d/sddm
|
||||
@@ -264,10 +250,12 @@ fi
|
||||
%{_unitdir}/sddm.service
|
||||
|
||||
%files branding-openSUSE
|
||||
%doc LICENSE* README*
|
||||
%license LICENSE*
|
||||
%doc README*
|
||||
%{_prefix}/lib/sddm/sddm.conf.d/10-theme.conf
|
||||
|
||||
%files branding-upstream
|
||||
%doc LICENSE* README*
|
||||
%license LICENSE*
|
||||
%doc README*
|
||||
|
||||
%changelog
|
||||
|
||||
Reference in New Issue
Block a user