diff --git a/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md b/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md index 410fc0f..1383048 100644 --- a/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md +++ b/01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md @@ -60,4 +60,5 @@ desktops. Measured in [01](01-what-the-workstations-run.md): - [01 — What the workstations run](01-what-the-workstations-run.md): evidence. - [02 — The questions and the options](02-the-questions-and-the-options.md) +- [04 — Screensaver, displays and menus](04-screensaver-displays-and-menus.md): the lock and idle module, monitor layouts by the monitors' identity, rofi and dmenu behind one launcher seat - [03 — What the predecessor taught](03-what-the-predecessor-taught.md): its 128 modules and 3,395 commits, as patterns to keep and failures not to repeat; shared with research 027. diff --git a/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md b/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md new file mode 100644 index 0000000..55b25ed --- /dev/null +++ b/01-RESEARCH/026-the-graphical-session-as-modules/04-screensaver-displays-and-menus.md @@ -0,0 +1,70 @@ +# 04 — Screensaver, displays and menus + +Three areas the operator named on 2026-10-04, as their own modules. Each sharpens a row of +[01](01-what-the-workstations-run.md) and a question of [02](02-the-questions-and-the-options.md). + +## The screensaver: idle, lock and display power + +**Measured on both workstations:** + +- **Idle and lock** are three things wired by hand in the session's start script: + - the X screensaver timeout (`xset s 1800`); + - the display power timeouts (`xset dpms`); + - `xss-lock` running the colour build of `i3lock` through a wrapper, in a respawn loop. +- **A second screensaver,** xscreensaver, is installed and deliberately not started. Earlier it + overrode the display power settings with its own, and locked nothing. Its configuration file is + still in the home. +- **The lock screen's 20-odd colours and formats** were predecessor theme variables. +- **The colour build is not in the official repositories** (research 026/01). + +**Starting position:** + +- **One module for the lock screen,** holding `node-lock-screen`: the locker and its wrapper as the + module's own files, the screensaver and display power timeouts, and `xss-lock`. +- The timeouts and colours are its defaults, and settings later (issue 168). +- The colour build ships as ADR 0205's pinned archive, or the module uses the official `i3lock`. + That is the operator's choice, and the colours are the only difference. +- xscreensaver is not a module; its package and file are removed. +- `xss-lock` needs the logind session, so it stays a session-start line contributed into + `.xinitrc`'s block (question 4), not a unit. + +## Monitor layout (xrandr) + +**Measured:** + +- Each workstation has a layout script generated by `arandr`, with the monitor names baked in. One + workstation also has several layouts for named places, a hotplug rule and a wizard. +- **The desktop carried the laptop's layout scripts.** +- No `xorg.conf.d`, and no layout tool beyond the scripts. + +**Starting position: `autorandr`** (official repositories) inside the display server's module. + +- `autorandr` saves a layout as a profile **keyed by the connected monitors' identities** (their EDID) + and applies the matching one at login and on hotplug. +- Profiles therefore need no machine's name. A profile can be shared mesh-wide and simply never + matches on a machine without those monitors. That is exactly the "say it by what is there, never by + a name" rule (ADR 0112). +- The profiles are the operator's data, saved by the tool itself, so they are *found* (ADR 0182). A + `layout` verb on `node-display-server` lists, saves and applies them. +- The arandr scripts and the hotplug rule retire once a profile exists for each. + +## Menus: rofi and dmenu + +**Measured:** + +- rofi is the launcher, the power menu, the theme picker and the clipboard menu. +- The operator's scripts call `rofi -dmenu` in four places and **plain `dmenu` in two. dmenu is + installed on neither workstation, so those two fail.** + +**Starting position:** + +- **`rofi` holds `node-launcher`**, and the seat's protocol includes a **dmenu-compatible command**: + read choices on standard input, print the chosen one. Scripts call that command, not a program by + name. +- **`dmenu` is a module of its own** (official repositories), able to hold the same seat on a machine + that wants it, for instance a Wayland session where `wofi` or `fuzzel` would hold it instead. +- The rofi module carries its theme files, and the menus that belong to other modules arrive as those + modules' scripts: + - power menu → the session; + - clipboard menu → the clipboard module; + - theme picker → settings, once issue 168 closes.