Update to new snapshot and remove patches merged upstream

epel9
Marc Deop i Argemí 2 years ago
parent 954e5c84eb
commit cb1d68a8ef

@ -1,102 +0,0 @@
From b8ef20b8bc6b9636449f602e10ac49d39b2abc79 Mon Sep 17 00:00:00 2001
From: Aleix Pol <aleixpol@kde.org>
Date: Thu, 26 Jan 2023 18:04:12 +0100
Subject: [PATCH] Allow recovering from tty switching failures
If we fail to switch tty when showing the greeter, exit saying so then
switch back to tty 1 and try launching the Display again.
Fixes #1636
---
src/auth/Auth.h | 1 +
src/daemon/Display.cpp | 9 +++++----
src/daemon/Greeter.cpp | 7 ++++---
src/daemon/Greeter.h | 1 +
src/helper/UserSession.cpp | 2 +-
5 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/src/auth/Auth.h b/src/auth/Auth.h
index 0e39f69..66a9ec9 100644
--- a/src/auth/Auth.h
+++ b/src/auth/Auth.h
@@ -86,6 +86,7 @@ namespace SDDM {
HELPER_SESSION_ERROR,
HELPER_OTHER_ERROR,
HELPER_DISPLAYSERVER_ERROR,
+ HELPER_TTY_ERROR,
};
Q_ENUM(HelperExitStatus)
diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp
index c2437c7..b6b5728 100644
--- a/src/daemon/Display.cpp
+++ b/src/daemon/Display.cpp
@@ -149,10 +149,11 @@ namespace SDDM {
connect(this, &Display::loginFailed, m_socketServer, &SocketServer::loginFailed);
connect(this, &Display::loginSucceeded, m_socketServer, &SocketServer::loginSucceeded);
- connect(m_greeter, &Greeter::failed,
- QCoreApplication::instance(), [] {
- QCoreApplication::instance()->exit(23);
- });
+ connect(m_greeter, &Greeter::failed, this, &Display::stop);
+ connect(m_greeter, &Greeter::ttyFailed, this, [this] {
+ VirtualTerminal::jumpToVt(1, true);
+ stop();
+ });
connect(m_greeter, &Greeter::displayServerFailed, this, &Display::displayServerFailed);
}
diff --git a/src/daemon/Greeter.cpp b/src/daemon/Greeter.cpp
index eadae5a..ea9ad81 100644
--- a/src/daemon/Greeter.cpp
+++ b/src/daemon/Greeter.cpp
@@ -32,6 +32,7 @@
#include <QtCore/QDebug>
#include <QtCore/QProcess>
+#include <VirtualTerminal.h>
namespace SDDM {
Greeter::Greeter(Display *parent)
@@ -312,9 +313,9 @@ namespace SDDM {
if (status == Auth::HELPER_DISPLAYSERVER_ERROR) {
Q_EMIT displayServerFailed();
- }
-
- if (status == Auth::HELPER_SESSION_ERROR) {
+ } else if (status == Auth::HELPER_TTY_ERROR) {
+ Q_EMIT ttyFailed();
+ } else if (status == Auth::HELPER_SESSION_ERROR) {
Q_EMIT failed();
}
}
diff --git a/src/daemon/Greeter.h b/src/daemon/Greeter.h
index 5a69ccd..3a6295c 100644
--- a/src/daemon/Greeter.h
+++ b/src/daemon/Greeter.h
@@ -62,6 +62,7 @@ namespace SDDM {
void authError(const QString &message, Auth::Error error);
signals:
+ void ttyFailed();
void failed();
void displayServerFailed();
diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
index 39ff9ad..1bd9959 100644
--- a/src/helper/UserSession.cpp
+++ b/src/helper/UserSession.cpp
@@ -180,7 +180,7 @@ namespace SDDM {
if (ioctl(STDIN_FILENO, TIOCSCTTY) < 0) {
const auto error = strerror(errno);
qCritical().nospace() << "Failed to take control of " << ttyString << " (" << QFileInfo(ttyString).owner() << "): " << error;
- exit(Auth::HELPER_OTHER_ERROR);
+ exit(Auth::HELPER_TTY_ERROR);
}
}
--
2.39.1

@ -1,155 +0,0 @@
From df564d59533f9556d20f1141bf01de705cce3bf4 Mon Sep 17 00:00:00 2001
From: Aleksei Bavshin <alebastr89@gmail.com>
Date: Wed, 2 Feb 2022 23:08:59 -0800
Subject: [PATCH] WaylandHelper: support non-default display names
Weston v10[1] and some wlroots-based compositors[2][3] decided to stop
using `wayland-0`.
Extend WaylandSocketWatcher to look for any socket matching the
`wayland-?` pattern and pass the `WAYLAND_DISPLAY` to the greeter.
[1]: https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/486
[2]: https://github.com/swaywm/sway/commit/65a751a21f61b30808b7e703257c6ca3b71f50eb
[3]: https://github.com/WayfireWM/wayfire/commit/4ee4f3f259be00fd9a3c26960e8fce91ec526290
---
src/helper/waylandhelper.cpp | 5 +++-
src/helper/waylandsocketwatcher.cpp | 37 +++++++++++++++++------------
src/helper/waylandsocketwatcher.h | 4 ++--
3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/src/helper/waylandhelper.cpp b/src/helper/waylandhelper.cpp
index 39952cb99..66d6b0796 100644
--- a/src/helper/waylandhelper.cpp
+++ b/src/helper/waylandhelper.cpp
@@ -119,7 +119,6 @@ void WaylandHelper::startGreeter(const QString &cmd)
m_greeterProcess = new QProcess(this);
m_greeterProcess->setProgram(args.takeFirst());
m_greeterProcess->setArguments(args);
- m_greeterProcess->setProcessEnvironment(m_environment);
connect(m_greeterProcess, &QProcess::readyReadStandardError, this, [this] {
qWarning() << m_greeterProcess->readAllStandardError();
});
@@ -132,6 +131,8 @@ void WaylandHelper::startGreeter(const QString &cmd)
QCoreApplication::instance()->quit();
});
if (m_watcher->status() == WaylandSocketWatcher::Started) {
+ m_environment.insert(QStringLiteral("WAYLAND_DISPLAY"), m_watcher->socketName());
+ m_greeterProcess->setProcessEnvironment(m_environment);
m_greeterProcess->start();
} else if (m_watcher->status() == WaylandSocketWatcher::Failed) {
Q_EMIT failed();
@@ -139,6 +140,8 @@ void WaylandHelper::startGreeter(const QString &cmd)
connect(m_watcher, &WaylandSocketWatcher::failed, this, &WaylandHelper::failed);
connect(m_watcher, &WaylandSocketWatcher::started, this, [this] {
m_watcher->stop();
+ m_environment.insert(QStringLiteral("WAYLAND_DISPLAY"), m_watcher->socketName());
+ m_greeterProcess->setProcessEnvironment(m_environment);
m_greeterProcess->start();
});
}
diff --git a/src/helper/waylandsocketwatcher.cpp b/src/helper/waylandsocketwatcher.cpp
index 316690935..837bb189d 100644
--- a/src/helper/waylandsocketwatcher.cpp
+++ b/src/helper/waylandsocketwatcher.cpp
@@ -18,6 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
***************************************************************************/
+#include <unistd.h>
#include <QDebug>
#include <QStandardPaths>
@@ -28,8 +29,9 @@ namespace SDDM {
WaylandSocketWatcher::WaylandSocketWatcher(QObject *parent )
: QObject(parent)
, m_runtimeDir(QDir(QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation)))
- , m_socketPath(m_runtimeDir.absoluteFilePath(QLatin1String("wayland-0")))
{
+ m_runtimeDir.setFilter(QDir::Files | QDir::System);
+ m_runtimeDir.setNameFilters(QStringList() << QLatin1String("wayland-?"));
}
WaylandSocketWatcher::Status WaylandSocketWatcher::status() const
@@ -37,9 +39,9 @@ WaylandSocketWatcher::Status WaylandSocketWatcher::status() const
return m_status;
}
-QString WaylandSocketWatcher::socketPath() const
+QString WaylandSocketWatcher::socketName() const
{
- return m_socketPath;
+ return m_socketName;
}
void WaylandSocketWatcher::start()
@@ -53,8 +55,7 @@ void WaylandSocketWatcher::start()
// Time is up and a socket was not found
if (!m_watcher.isNull())
m_watcher->deleteLater();
- qWarning("Wayland socket watcher for \"%s\" timed out",
- qPrintable(m_socketPath));
+ qWarning("Wayland socket watcher timed out");
m_status = Failed;
Q_EMIT failed();
});
@@ -62,22 +63,28 @@ void WaylandSocketWatcher::start()
// Check if the socket exists
connect(m_watcher, &QFileSystemWatcher::directoryChanged, this,
[this](const QString &path) {
- qDebug() << "Directory" << path << "has changed, checking for" << m_socketPath;
+ qDebug() << "Directory" << path << "has changed, checking for Wayland socket";
- if (QFile::exists(m_socketPath)) {
- m_timer.stop();
- if (!m_watcher.isNull())
- m_watcher->deleteLater();
- m_status = Started;
- Q_EMIT started();
+ m_runtimeDir.refresh();
+ const QFileInfoList fileInfoList = m_runtimeDir.entryInfoList();
+ for (const QFileInfo &fileInfo : fileInfoList) {
+ if (fileInfo.ownerId() == ::getuid()) {
+ qDebug() << "Found Wayland socket" << fileInfo.absoluteFilePath();
+ m_timer.stop();
+ if (!m_watcher.isNull())
+ m_watcher->deleteLater();
+ m_socketName = fileInfo.fileName();
+ m_status = Started;
+ Q_EMIT started();
+ break;
+ }
}
});
// Watch for runtime directory changes
if (!m_runtimeDir.exists() || !m_watcher->addPath(m_runtimeDir.absolutePath())) {
- qWarning("Cannot watch directory \"%s\" for Wayland socket \"%s\"",
- qPrintable(m_runtimeDir.absolutePath()),
- qPrintable(m_socketPath));
+ qWarning("Cannot watch directory \"%s\" for Wayland socket",
+ qPrintable(m_runtimeDir.absolutePath()));
m_watcher->deleteLater();
m_status = Failed;
Q_EMIT failed();
diff --git a/src/helper/waylandsocketwatcher.h b/src/helper/waylandsocketwatcher.h
index dfc5d214a..0032c1866 100644
--- a/src/helper/waylandsocketwatcher.h
+++ b/src/helper/waylandsocketwatcher.h
@@ -41,7 +41,7 @@ class WaylandSocketWatcher : public QObject
explicit WaylandSocketWatcher(QObject *parent = nullptr);
Status status() const;
- QString socketPath() const;
+ QString socketName() const;
void start();
void stop();
@@ -54,7 +54,7 @@ class WaylandSocketWatcher : public QObject
private:
Status m_status = Stopped;
QDir m_runtimeDir;
- QString m_socketPath;
+ QString m_socketName;
QTimer m_timer;
QPointer<QFileSystemWatcher> m_watcher;
};

@ -14,13 +14,13 @@
%bcond_without sddm_wayland_default %bcond_without sddm_wayland_default
%endif %endif
%global commit 3e486499b9300ce8f9c62bd102e5119b27a2fad1 %global commit b042f69ff3ada1e5d94156450621db7a9246645a
%global commitdate 20221123 %global commitdate 20230201
%global shortcommit %(c=%{commit}; echo ${c:0:7}) %global shortcommit %(c=%{commit}; echo ${c:0:7})
Name: sddm Name: sddm
Version: 0.19.0%{?commitdate:^git%{commitdate}.%{shortcommit}} Version: 0.19.0%{?commitdate:^git%{commitdate}.%{shortcommit}}
Release: 3%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Summary: QML based desktop and login manager Summary: QML based desktop and login manager
@ -41,17 +41,6 @@ Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
# Submmited: https://github.com/sddm/sddm/pull/1494 # Submmited: https://github.com/sddm/sddm/pull/1494
Patch11: 0001-Delay-for-logind-and-fallback-to-seat0.patch Patch11: 0001-Delay-for-logind-and-fallback-to-seat0.patch
# Support non-default "wayland-?" socket names
# required for sway, weston, et al
# Submitted: https://github.com/sddm/sddm/pull/1509
Patch12: sddm-0.20.0-support-non-default-wayland-socket-names.patch
# Allow recovering from tty switching failures
# https://bugzilla.redhat.com/show_bug.cgi?id=2110801
# https://github.com/sddm/sddm/issues/1636
# Submitted: https://github.com/sddm/sddm/pull/1641
Patch13: 0001-Allow-recovering-from-tty-switching-failures.patch
## downstream patches ## downstream patches
Patch101: sddm-0.20.0-fedora_config.patch Patch101: sddm-0.20.0-fedora_config.patch
@ -303,6 +292,10 @@ fi
%changelog %changelog
* Wed Feb 01 2023 Marc Deop <marcdeop@fedoraproject.org> - 0.19.0^git20230201.b042f69-1
- Update to new snapshot.
- Remove patches merged upstream.
* Sun Jan 29 2023 Neal Gompa <ngompa@fedoraproject.org> - 0.19.0^git20221123.3e48649-3 * Sun Jan 29 2023 Neal Gompa <ngompa@fedoraproject.org> - 0.19.0^git20221123.3e48649-3
- Add proposed patch to recover from tty switching failures (#2110801) - Add proposed patch to recover from tty switching failures (#2110801)

Loading…
Cancel
Save