Difference between revisions of "Plasma/Wayland"

Jump to: navigation, search
(X11-specific bits)
(explain strategy)
Line 1: Line 1:
On this page, we're collecting tips and tricks to make Plasma work on Wayland:
+
 
 +
 
 +
On this page, we're collecting tips and tricks to make Plasma work on Wayland.
 +
=Premises=
 +
The idea is to be able to run the same binaries under both, X11 and Wayland. This means that we need to decide at runtime how to interact with the windowing system. The following strategy is useful (in descending order of preference):
 +
* Use abstract Qt and Frameworks (KF5) APIs
 +
* Use XCB when there are no suitable Qt and KF5 APIs
 +
* Decide at runtime whether to call X11-specific functions
 +
 
 +
X11 as build dependency should be optional, as this is not yet the case, making X11 fully optional (at runtime and at build time) is a goal.
  
 
= Build instructions =
 
= Build instructions =

Revision as of 00:21, 23 July 2014


On this page, we're collecting tips and tricks to make Plasma work on Wayland.

Premises

The idea is to be able to run the same binaries under both, X11 and Wayland. This means that we need to decide at runtime how to interact with the windowing system. The following strategy is useful (in descending order of preference):

  • Use abstract Qt and Frameworks (KF5) APIs
  • Use XCB when there are no suitable Qt and KF5 APIs
  • Decide at runtime whether to call X11-specific functions

X11 as build dependency should be optional, as this is not yet the case, making X11 fully optional (at runtime and at build time) is a goal.

Build instructions

We recommend following this guide to install the Wayland stack, including the QtWayland module

Generic, but more detailed build instructions for Wayland / Weston, including underlying stack can be found at: http://wayland.freedesktop.org/building.html

Create a wl-env script somewhere in your $PATH, looking like this (adjust WLD to your wayland installation path):

WLD=/home/sebas/kf5/wayland/install
LD_LIBRARY_PATH=$WLD/lib
PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/
ACLOCAL="aclocal -I $WLD/share/aclocal"
export YACC=bison
# This is needed for now, as kscreen will otherwise pick the XRandR backend -- and crash
export KSCREEN_BACKEND=fake

export WLD LD_LIBRARY_PATH PKG_CONFIG_PATH ACLOCAL YACC

if test -z "${XDG_RUNTIME_DIR}"; then
    export XDG_RUNTIME_DIR=/tmp/${UID}-runtime-dir
    if ! test -d "${XDG_RUNTIME_DIR}"; then
        mkdir "${XDG_RUNTIME_DIR}"
        chmod 0700 "${XDG_RUNTIME_DIR}"
    fi
fi

Running KF5 applications under Wayland

Inside an existing X session

weston

starts a new window under your X server with Weston running inside it.


Standalone

From a hard console / virtual terminal:

kf5-env
wl-env
export $(dbus-launch)
weston-launch
kwrite -platform wayland

kf5-env is a script setting up the locations, such as QTDIR, plugin path, etc. for your kf5.


Issues

The following contains a list of issues found when trying to run Plasma or KF5-based software in general under Wayland.

  • kdeinit5 exits due to missing DISPLAY
  • kded5 just hangs there when started
  • Oxygen style works in windowed mode, falls back to Fusion in standalone
  • File open dialog unable to reach klauncher
  • After resizing a window, it's not immediately repainted over the new covering area
  • Icons are missing under Wayland (check with "systemsettings5 -platform wayland", for example)
  • KScreen has no Wayland backend, calls into KScreen will fail (workaround to make it at least not crash is
export KSCREEN_BACKEND=fake
  • Font Management KCM crashes when rendering previews, patch to make it not crash (but also not preview fonts) is in git in plasma-desktop[sebas/wayland]


Fixing problems

Guarding X11-specific calls

Since we want to support both, X11 and Wayland with the same binaries, we need to decide at runtime whether or not to call X11-specific functions. We need to guard these calls into X11 libraries as the application will otherwise crash and do something different for non-X11.

    #include <QX11Info>
    // [...]
    if (QX11Info::isPlatformX11()) {
        // You can safely call into X11 libraries here
    } else {
        // Do something smart for non-X11 platforms here
    }

Content is available under Creative Commons License SA 4.0 unless otherwise noted.