Wayland: Difference between revisions

From Alpine Linux
(→‎elogind: wording)
(moved the XDG_RUNTIME_DIR path information to their respective sections)
 
(4 intermediate revisions by 4 users not shown)
Line 11: Line 11:
== 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 specifications, Wayland compositors require the <code>XDG_RUNTIME_DIR</code> variable to be set. When setting paths for {{ic|XDG_RUNTIME_DIR}}, at all times they should follow [https://specifications.freedesktop.org/basedir/latest/#variables '''XDG specifications'''].  


=== elogind ===
{{Note|If <code>XDG_RUNTIME_DIR</code> variable is set inside startup script/file, it MUST be initialised before the Wayland compositor and the D-Bus session instances are started.}}


When using [[elogind]] as a seat manager, it exports <code>XDG_RUNTIME_DIR</code> and other XDG environment variables automatically for each session. No further configuration is required.
=== With elogind ===


=== Use pam_rundir ===
When using [[elogind]] as a seat manager, it exports <code>XDG_RUNTIME_DIR</code> and other XDG environment variables automatically for each session. No further configuration is required. <code>XDG_RUNTIME_DIR</code> would be set as {{Path|/run/user/$(id -u)}} by '''elogind'''.


[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.
=== With pam_rundir ===


{{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.}}
[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. <code>XDG_RUNTIME_DIR</code> would be set as  {{Path|/run/user/$(id -u)}} by pam_rundir.


=== Use mkrundir ===
=== With 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 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. <code>XDG_RUNTIME_DIR</code> would be set as {{Path|/run/user-$UID}} by mkrundir.  In your shell init script (e.g.: {{Path|~/.profile}} include an entry as follows at the '''top''' of the file {{Cat|~/.profile|...
export XDG_RUNTIME_DIR{{=}}$(mkrundir)
export XDG_RUNTIME_DIR{{=}}$(mkrundir)
...}}
...}}
Line 31: Line 31:
As per [https://git.sr.ht/~whynothugo/mkrundir mkrundir] website, this might have issues inside containers, due to privilege escalation.
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 ===
=== Creating and exporting 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.  
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.  
Line 38: Line 38:


{{Cat|~/.profile|<nowiki>if [ -z "$XDG_RUNTIME_DIR" ]; then
{{Cat|~/.profile|<nowiki>if [ -z "$XDG_RUNTIME_DIR" ]; then
XDG_RUNTIME_DIR="/tmp/$(id -u)-runtime-dir"
XDG_RUNTIME_DIR="/run/user/$(id -u)"


mkdir -pm 0700 "$XDG_RUNTIME_DIR"
mkdir -pm 0700 "$XDG_RUNTIME_DIR"
Line 44: Line 44:
fi
fi
</nowiki>}}
</nowiki>}}
== Troubleshooting ==
=== error: XDG_RUNTIME_DIR is invalid or not set in the environment ===
The above error message appears when starting services/applications that require the environment variable [[#XDG_RUNTIME_DIR|XDG_RUNTIME_DIR]] to be set. Fix it using one of the above methods before proceeding.


== See also ==
== See also ==

Latest revision as of 16:13, 5 December 2025

Wayland is a new display protocol that aims to replace X11. Wayland requires a seat manager to work.

The setup-wayland-base script installs and enables elogind as seat manager besides enabling community repository and eudev.

Compositors

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). The following compositors are available in Alpine Linux.

XDG_RUNTIME_DIR

As per the protocol specifications, Wayland compositors require the XDG_RUNTIME_DIR variable to be set. When setting paths for XDG_RUNTIME_DIR, at all times they should follow XDG specifications.

Note: If XDG_RUNTIME_DIR variable is set inside startup script/file, it MUST be initialised before the Wayland compositor and the D-Bus session instances are started.

With elogind

When using elogind as a seat manager, it exports XDG_RUNTIME_DIR and other XDG environment variables automatically for each session. No further configuration is required. XDG_RUNTIME_DIR would be set as /run/user/$(id -u) by elogind.

With 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 would be set as /run/user/$(id -u) by pam_rundir.

With 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. XDG_RUNTIME_DIR would be set as /run/user-$UID by mkrundir. 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.

Creating and exporting 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="/run/user/$(id -u)" mkdir -pm 0700 "$XDG_RUNTIME_DIR" export XDG_RUNTIME_DIR fi

Troubleshooting

error: XDG_RUNTIME_DIR is invalid or not set in the environment

The above error message appears when starting services/applications that require the environment variable XDG_RUNTIME_DIR to be set. Fix it using one of the above methods before proceeding.

See also