# 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. ## The clipboard: xclip and greenclip **Measured:** - **greenclip** keeps the clipboard's history, and rofi shows it on a key binding. - **greenclip is not in the official repositories.** - It is started two ways: the window manager's configuration starts it on both workstations, and on one a user unit is enabled as well. - Its configuration names an absolute home path. - **xclip** (official) is the command-line clipboard the operator's scripts use. **Starting position:** - **`xclip` is a module of its own,** a package and nothing else. It is the tool scripts depend on, and a module that needs it requires it. - **The clipboard manager holds `node-clipboard`:** its daemon, started once by the session (a session contribution, or a user unit once user-scoped units ship, never both), its configuration with no absolute path, and its menu binding contributed to the window manager. - **Which manager holds it is the operator's choice:** - greenclip, as today, shipped under ADR 0205; - or `clipmenu` (official), which feeds the same dmenu-compatible command as the launcher seat above, and needs no archive. - **On Wayland** the same seat is held by `cliphist` with `wl-clipboard`, both official. ## Fonts **Measured:** - The fonts the desktop uses are **hand-copied files** in the account's font directory, not packages: - a Nerd font for the window manager, the bar and the terminal; - a second one for the prompt; - on one workstation, the same four files twice, once under URL-encoded names; - on the other, a different build of the same font and three more copied from a theme's repository. - The system's default monospace is a different font (`Noto Sans Mono`), so anything that asks for `monospace` gets another face than the terminal. - The DPI is fixed in an X resource. - **Every Nerd font in use is in the official repositories** (Hack, Meslo, Iosevka, JetBrains Mono). **Decided** (the operator left the choice open, except that it must not be today's Hack): | role | face | why | |---|---|---| | monospace: terminal, window manager, bar, launcher, prompt | **JetBrains Mono Nerd Font** | built for long reading in a terminal, unambiguous `0O1lI`, optional ligatures; a version-3 Nerd font, so every icon the prompt and bar use is present | | interface: GTK, Qt, notifications | **Inter** | designed for screens, clear at small sizes | | icons missing from any face | Nerd Fonts Symbols | a fallback, so a font without icons still shows them | | emoji | Noto Color Emoji | | | serif and every other script | Noto | | All five are official packages. **Starting position:** - **A `fonts` module:** those packages, and a fontconfig file it owns that maps `monospace`, `sans-serif`, `serif` and the emoji and symbol fallbacks to the chosen faces, so every program agrees. - The terminal, bar, launcher and prompt modules name the family, not a file. - The DPI becomes the display server's setting (issue 168). - The copied files are removed by the operator once the packages are in (ADR 0182). - Fonts are not a seat: several coexist. The module owns the one place where *the* default is said.