automatic version update by autodist [release 0.21.0-1mamba;Wed Feb 28 2024]
This commit is contained in:
parent
6f759593fe
commit
b1c663e536
@ -1,89 +0,0 @@
|
|||||||
From bd14b3a8a9731e644a50c1c350b7f76038c22bbb Mon Sep 17 00:00:00 2001
|
|
||||||
From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
|
|
||||||
Date: Mon, 19 Jun 2017 23:13:34 +0200
|
|
||||||
Subject: [PATCH] Honor PAM's ambient supplemental groups.
|
|
||||||
|
|
||||||
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>
|
|
||||||
---
|
|
||||||
src/helper/UserSession.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 57 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
|
|
||||||
index 587888d7..4b5b8553 100644
|
|
||||||
--- a/src/helper/UserSession.cpp
|
|
||||||
+++ b/src/helper/UserSession.cpp
|
|
||||||
@@ -116,10 +116,67 @@ namespace SDDM {
|
|
||||||
qCritical() << "setgid(" << pw->pw_gid << ") failed for user: " << username;
|
|
||||||
exit(Auth::HELPER_OTHER_ERROR);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+#ifdef USE_PAM
|
|
||||||
+
|
|
||||||
+ // fetch ambient groups from PAM's environment;
|
|
||||||
+ // these are set by modules such as pam_groups.so
|
|
||||||
+ int n_pam_groups = getgroups(0, NULL);
|
|
||||||
+ gid_t *pam_groups = NULL;
|
|
||||||
+ if (n_pam_groups > 0) {
|
|
||||||
+ pam_groups = new gid_t[n_pam_groups];
|
|
||||||
+ if ((n_pam_groups = getgroups(n_pam_groups, pam_groups)) == -1) {
|
|
||||||
+ qCritical() << "getgroups() failed to fetch supplemental"
|
|
||||||
+ << "PAM groups for user:" << username;
|
|
||||||
+ exit(Auth::HELPER_OTHER_ERROR);
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ n_pam_groups = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // fetch session's user's groups
|
|
||||||
+ int n_user_groups = 0;
|
|
||||||
+ gid_t *user_groups = NULL;
|
|
||||||
+ if (-1 == getgrouplist(username.constData(), pw->pw_gid,
|
|
||||||
+ NULL, &n_user_groups)) {
|
|
||||||
+ user_groups = new gid_t[n_user_groups];
|
|
||||||
+ if ((n_user_groups = getgrouplist(username.constData(),
|
|
||||||
+ pw->pw_gid, user_groups,
|
|
||||||
+ &n_user_groups)) == -1 ) {
|
|
||||||
+ qCritical() << "getgrouplist(" << username << ", " << pw->pw_gid
|
|
||||||
+ << ") failed";
|
|
||||||
+ exit(Auth::HELPER_OTHER_ERROR);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // set groups to concatenation of PAM's ambient
|
|
||||||
+ // groups and the session's user's groups
|
|
||||||
+ int n_groups = n_pam_groups + n_user_groups;
|
|
||||||
+ if (n_groups > 0) {
|
|
||||||
+ gid_t *groups = new gid_t[n_groups];
|
|
||||||
+ memcpy(groups, pam_groups, (n_pam_groups * sizeof(gid_t)));
|
|
||||||
+ memcpy((groups + n_pam_groups), user_groups,
|
|
||||||
+ (n_user_groups * sizeof(gid_t)));
|
|
||||||
+
|
|
||||||
+ // setgroups(2) handles duplicate groups
|
|
||||||
+ if (setgroups(n_groups, groups) != 0) {
|
|
||||||
+ qCritical() << "setgroups() failed for user: " << username;
|
|
||||||
+ exit (Auth::HELPER_OTHER_ERROR);
|
|
||||||
+ }
|
|
||||||
+ delete[] groups;
|
|
||||||
+ }
|
|
||||||
+ delete[] pam_groups;
|
|
||||||
+ delete[] user_groups;
|
|
||||||
+
|
|
||||||
+#else
|
|
||||||
+
|
|
||||||
if (initgroups(pw->pw_name, pw->pw_gid) != 0) {
|
|
||||||
qCritical() << "initgroups(" << pw->pw_name << ", " << pw->pw_gid << ") failed for user: " << username;
|
|
||||||
exit(Auth::HELPER_OTHER_ERROR);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+#endif /* USE_PAM */
|
|
||||||
+
|
|
||||||
if (setuid(pw->pw_uid) != 0) {
|
|
||||||
qCritical() << "setuid(" << pw->pw_uid << ") failed for user: " << username;
|
|
||||||
exit(Auth::HELPER_OTHER_ERROR);
|
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
index 5f93a1b..d5f29a9 100644
|
|
||||||
--- a/src/daemon/XorgDisplayServer.cpp
|
|
||||||
+++ b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
@@ -65,7 +65,7 @@ namespace SDDM {
|
|
||||||
// create a random hexadecimal number
|
|
||||||
const char *digits = "0123456789abcdef";
|
|
||||||
for (int i = 0; i < 32; ++i)
|
|
||||||
- m_cookie[i] = digits[dis(gen)];
|
|
||||||
+ m_cookie[i] = QLatin1Char(digits[dis(gen)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
XorgDisplayServer::~XorgDisplayServer() {
|
|
@ -1,31 +0,0 @@
|
|||||||
From e81dfcd6913c4fbd1801597168291b1e396633d8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
||||||
Date: Wed, 6 Jan 2021 16:00:34 +0100
|
|
||||||
Subject: [PATCH] Fix sessions being started as the wrong type on autologin
|
|
||||||
|
|
||||||
For autologin, the last session is used, which contains a full path.
|
|
||||||
Display::findSessionEntry didn't handle that correctly, which led to
|
|
||||||
X11 sessions getting started as Wayland ones (or the other way around
|
|
||||||
before 994fa67).
|
|
||||||
|
|
||||||
Fixes #1348
|
|
||||||
---
|
|
||||||
src/daemon/Display.cpp | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp
|
|
||||||
index b95f6e51..9f1fabc6 100644
|
|
||||||
--- a/src/daemon/Display.cpp
|
|
||||||
+++ b/src/daemon/Display.cpp
|
|
||||||
@@ -245,6 +245,11 @@ namespace SDDM {
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Display::findSessionEntry(const QDir &dir, const QString &name) const {
|
|
||||||
+ // Given an absolute path: Check that it matches dir
|
|
||||||
+ const QFileInfo fileInfo(name);
|
|
||||||
+ if (fileInfo.isAbsolute() && fileInfo.absolutePath() != dir.absolutePath())
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
QString fileName = name;
|
|
||||||
|
|
||||||
// append extension
|
|
@ -1,14 +0,0 @@
|
|||||||
--- sddm-0.19.0/src/daemon/Display.cpp.orig 2020-12-27 18:36:50.203227500 +0100
|
|
||||||
+++ sddm-0.19.0/src/daemon/Display.cpp 2020-12-27 18:37:25.051854984 +0100
|
|
||||||
@@ -245,6 +245,11 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Display::findSessionEntry(const QDir &dir, const QString &name) const {
|
|
||||||
+ // Given an absolute path: Check that it matches dir
|
|
||||||
+ const QFileInfo fileInfo(name);
|
|
||||||
+ if (fileInfo.isAbsolute() && fileInfo.absoluteFilePath() != dir.absolutePath())
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
QString fileName = name;
|
|
||||||
|
|
||||||
// append extension
|
|
@ -1,87 +0,0 @@
|
|||||||
From 994fa67b01ccfac1aaac08572302bbbea7842dc3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Neal Gompa <ngompa13@gmail.com>
|
|
||||||
Date: Sun, 18 Oct 2020 19:33:52 -0400
|
|
||||||
Subject: [PATCH] Prefer Wayland sessions over X11 ones
|
|
||||||
|
|
||||||
As a general goal and preference, we want to make the change
|
|
||||||
to Wayland as the default and X11 as the fallback.
|
|
||||||
|
|
||||||
This change codifies that preference.
|
|
||||||
|
|
||||||
Reference: https://fedoraproject.org/wiki/Changes/WaylandByDefaultForPlasma
|
|
||||||
---
|
|
||||||
src/common/Session.cpp | 8 ++++----
|
|
||||||
src/daemon/Display.cpp | 6 +++---
|
|
||||||
src/greeter/SessionModel.cpp | 6 +++---
|
|
||||||
3 files changed, 10 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/common/Session.cpp b/src/common/Session.cpp
|
|
||||||
index ab25822b5..f8c91450f 100644
|
|
||||||
--- a/src/common/Session.cpp
|
|
||||||
+++ b/src/common/Session.cpp
|
|
||||||
@@ -131,14 +131,14 @@ namespace SDDM {
|
|
||||||
m_desktopNames.clear();
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
- case X11Session:
|
|
||||||
- m_dir = QDir(mainConfig.X11.SessionDir.get());
|
|
||||||
- m_xdgSessionType = QStringLiteral("x11");
|
|
||||||
- break;
|
|
||||||
case WaylandSession:
|
|
||||||
m_dir = QDir(mainConfig.Wayland.SessionDir.get());
|
|
||||||
m_xdgSessionType = QStringLiteral("wayland");
|
|
||||||
break;
|
|
||||||
+ case X11Session:
|
|
||||||
+ m_dir = QDir(mainConfig.X11.SessionDir.get());
|
|
||||||
+ m_xdgSessionType = QStringLiteral("x11");
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
m_xdgSessionType.clear();
|
|
||||||
break;
|
|
||||||
diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp
|
|
||||||
index 4a5e267d4..bd91446cc 100644
|
|
||||||
--- a/src/daemon/Display.cpp
|
|
||||||
+++ b/src/daemon/Display.cpp
|
|
||||||
@@ -115,10 +115,10 @@ namespace SDDM {
|
|
||||||
if (autologinSession.isEmpty()) {
|
|
||||||
autologinSession = stateConfig.Last.Session.get();
|
|
||||||
}
|
|
||||||
- if (findSessionEntry(mainConfig.X11.SessionDir.get(), autologinSession)) {
|
|
||||||
- sessionType = Session::X11Session;
|
|
||||||
- } else if (findSessionEntry(mainConfig.Wayland.SessionDir.get(), autologinSession)) {
|
|
||||||
+ if (findSessionEntry(mainConfig.Wayland.SessionDir.get(), autologinSession)) {
|
|
||||||
sessionType = Session::WaylandSession;
|
|
||||||
+ } else if (findSessionEntry(mainConfig.X11.SessionDir.get(), autologinSession)) {
|
|
||||||
+ sessionType = Session::X11Session;
|
|
||||||
} else {
|
|
||||||
qCritical() << "Unable to find autologin session entry" << autologinSession;
|
|
||||||
return false;
|
|
||||||
diff --git a/src/greeter/SessionModel.cpp b/src/greeter/SessionModel.cpp
|
|
||||||
index 655f793d0..1953c76a2 100644
|
|
||||||
--- a/src/greeter/SessionModel.cpp
|
|
||||||
+++ b/src/greeter/SessionModel.cpp
|
|
||||||
@@ -41,8 +41,8 @@ namespace SDDM {
|
|
||||||
SessionModel::SessionModel(QObject *parent) : QAbstractListModel(parent), d(new SessionModelPrivate()) {
|
|
||||||
// initial population
|
|
||||||
beginResetModel();
|
|
||||||
- populate(Session::X11Session, mainConfig.X11.SessionDir.get());
|
|
||||||
populate(Session::WaylandSession, mainConfig.Wayland.SessionDir.get());
|
|
||||||
+ populate(Session::X11Session, mainConfig.X11.SessionDir.get());
|
|
||||||
endResetModel();
|
|
||||||
|
|
||||||
// refresh everytime a file is changed, added or removed
|
|
||||||
@@ -50,12 +50,12 @@ namespace SDDM {
|
|
||||||
connect(watcher, &QFileSystemWatcher::directoryChanged, [this](const QString &path) {
|
|
||||||
beginResetModel();
|
|
||||||
d->sessions.clear();
|
|
||||||
- populate(Session::X11Session, mainConfig.X11.SessionDir.get());
|
|
||||||
populate(Session::WaylandSession, mainConfig.Wayland.SessionDir.get());
|
|
||||||
+ populate(Session::X11Session, mainConfig.X11.SessionDir.get());
|
|
||||||
endResetModel();
|
|
||||||
});
|
|
||||||
- watcher->addPath(mainConfig.X11.SessionDir.get());
|
|
||||||
watcher->addPath(mainConfig.Wayland.SessionDir.get());
|
|
||||||
+ watcher->addPath(mainConfig.X11.SessionDir.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
SessionModel::~SessionModel() {
|
|
@ -1,171 +0,0 @@
|
|||||||
From 68cc9e31d1a4c4609f42114782fc485cb07353a4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
||||||
Date: Fri, 9 Oct 2020 21:06:01 +0200
|
|
||||||
Subject: [PATCH] Merge normal and testing paths in XorgDisplayServer::start
|
|
||||||
|
|
||||||
They have much in common and this means that Xephyr can also make use use
|
|
||||||
of -displayfd now.
|
|
||||||
---
|
|
||||||
src/daemon/XorgDisplayServer.cpp | 132 ++++++++++++++-----------------
|
|
||||||
1 file changed, 60 insertions(+), 72 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
index d5f29a94..e60c0221 100644
|
|
||||||
--- a/src/daemon/XorgDisplayServer.cpp
|
|
||||||
+++ b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
@@ -136,95 +136,83 @@ namespace SDDM {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (daemonApp->testing()) {
|
|
||||||
- QStringList args;
|
|
||||||
- QDir x11socketDir(QStringLiteral("/tmp/.X11-unix"));
|
|
||||||
- int display = 100;
|
|
||||||
- while (x11socketDir.exists(QStringLiteral("X%1").arg(display))) {
|
|
||||||
- ++display;
|
|
||||||
- }
|
|
||||||
- m_display = QStringLiteral(":%1").arg(display);
|
|
||||||
- args << m_display << QStringLiteral("-auth") << m_authPath << QStringLiteral("-br") << QStringLiteral("-noreset") << QStringLiteral("-screen") << QStringLiteral("800x600");
|
|
||||||
- process->start(mainConfig.X11.XephyrPath.get(), args);
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- // wait for display server to start
|
|
||||||
- if (!process->waitForStarted()) {
|
|
||||||
- // log message
|
|
||||||
- qCritical() << "Failed to start display server process.";
|
|
||||||
+ // set process environment
|
|
||||||
+ QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
|
||||||
+ env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get());
|
|
||||||
+ process->setProcessEnvironment(env);
|
|
||||||
|
|
||||||
- // return fail
|
|
||||||
- return false;
|
|
||||||
- }
|
|
||||||
- emit started();
|
|
||||||
- } else {
|
|
||||||
- // set process environment
|
|
||||||
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
|
||||||
- env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get());
|
|
||||||
- process->setProcessEnvironment(env);
|
|
||||||
-
|
|
||||||
- //create pipe for communicating with X server
|
|
||||||
- //0 == read from X, 1== write to from X
|
|
||||||
- int pipeFds[2];
|
|
||||||
- if (pipe(pipeFds) != 0) {
|
|
||||||
- qCritical("Could not create pipe to start X server");
|
|
||||||
- }
|
|
||||||
+ //create pipe for communicating with X server
|
|
||||||
+ //0 == read from X, 1== write to from X
|
|
||||||
+ int pipeFds[2];
|
|
||||||
+ if (pipe(pipeFds) != 0) {
|
|
||||||
+ qCritical("Could not create pipe to start X server");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- // start display server
|
|
||||||
- QStringList args = mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts);
|
|
||||||
- args << QStringLiteral("-auth") << m_authPath
|
|
||||||
+ // start display server
|
|
||||||
+ QStringList args;
|
|
||||||
+ if (!daemonApp->testing()) {
|
|
||||||
+ process->setProgram(mainConfig.X11.ServerPath.get());
|
|
||||||
+ args << mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts)
|
|
||||||
<< QStringLiteral("-background") << QStringLiteral("none")
|
|
||||||
- << QStringLiteral("-noreset")
|
|
||||||
- << QStringLiteral("-displayfd") << QString::number(pipeFds[1])
|
|
||||||
<< QStringLiteral("-seat") << displayPtr()->seat()->name();
|
|
||||||
|
|
||||||
if (displayPtr()->seat()->name() == QLatin1String("seat0")) {
|
|
||||||
args << QStringLiteral("vt%1").arg(displayPtr()->terminalId());
|
|
||||||
}
|
|
||||||
- qDebug() << "Running:"
|
|
||||||
- << qPrintable(mainConfig.X11.ServerPath.get())
|
|
||||||
- << qPrintable(args.join(QLatin1Char(' ')));
|
|
||||||
- process->start(mainConfig.X11.ServerPath.get(), args);
|
|
||||||
-
|
|
||||||
- // wait for display server to start
|
|
||||||
- if (!process->waitForStarted()) {
|
|
||||||
- // log message
|
|
||||||
- qCritical() << "Failed to start display server process.";
|
|
||||||
-
|
|
||||||
- // return fail
|
|
||||||
- close(pipeFds[0]);
|
|
||||||
- return false;
|
|
||||||
- }
|
|
||||||
+ } else {
|
|
||||||
+ process->setProgram(mainConfig.X11.XephyrPath.get());
|
|
||||||
+ args << QStringLiteral("-br")
|
|
||||||
+ << QStringLiteral("-screen") << QStringLiteral("800x600");
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- // close the other side of pipe in our process, otherwise reading
|
|
||||||
- // from it may stuck even X server exit.
|
|
||||||
- close(pipeFds[1]);
|
|
||||||
+ args << QStringLiteral("-auth") << m_authPath
|
|
||||||
+ << QStringLiteral("-noreset")
|
|
||||||
+ << QStringLiteral("-displayfd") << QString::number(pipeFds[1]);
|
|
||||||
|
|
||||||
- QFile readPipe;
|
|
||||||
+ process->setArguments(args);
|
|
||||||
+ qDebug() << "Running:"
|
|
||||||
+ << qPrintable(process->program())
|
|
||||||
+ << qPrintable(process->arguments().join(QLatin1Char(' ')));
|
|
||||||
+ process->start();
|
|
||||||
|
|
||||||
- if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) {
|
|
||||||
- qCritical("Failed to open pipe to start X Server");
|
|
||||||
+ // wait for display server to start
|
|
||||||
+ if (!process->waitForStarted()) {
|
|
||||||
+ // log message
|
|
||||||
+ qCritical() << "Failed to start display server process.";
|
|
||||||
|
|
||||||
- close(pipeFds[0]);
|
|
||||||
- return false;
|
|
||||||
- }
|
|
||||||
- QByteArray displayNumber = readPipe.readLine();
|
|
||||||
- if (displayNumber.size() < 2) {
|
|
||||||
- // X server gave nothing (or a whitespace).
|
|
||||||
- qCritical("Failed to read display number from pipe");
|
|
||||||
+ // return fail
|
|
||||||
+ close(pipeFds[0]);
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- close(pipeFds[0]);
|
|
||||||
- return false;
|
|
||||||
- }
|
|
||||||
- displayNumber.prepend(QByteArray(":"));
|
|
||||||
- displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace
|
|
||||||
- m_display = QString::fromLocal8Bit(displayNumber);
|
|
||||||
+ // close the other side of pipe in our process, otherwise reading
|
|
||||||
+ // from it may stuck even X server exit.
|
|
||||||
+ close(pipeFds[1]);
|
|
||||||
+
|
|
||||||
+ QFile readPipe;
|
|
||||||
+
|
|
||||||
+ if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) {
|
|
||||||
+ qCritical("Failed to open pipe to start X Server");
|
|
||||||
|
|
||||||
- // close our pipe
|
|
||||||
close(pipeFds[0]);
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ QByteArray displayNumber = readPipe.readLine();
|
|
||||||
+ if (displayNumber.size() < 2) {
|
|
||||||
+ // X server gave nothing (or a whitespace).
|
|
||||||
+ qCritical("Failed to read display number from pipe");
|
|
||||||
|
|
||||||
- emit started();
|
|
||||||
+ close(pipeFds[0]);
|
|
||||||
+ return false;
|
|
||||||
}
|
|
||||||
+ displayNumber.prepend(QByteArray(":"));
|
|
||||||
+ displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace
|
|
||||||
+ m_display = QString::fromLocal8Bit(displayNumber);
|
|
||||||
+
|
|
||||||
+ // close our pipe
|
|
||||||
+ close(pipeFds[0]);
|
|
||||||
+
|
|
||||||
+ emit started();
|
|
||||||
|
|
||||||
// The file is also used by the greeter, which does care about the
|
|
||||||
// display number. Write the proper entry, if it's different.
|
|
@ -1,25 +0,0 @@
|
|||||||
From 5fd5ed271a0e5b8c8857cc4f5f2084d43fd228f1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
||||||
Date: Mon, 9 Nov 2020 11:22:15 +0100
|
|
||||||
Subject: [PATCH] Only use the base name for $DESKTOP_SESSION
|
|
||||||
|
|
||||||
Other DMs don't use the path.
|
|
||||||
|
|
||||||
Fixes #852
|
|
||||||
---
|
|
||||||
src/common/Session.cpp | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/common/Session.cpp b/src/common/Session.cpp
|
|
||||||
index 2d7b04f1..3de28ef1 100644
|
|
||||||
--- a/src/common/Session.cpp
|
|
||||||
+++ b/src/common/Session.cpp
|
|
||||||
@@ -89,7 +89,7 @@ namespace SDDM {
|
|
||||||
|
|
||||||
QString Session::desktopSession() const
|
|
||||||
{
|
|
||||||
- return fileName().replace(s_entryExtention, QString());
|
|
||||||
+ return QFileInfo(m_fileName).completeBaseName();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString Session::desktopNames() const
|
|
@ -1,212 +0,0 @@
|
|||||||
From adfaa222fdfa6115ea2b320b0bbc2126db9270a5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
||||||
Date: Thu, 12 Nov 2020 20:30:55 +0100
|
|
||||||
Subject: [PATCH 1/3] Retry starting the display server
|
|
||||||
|
|
||||||
Even if the CanGraphical property of a Seat is true, it's possible that it's
|
|
||||||
still too early for X to start, as it might need some driver or device which
|
|
||||||
isn't present yet.
|
|
||||||
|
|
||||||
Fixes #1316
|
|
||||||
---
|
|
||||||
src/daemon/Seat.cpp | 23 ++++++++++++++++++-----
|
|
||||||
src/daemon/Seat.h | 4 +++-
|
|
||||||
src/daemon/XorgDisplayServer.cpp | 10 ++++++----
|
|
||||||
3 files changed, 27 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/daemon/Seat.cpp b/src/daemon/Seat.cpp
|
|
||||||
index eef26da4..838c2221 100644
|
|
||||||
--- a/src/daemon/Seat.cpp
|
|
||||||
+++ b/src/daemon/Seat.cpp
|
|
||||||
@@ -28,6 +28,7 @@
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
#include <QFile>
|
|
||||||
+#include <QTimer>
|
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@ namespace SDDM {
|
|
||||||
return m_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
- bool Seat::createDisplay(int terminalId) {
|
|
||||||
+ void Seat::createDisplay(int terminalId) {
|
|
||||||
//reload config if needed
|
|
||||||
mainConfig.load();
|
|
||||||
|
|
||||||
@@ -84,12 +85,24 @@ namespace SDDM {
|
|
||||||
m_displays << display;
|
|
||||||
|
|
||||||
// start the display
|
|
||||||
- if (!display->start()) {
|
|
||||||
- qCritical() << "Could not start Display server on vt" << terminalId;
|
|
||||||
- return false;
|
|
||||||
+ startDisplay(display);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ void Seat::startDisplay(Display *display, int tryNr) {
|
|
||||||
+ if (display->start())
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ // It's possible that the system isn't ready yet (driver not loaded,
|
|
||||||
+ // device not enumerated, ...). It's not possible to tell when that changes,
|
|
||||||
+ // so try a few times with a delay in between.
|
|
||||||
+ qWarning() << "Attempt" << tryNr << "starting the Display server on vt" << display->terminalId() << "failed";
|
|
||||||
+
|
|
||||||
+ if(tryNr >= 3) {
|
|
||||||
+ qCritical() << "Could not start Display server on vt" << display->terminalId();
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return true;
|
|
||||||
+ QTimer::singleShot(2000, display, [=] { startDisplay(display, tryNr + 1); });
|
|
||||||
}
|
|
||||||
|
|
||||||
void Seat::removeDisplay(Display* display) {
|
|
||||||
diff --git a/src/daemon/Seat.h b/src/daemon/Seat.h
|
|
||||||
index bf22566b..f9fe7331 100644
|
|
||||||
--- a/src/daemon/Seat.h
|
|
||||||
+++ b/src/daemon/Seat.h
|
|
||||||
@@ -35,13 +35,15 @@ namespace SDDM {
|
|
||||||
const QString &name() const;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
- bool createDisplay(int terminalId = -1);
|
|
||||||
+ void createDisplay(int terminalId = -1);
|
|
||||||
void removeDisplay(SDDM::Display* display);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void displayStopped();
|
|
||||||
|
|
||||||
private:
|
|
||||||
+ void startDisplay(SDDM::Display *display, int tryNr = 1);
|
|
||||||
+
|
|
||||||
QString m_name;
|
|
||||||
|
|
||||||
QVector<Display *> m_displays;
|
|
||||||
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
index e60c0221..5f40fe8c 100644
|
|
||||||
--- a/src/daemon/XorgDisplayServer.cpp
|
|
||||||
+++ b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
@@ -248,6 +248,12 @@ namespace SDDM {
|
|
||||||
}
|
|
||||||
|
|
||||||
void XorgDisplayServer::finished() {
|
|
||||||
+ // clean up
|
|
||||||
+ if (process) {
|
|
||||||
+ process->deleteLater();
|
|
||||||
+ process = nullptr;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
// check flag
|
|
||||||
if (!m_started)
|
|
||||||
return;
|
|
||||||
@@ -283,10 +289,6 @@ namespace SDDM {
|
|
||||||
displayStopScript->deleteLater();
|
|
||||||
displayStopScript = nullptr;
|
|
||||||
|
|
||||||
- // clean up
|
|
||||||
- process->deleteLater();
|
|
||||||
- process = nullptr;
|
|
||||||
-
|
|
||||||
// remove authority file
|
|
||||||
QFile::remove(m_authPath);
|
|
||||||
|
|
||||||
|
|
||||||
From d11e1e987b440fa1aaa741719b92472eeee79b17 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
||||||
Date: Wed, 9 Dec 2020 19:28:41 +0100
|
|
||||||
Subject: [PATCH 2/3] Explicitly stop Xorg when starting fails
|
|
||||||
|
|
||||||
When Xorg starts but there is an error, stop it explicitly instead of assuming
|
|
||||||
that X exits itself. This avoids a possibly lingering Xorg process in the
|
|
||||||
XorgDisplayServer instance. Add a check and warning message if Xorg is
|
|
||||||
restarted too early (shouldn't happen).
|
|
||||||
---
|
|
||||||
src/daemon/XorgDisplayServer.cpp | 11 +++++++++--
|
|
||||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
index 5f40fe8c..3a7bee0d 100644
|
|
||||||
--- a/src/daemon/XorgDisplayServer.cpp
|
|
||||||
+++ b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
@@ -118,6 +118,11 @@ namespace SDDM {
|
|
||||||
if (m_started)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
+ if (process) {
|
|
||||||
+ qCritical() << "Tried to start Xorg before previous instance exited";
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
// create process
|
|
||||||
process = new QProcess(this);
|
|
||||||
|
|
||||||
@@ -195,6 +200,7 @@ namespace SDDM {
|
|
||||||
qCritical("Failed to open pipe to start X Server");
|
|
||||||
|
|
||||||
close(pipeFds[0]);
|
|
||||||
+ stop();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
QByteArray displayNumber = readPipe.readLine();
|
|
||||||
@@ -203,6 +209,7 @@ namespace SDDM {
|
|
||||||
qCritical("Failed to read display number from pipe");
|
|
||||||
|
|
||||||
close(pipeFds[0]);
|
|
||||||
+ stop();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
displayNumber.prepend(QByteArray(":"));
|
|
||||||
@@ -219,6 +226,7 @@ namespace SDDM {
|
|
||||||
if(m_display != QStringLiteral(":0")) {
|
|
||||||
if(!addCookie(m_authPath)) {
|
|
||||||
qCritical() << "Failed to write xauth file";
|
|
||||||
+ stop();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -232,8 +240,7 @@ namespace SDDM {
|
|
||||||
}
|
|
||||||
|
|
||||||
void XorgDisplayServer::stop() {
|
|
||||||
- // check flag
|
|
||||||
- if (!m_started)
|
|
||||||
+ if (!process)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// log message
|
|
||||||
|
|
||||||
From 78048b22e3988d3daec9c271883fa114abc114dc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
|
||||||
Date: Wed, 9 Dec 2020 19:33:08 +0100
|
|
||||||
Subject: [PATCH 3/3] Emit XorgDisplayServer::started only when the auth file
|
|
||||||
is ready
|
|
||||||
|
|
||||||
---
|
|
||||||
src/daemon/XorgDisplayServer.cpp | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
index 3a7bee0d..331adcda 100644
|
|
||||||
--- a/src/daemon/XorgDisplayServer.cpp
|
|
||||||
+++ b/src/daemon/XorgDisplayServer.cpp
|
|
||||||
@@ -219,8 +219,6 @@ namespace SDDM {
|
|
||||||
// close our pipe
|
|
||||||
close(pipeFds[0]);
|
|
||||||
|
|
||||||
- emit started();
|
|
||||||
-
|
|
||||||
// The file is also used by the greeter, which does care about the
|
|
||||||
// display number. Write the proper entry, if it's different.
|
|
||||||
if(m_display != QStringLiteral(":0")) {
|
|
||||||
@@ -232,6 +230,8 @@ namespace SDDM {
|
|
||||||
}
|
|
||||||
changeOwner(m_authPath);
|
|
||||||
|
|
||||||
+ emit started();
|
|
||||||
+
|
|
||||||
// set flag
|
|
||||||
m_started = true;
|
|
||||||
|
|
33
sddm.spec
33
sddm.spec
@ -2,8 +2,8 @@
|
|||||||
%define group_sddm 68
|
%define group_sddm 68
|
||||||
Name: sddm
|
Name: sddm
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 0.20.0
|
Version: 0.21.0
|
||||||
Release: 3mamba
|
Release: 1mamba
|
||||||
Summary: QML based X11 and Wayland display manager
|
Summary: QML based X11 and Wayland display manager
|
||||||
Group: Graphical Desktop/Applications/Environment
|
Group: Graphical Desktop/Applications/Environment
|
||||||
Vendor: openmamba
|
Vendor: openmamba
|
||||||
@ -11,17 +11,8 @@ Distribution: openmamba
|
|||||||
Packager: Silvan Calarco <silvan.calarco@mambasoft.it>
|
Packager: Silvan Calarco <silvan.calarco@mambasoft.it>
|
||||||
URL: https://github.com/sddm/sddm
|
URL: https://github.com/sddm/sddm
|
||||||
Source: https://github.com/sddm/sddm.git/v%{version}/sddm-%{version}.tar.bz2
|
Source: https://github.com/sddm/sddm.git/v%{version}/sddm-%{version}.tar.bz2
|
||||||
#Source: https://github.com/sddm/sddm.git/develop/sddm-%{version}.tar.bz2
|
|
||||||
Patch0: sddm-0.20.0-openmamba-pam-1.patch
|
Patch0: sddm-0.20.0-openmamba-pam-1.patch
|
||||||
Patch1: sddm-0.17.0.20180408git-fix-pam-group.patch
|
|
||||||
Patch2: sddm-0.18.0-autorotate.patch
|
Patch2: sddm-0.18.0-autorotate.patch
|
||||||
Patch3: sddm-0.19.0-fix-xorg-autologin.patch
|
|
||||||
Patch4: sddm-0.19.0-upstream-Merge_normal_and_testing_paths_in_XorgDisplayServer__start.patch
|
|
||||||
Patch5: sddm-0.19.0-upstream-retry-starting-the-xserver.patch
|
|
||||||
Patch6: sddm-0.19.0-upstream-only_use_the_basename_for_desktop_session.patch
|
|
||||||
Patch7: sddm-0.19.0-fix-sessions-being-started-as-the-wrong-type-on-autologin.patch
|
|
||||||
Patch8: sddm-0.19.0-fix-build.patch
|
|
||||||
Patch9: sddm-0.19.0-revert-prefer_wayland_sessions_over_X11_ones.patch
|
|
||||||
License: GPL
|
License: GPL
|
||||||
## AUTOBUILDREQ-BEGIN
|
## AUTOBUILDREQ-BEGIN
|
||||||
BuildRequires: glibc-devel
|
BuildRequires: glibc-devel
|
||||||
@ -47,12 +38,6 @@ QML based X11 and Wayland display manager.
|
|||||||
%setup -q
|
%setup -q
|
||||||
%patch 0 -p1
|
%patch 0 -p1
|
||||||
%patch 2 -p1
|
%patch 2 -p1
|
||||||
#%patch 4 -p1
|
|
||||||
#%patch 5 -p1
|
|
||||||
#%patch 6 -p1
|
|
||||||
#%patch 7 -p1 -b .fix-sessions-being-started-as-the-wrong-type-on-autologin
|
|
||||||
#%patch 8 -p1 -b .fix-build
|
|
||||||
#%patch 9 -p1 -R -b .revert-prefer_wayland_sessions_over_X11_ones
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%cmake -d build
|
%cmake -d build
|
||||||
@ -115,16 +100,15 @@ fi
|
|||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%{_sysconfdir}/dbus-1/system.d/org.freedesktop.DisplayManager.conf
|
|
||||||
%{_sysconfdir}/pam.d/sddm
|
%{_sysconfdir}/pam.d/sddm
|
||||||
%{_sysconfdir}/pam.d/sddm-autologin
|
%{_sysconfdir}/pam.d/sddm-autologin
|
||||||
%{_sysconfdir}/pam.d/sddm-greeter
|
%{_sysconfdir}/pam.d/sddm-greeter
|
||||||
#%config(noreplace) %{_sysconfdir}/sddm.conf
|
%{_bindir}/sddm
|
||||||
|
%{_bindir}/sddm-greeter
|
||||||
%{_unitdir}/sddm.service
|
%{_unitdir}/sddm.service
|
||||||
%{_sysusersdir}/sddm.conf
|
%{_sysusersdir}/sddm.conf
|
||||||
%{_tmpfilesdir}/sddm.conf
|
%{_tmpfilesdir}/sddm.conf
|
||||||
%{_bindir}/sddm
|
%{_datadir}/dbus-1/system.d/org.freedesktop.DisplayManager.conf
|
||||||
%{_bindir}/sddm-greeter
|
|
||||||
%dir %{_prefix}/lib/sddm/sddm.conf.d
|
%dir %{_prefix}/lib/sddm/sddm.conf.d
|
||||||
%{_prefix}/lib/sddm/sddm.conf.d/default.conf
|
%{_prefix}/lib/sddm/sddm.conf.d/default.conf
|
||||||
%dir %{_libdir}/qt5/qml/SddmComponents
|
%dir %{_libdir}/qt5/qml/SddmComponents
|
||||||
@ -137,19 +121,20 @@ fi
|
|||||||
%dir %{_datadir}/sddm/scripts
|
%dir %{_datadir}/sddm/scripts
|
||||||
%{_datadir}/sddm/scripts/*
|
%{_datadir}/sddm/scripts/*
|
||||||
%dir %{_datadir}/sddm/themes
|
%dir %{_datadir}/sddm/themes
|
||||||
#%dir %{_datadir}/sddm/themes/circles
|
|
||||||
#%{_datadir}/sddm/themes/circles/*
|
|
||||||
%dir %{_datadir}/sddm/themes/elarun
|
%dir %{_datadir}/sddm/themes/elarun
|
||||||
%{_datadir}/sddm/themes/elarun/*
|
%{_datadir}/sddm/themes/elarun/*
|
||||||
%dir %{_datadir}/sddm/themes/maldives
|
%dir %{_datadir}/sddm/themes/maldives
|
||||||
%{_datadir}/sddm/themes/maldives/*
|
%{_datadir}/sddm/themes/maldives/*
|
||||||
%dir %{_datadir}/sddm/themes/maya
|
%dir %{_datadir}/sddm/themes/maya
|
||||||
%{_datadir}/sddm/themes/maya/*
|
%{_datadir}/sddm/themes/maya/*
|
||||||
%{_datadir}/sddm/translations/*.qm
|
%{_datadir}/sddm/translations-qt5/*.qm
|
||||||
%attr(-,sddm,sddm) %dir %{_localstatedir}/lib/sddm
|
%attr(-,sddm,sddm) %dir %{_localstatedir}/lib/sddm
|
||||||
%doc LICENSE
|
%doc LICENSE
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 28 2024 Automatic Build System <autodist@openmamba.org> 0.21.0-1mamba
|
||||||
|
- automatic version update by autodist
|
||||||
|
|
||||||
* Thu Aug 17 2023 Silvan Calarco <silvan.calarco@mambasoft.it> 0.20.0-3mamba
|
* Thu Aug 17 2023 Silvan Calarco <silvan.calarco@mambasoft.it> 0.20.0-3mamba
|
||||||
- fix sddm (normal logn) pam patch for openmamba
|
- fix sddm (normal logn) pam patch for openmamba
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user