Add proposed patch to recover from tty switching failures (#2110801)
parent
792d966eb1
commit
954e5c84eb
@ -0,0 +1,102 @@
|
||||
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
|
||||
|
Loading…
Reference in new issue