From 3cb366e8c2c302a974de55773552ebe26aac9f61 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 2 Oct 2020 12:50:00 +0200 Subject: Always disable all outputs and use --fb if VIRTUAL output is missing --- src/loginrpc.cpp | 49 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/src/loginrpc.cpp b/src/loginrpc.cpp index bbb1e1d..a4e61fc 100644 --- a/src/loginrpc.cpp +++ b/src/loginrpc.cpp @@ -74,38 +74,25 @@ void LoginRpc::handleCommandV1(const QString &command) QString out = QString::fromLocal8Bit(p.readAll()); QRegularExpression re("^(\\S+)\\s.*?(\\w*connected)", QRegularExpression::MultilineOption); QRegularExpressionMatchIterator it = re.globalMatch(out); - QString disconnectedOut; QString virtOut; - QStringList disabledOutputs, allOutputs; + QStringList allOutputs; while (it.hasNext()) { QRegularExpressionMatch m = it.next(); QString output = m.captured(1); - allOutputs << output; if (virtOut.isEmpty() && (output == QLatin1String("VIRTUAL1") || output == QLatin1String("VIRTUAL-1") || output == QLatin1String("Virtual1") || output == QLatin1String("Virtual-1") || output == QLatin1String("default"))) { virtOut = output; - } else if (disconnectedOut.isEmpty() && m.captured(2) == "disconnected") { - disconnectedOut = output; } else { - disabledOutputs << output; + allOutputs << output; } } - if (virtOut.isEmpty() && !disconnectedOut.isEmpty()) { - virtOut = disconnectedOut; - disconnectedOut.clear(); - } - if (!disconnectedOut.isEmpty()) { - disabledOutputs << disconnectedOut; - } - if (virtOut.isEmpty() && !disabledOutputs.isEmpty()) { - virtOut = disabledOutputs.takeFirst(); - } - qDebug() << "Virtual output:" << virtOut << "unwanted additional outputs:" << disabledOutputs << "(First disconnected:" << disconnectedOut << ")"; + qDebug() << "Virtual output:" << virtOut << "unwanted additional outputs:" << allOutputs; p.kill(); + int ret = -1; if (!virtOut.isEmpty()) { setMode << "--output" << virtOut << "--mode" << name; - for (auto output : disabledOutputs) { + for (auto output : allOutputs) { setMode << "--output" << output << "--off"; } qDebug() << "Setting mode" << newmode; @@ -121,20 +108,24 @@ void LoginRpc::handleCommandV1(const QString &command) // Set all outputs p.start("xrandr", setMode); p.waitForFinished(2000); - int ret = p.exitCode(); + ret = p.exitCode(); p.kill(); if (ret != 0) { - // Play it safe and disable all the outputs - qDebug() << "Command failed, trying to disable all outputs"; - setMode.clear(); - setMode << "--verbose" << "--fb" << name; - for (auto s : allOutputs) { - setMode << "--output" << s << "--off"; - } - p.start("xrandr", setMode); - p.waitForFinished(2000); - p.kill(); + allOutputs << virtOut; + } + } + // Either -1 if we didn't have a virtual one, or != 0 if xrandr setting failed + if (ret != 0) { + // Play it safe and disable all the outputs + qDebug() << "Ret:" << ret << "- Trying to disable all outputs"; + setMode.clear(); + setMode << "--verbose" << "--fb" << name; // Explicit framebuffer size + for (auto s : allOutputs) { + setMode << "--output" << s << "--off"; } + p.start("xrandr", setMode); + p.waitForFinished(2000); + p.kill(); } } } -- cgit v1.2.3-55-g7522