Wayland: Difference between revisions

From Alpine Linux
No edit summary
(rearranged general information related to wayland)
 
(22 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Expand|A more thorough guide to installing, configuring, and running {{Pkg|wayland}} on Alpine would be better. }}
[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] ([[KDE]]'s compositor). A more exhaustive list is available in the [https://wiki.archlinux.org/title/Wayland#Compositors ArchWiki].


Wayland is a new display protocol that aims to replace X11.
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 ==
Weston and other compositors require the XDG_RUNTIME_DIR variable to be set. Simply save the following script in /etc/profile.d/xdg_runtime_dir.sh and re-login to have it set up properly.


if test -z "${XDG_RUNTIME_DIR}"; then
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]].
  export XDG_RUNTIME_DIR=/tmp/$(id -u)-runtime-dir
  if ! test -d "${XDG_RUNTIME_DIR}"; then
    mkdir "${XDG_RUNTIME_DIR}"
    chmod 0700 "${XDG_RUNTIME_DIR}"
  fi
fi


If [[Seatd]] is used then there are a few ways to create a <code>XDG_RUNTIME_DIR</code> directory and export this variable:


This code was taken from Weston's build instructions. Only ${UID} (not present on Alpine Linux) has been replaced with $(id -u).
=== Use pam_rundir ===


If using fish, use the following script, placed in /etc/fish/conf.d/xdg_runtime_dir.fish:
[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.


if test -z $XDG_RUNTIME_DIR
 
  set -x XDG_RUNTIME_DIR /tmp/(id -u)-runtime-dir
{{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.}}
  if not test -d $XDG_RUNTIME_DIR
 
    mkdir $XDG_RUNTIME_DIR
=== Use mkrundir ===
    chmod 0700 $XDG_RUNTIME_DIR
* [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|...
  end
export XDG_RUNTIME_DIR{{=}}$(mkrundir)
end
...}}
 
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 ===
 
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
</nowiki>}}
 
== See also ==
 
* [https://wiki.archlinux.org/title/Wayland Wayland - Arch Wiki]
* [https://wiki.gentoo.org/wiki/Wayland Wayland - Gentoo Wiki]
* [https://en.wikipedia.org/wiki/Wayland_(protocol) Wayland (protocol) - Wikipedia]


[[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.


Note: 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 file

    Contents 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

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

See also