KWin/Packaging

From KDE Community Wiki

KWin packaging notes \o/

Wayland

Things involved:

  • kglobalaccel (grows plugin API, plugin supplied by kwin)
  • kwindowsystem (grows plugin API)
    • both plugins should always be installed (best put in the library package itself)
    • wayland plugin in particular should pull in qt's wayland plugin (i.e. qtwayland)
  • kidlesystem (grows plugin API, plugin supplied by kwayland-integration)
  • kwayland (KDE specific wayland library)
  • kwin (split into kwin-x11 and kwin-wayland)
  • kwayland-integration (runtime integration plugins for kidletime and kwindowsystem; must always be installed when using a Plasma session with wayland)
  • plasma-workspace (contains startplasma-wayland and startplasma-waylandsession which in turn use kwin-wayland as a wayland compositor)

Suggested changes to enable wayland:

  • Kglobalaccel needs no changes.
  • Package kidletime with the XCB plugins always present.
  • Package kwindowsystem with both X11 and Wayland plugins always present. They are needed for X11 and Wayland clients respectively and since the user is currently expected to have a mix both are runtime dependencies.
    • If your packaging format supports weak dependencies (e.g. Recommends) use those to optionally pull in kwayland-integration. The majority of systems will want the integration plugins as well.
    • The package containing the Wayland plugin must depend on qtwayland.
    • If your packaging format supports weak dependencies (e.g. Recommends) use those to optionally pull in kwayland-integration. The majority of systems will want the integration plugins as well.
  • Package kwayland
  • Package kwayland-integration
  • Package kwin-wayland. You can either put it in a standalone package or put it in a shared kwin package for x11 and wayland. The majority of libraries, kcms and so forth are shared between the two KWin versions so you'd only want to isolate the binaries and in case of X11 the kdeinit5 plugin. Everything else should be shared for the time being.
    • KWin Wayland sports numerous backends.
      • drm (mesa-drm)
      • hwcomposer (android hwcomposer)
      • fbdev (direct framebuffer)
      • x11 (nesting kwin-wayland in an x session)
      • wayland (nesting kwin-wayland in another wayland session, e.g. running inside a weston session)
      • virtual (virtual framebuffer)
    • For your default dependency line-up you want kwin-wayland to depend on the DRM backend and alternatively (if you build it) the hwcomposer backend (only used on Android-ish middleware stacks). The fbdev backend can be optionally used as a fallback for DRM but currently doesn't fall back at runtime, so it has limited usefulness.
    • kwin-wayland also needs to depend on Xwayland
    • The three remaining plugins are mostly only useful for testing purposes and can be kept purely optional.
  • In plasma-workspace create a new package to contain the wayland session artifacts. This package should contain startplasmacompositor (wayland replacement for startkde) as well as the startplasma libexec.
    • This package must depend on kwayland-integartion, kwin-wayland and qtwayland.

QPA

Plasma 5.5 adds a QPA plugin for kwin-wayland. This should be packaged alongside kwin-wayland. In particular if shipping different x11 and wayland packages you want to put the QPA plugin in the wayland package only.