Wayland: Difference between revisions
WhyNotHugo (talk | contribs) (Extend XDG_RUNTIME_DIR; mention mkrundir) |
Prabuanand (talk | contribs) (rearranged general information related to wayland) |
||
(8 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
[https://en.wikipedia.org/wiki/Wayland%20(protocol) Wayland] is a new display protocol that aims to replace X11. | [https://en.wikipedia.org/wiki/Wayland%20(protocol) Wayland] is a new display protocol that aims to replace [[Xorg|X11]]. Display servers that implement the Wayland display server protocol are also called Wayland compositors because they additionally perform the task of a compositing window manager. | ||
Multiple compositor implementations exist, including [[Sway]], [https://en.wikipedia.org/wiki/Mutter%20(software) Mutter] ([[GNOME]]'s compositor) and [https://en.wikipedia.org/wiki/KWin Kwin] ([ | Multiple compositor implementations exist, including [[Sway]], [https://en.wikipedia.org/wiki/Mutter%20(software) Mutter] ([[GNOME]]'s compositor) and [https://en.wikipedia.org/wiki/KWin Kwin] ([[KDE]]'s compositor). A more exhaustive list is available in the [https://wiki.archlinux.org/title/Wayland#Compositors ArchWiki]. | ||
Wayland requires a [[Seat manager|seat manager]] to work. | |||
The <Code>setup-wayland-base</Code> script installs and enables [[elogind]] as [[Seat manager|seat manager]], enables [[Repositories#Community|community repository]] and enables [[eudev]] automatically as these are required for Wayland to work. | |||
== XDG_RUNTIME_DIR == | == XDG_RUNTIME_DIR == | ||
As per the protocol spec, Wayland compositors require the <code>XDG_RUNTIME_DIR</code> variable to be set. | As per the protocol spec, Wayland compositors require the <code>XDG_RUNTIME_DIR</code> variable to be set. [[elogind|Elogind]] seat manager handles <code>XDG_RUNTIME_DIR</code> and also export other XDG environment variables automatically for each session. So do not follow further configuration, if using [[elogind]]. | ||
If [[Seatd]] is used then there are a few ways to create a <code>XDG_RUNTIME_DIR</code> directory and export this variable: | |||
=== Use pam_rundir === | |||
[https://github.com/jjk-jacky/pam_rundir pam_rundir] is a [[PAM]] module that provides the runtime directory variable. Installing the package {{pkg|pam-rundir}} takes care of dependencies and no further configuration is required. | |||
{{Note| <code>XDG_RUNTIME_DIR</code> variable MUST be initialised before the Wayland compositor, and also before the D-Bus session instance is started in your startup script/file for both the methods listed below.}} | |||
=== Use mkrundir === | |||
* [https://git.sr.ht/~whynothugo/mkrundir mkrundir] is an executable that can be used to initialise the runtime directory explicitly by each user. To use <code>mkrundir</Code>, install the package {{pkg|mkrundir}} available in [[Repositories#Testing|testing]] repository. In your shell init script (e.g.: {{Path|~/.profile}} include an entry as follows at the '''top''' of the file {{Cat|~.profile|... | |||
* [https://git.sr.ht/~whynothugo/mkrundir mkrundir] is | export XDG_RUNTIME_DIR{{=}}$(mkrundir) | ||
...}} | |||
As per [https://git.sr.ht/~whynothugo/mkrundir mkrundir] website, this might have issues inside containers, due to privilege escalation. | |||
=== Configuring XDG_RUNTIME_DIR manually === | === Configuring XDG_RUNTIME_DIR manually === | ||
Generally, care should be taken when configuring the <code>XDG_*</code> variables manually as this configuration may have errors or conflict with other utilities that do this automatically. | Generally, care should be taken when configuring the <code>XDG_*</code> variables manually as this configuration may have errors or conflict with other utilities that do this automatically. Use this only on a system that's not using [[elogind]] and other solutions outlined above cannot handle this. | ||
The <code>XDG_RUNTIME_DIR</code> can be initialised manually by adding below snippet to shell init scripts (e.g.: {{Path|~/.profile}}): | |||
{{Cat|~/.profile|<nowiki>if [ -z "$XDG_RUNTIME_DIR" ]; then | |||
XDG_RUNTIME_DIR="/tmp/$(id -u)-runtime-dir" | |||
mkdir -pm 0700 "$XDG_RUNTIME_DIR" | |||
export XDG_RUNTIME_DIR | |||
fi | fi | ||
</nowiki>}} | </nowiki>}} | ||
Line 36: | Line 48: | ||
[[Category:Desktop]] | [[Category:Desktop]] | ||
[[Category:Wayland]] | |||
[[Category:Compositor]] |
Latest revision as of 05:44, 9 January 2025
Wayland is a new display protocol that aims to replace X11. Display servers that implement the Wayland display server protocol are also called Wayland compositors because they additionally perform the task of a compositing window manager.
Multiple compositor implementations exist, including Sway, Mutter (GNOME's compositor) and Kwin (KDE's compositor). A more exhaustive list is available in the ArchWiki.
Wayland requires a seat manager to work.
The setup-wayland-base
script installs and enables elogind as seat manager, enables community repository and enables eudev automatically as these are required for Wayland to work.
XDG_RUNTIME_DIR
As per the protocol spec, Wayland compositors require the XDG_RUNTIME_DIR
variable to be set. Elogind seat manager handles XDG_RUNTIME_DIR
and also export other XDG environment variables automatically for each session. So do not follow further configuration, if using elogind.
If Seatd is used then there are a few ways to create a XDG_RUNTIME_DIR
directory and export this variable:
Use pam_rundir
pam_rundir is a PAM module that provides the runtime directory variable. Installing the package pam-rundir takes care of dependencies and no further configuration is required.
XDG_RUNTIME_DIR
variable MUST be initialised before the Wayland compositor, and also before the D-Bus session instance is started in your startup script/file for both the methods listed below.Use mkrundir
- mkrundir is an executable that can be used to initialise the runtime directory explicitly by each user. To use
mkrundir
, install the package mkrundir available in testing repository. In your shell init script (e.g.: ~/.profile include an entry as follows at the top of the fileContents of ~.profile
... export XDG_RUNTIME_DIR=$(mkrundir) ...
As per mkrundir website, this might have issues inside containers, due to privilege escalation.
Configuring XDG_RUNTIME_DIR manually
Generally, care should be taken when configuring the XDG_*
variables manually as this configuration may have errors or conflict with other utilities that do this automatically. Use this only on a system that's not using elogind and other solutions outlined above cannot handle this.
The XDG_RUNTIME_DIR
can be initialised manually by adding below snippet to shell init scripts (e.g.: ~/.profile):
Contents of ~/.profile