diff options
author | Robert Griebl <robert.griebl@pelagicore.com> | 2019-02-11 17:25:13 +0100 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2019-02-12 12:48:23 +0000 |
commit | 81d6df8e934ebdac1553e3cb102106fc0fb64f93 (patch) | |
tree | b4cdfcc4e1820962cda6b07c27a6838f88ea9e19 | |
parent | e4cd740196cb662a32d922667706f78e9d0ed5c1 (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.cpp | 17 | ||||
-rw-r--r-- | src/window-lib/windowmanager.cpp | 6 |
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); |