Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Stage 19 — Declarative Session Startup

What it is. Repeated exec_once entries in 0xin.conf launch shell and session clients after the compositor’s Wayland socket is ready.

Gate: The FP5 session wrapper launches only 0xin. The profile config starts Patin and wvkbd declaratively and in declaration order.

Configuration

exec_once = ~/.local/bin/patin
exec_once = wvkbd-mobintl --hidden --no-popup -H 300 -L 200

Unlike scalar settings, exec_once is intentionally repeatable. Commands are preserved in file order and started as separate child processes. “Once” means once per 0xin process start; restarting the compositor creates a new session and launches the commands again. Runtime config reload is not currently implemented, so reload duplication is not a concern.

Client environment

0xin waits until its backend has started and WAYLAND_DISPLAY points to its new socket before launching startup commands. Commands use the same shell spawn path as configured input actions, including:

  • shell expansion and quoting;
  • inherited session variables such as XDG_CURRENT_DESKTOP;
  • removal of the compositor-only private LD_LIBRARY_PATH;
  • restoration of normal child signal handling.

This makes startup clients peers of applications launched later through Patin or input mappings, rather than wrapper-owned special cases.

Profile versus compositor policy

The mechanism is generic compositor configuration. The particular FP5 command list is reference-profile policy: other Wayland devices may start a different shell, bar, notification daemon, wallpaper process, or no session clients at all.

The dedicated run-touch-test.sh remains responsible for environment required before the compositor exists—DRM/libinput backend selection, libseat, and the private wlroots runtime path. It no longer embeds the user-session process list.