summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@pelagicore.com>2019-02-11 17:25:13 +0100
committerDominik Holland <dominik.holland@pelagicore.com>2019-02-12 12:48:23 +0000
commit81d6df8e934ebdac1553e3cb102106fc0fb64f93 (patch)
treeb4cdfcc4e1820962cda6b07c27a6838f88ea9e19
parente4cd740196cb662a32d922667706f78e9d0ed5c1 (diff)
Avoid conflicts on Linux desktops by using a non-standard Wayland socket
If not specified differently via command line option or $WAYLAND_DISPLAY, the AM would just rely on libwayland to pick a name for its Wayland socket. The problem here is that some desktop environments would see "wayland-0" (the first compositor registered) and think that they are running in Wayland mode and consequentially start client applications on this compositor. The default for the AM is now "qtam-wayland-0". Change-Id: I508ac8fb051735dc64de35ea8dfc44491786c7d7 Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com>
-rw-r--r--src/main-lib/defaultconfiguration.cpp17
-rw-r--r--src/window-lib/windowmanager.cpp6
2 files changed, 19 insertions, 4 deletions
diff --git a/src/main-lib/defaultconfiguration.cpp b/src/main-lib/defaultconfiguration.cpp
index c79da1d7..6ee6b2e0 100644
--- a/src/main-lib/defaultconfiguration.cpp
+++ b/src/main-lib/defaultconfiguration.cpp
@@ -42,6 +42,7 @@
#include <QFileInfo>
#include <QCoreApplication>
+#include <QFile>
#include <QDebug>
#include <QtAppManCommon/logging.h>
@@ -447,7 +448,21 @@ int DefaultConfiguration::quickLaunchRuntimesPerContainer() const
QString DefaultConfiguration::waylandSocketName() const
{
- return value<QString>("wayland-socket-name");
+ const QString socket = m_clp.value(qSL("wayland-socket-name")); // get the default value
+ if (!socket.isEmpty())
+ return socket;
+
+ const char *envName = "WAYLAND_DISPLAY";
+ if (qEnvironmentVariableIsSet(envName))
+ return qEnvironmentVariable(envName);
+
+ const QString lockPattern = qEnvironmentVariable("XDG_RUNTIME_DIR") + qSL("/qtam-wayland-%1.lock");
+ for (int i = 0; i < 32; ++i) {
+ QFile lock(lockPattern.arg(i));
+ if (lock.open(QIODevice::ReadWrite | QIODevice::NewOnly))
+ return qSL("qtam-wayland-%1").arg(i);
+ }
+ return QString();
}
QString DefaultConfiguration::telnetAddress() const
diff --git a/src/window-lib/windowmanager.cpp b/src/window-lib/windowmanager.cpp
index 19297bdd..096db273 100644
--- a/src/window-lib/windowmanager.cpp
+++ b/src/window-lib/windowmanager.cpp
@@ -570,7 +570,7 @@ void WindowManager::registerCompositorView(QQuickWindow *view)
// export the actual socket name for our child processes.
qputenv("WAYLAND_DISPLAY", d->waylandCompositor->socketName());
- qCDebug(LogGraphics).nospace() << "WindowManager: running in Wayland mode [socket: "
+ qCInfo(LogGraphics).nospace() << "WindowManager: running in Wayland mode [socket: "
<< d->waylandCompositor->socketName() << "]";
ApplicationManager::instance()->setWindowManagerCompositorReady(true);
} else {
@@ -578,11 +578,11 @@ void WindowManager::registerCompositorView(QQuickWindow *view)
}
} else {
if (!once)
- qCDebug(LogGraphics) << "WindowManager: running in single-process mode [forced at run-time]";
+ qCInfo(LogGraphics) << "WindowManager: running in single-process mode [forced at run-time]";
}
#else
if (!once)
- qCDebug(LogGraphics) << "WindowManager: running in single-process mode [forced at compile-time]";
+ qCInfo(LogGraphics) << "WindowManager: running in single-process mode [forced at compile-time]";
#endif
emit compositorViewRegistered(view);