# Services

A service is a live value: read it and the shell updates when it changes (spec.md, section 8.1). It starts the first time a program reads it and stops a few seconds after nothing does. A field marked `rw` can be written (assignment, `<->`, `strand set`); an `action` is called only from a handler; `on name.event(…)` handles an event. The records they hand out are in [types.md](/reference/types.html.md).

Each service has a page of its own. These pages are generated from the schema `strand check` checks against.

<div class="ref-grid">
<a class="ref-card" href="apps.html"><code>apps</code><span>Installed apps, from the desktop entries in every <code>applications/</code> directory (<code>$XDG_DATA_HOME</code>, then <code>$XDG_DATA_DIRS</code>; <code>NoDisplay</code>, <code>Hidden</code>, <code>OnlyShowIn</code>/<code>NotShowIn</code> and <code>TryExec</code> honoured), watched live.</span></a>
<a class="ref-card" href="audio.html"><code>audio</code><span>Audio devices and the programs' streams, from PipeWire, and levels for a visualiser of one's own (<code>audio.levels</code>).</span></a>
<a class="ref-card" href="auth.html"><code>auth</code><span>The lock screen's password check: a PAM helper of its own (<code>strand-auth</code>, a separate process) checks each password with the <code>strand</code> PAM service, or <code>login</code> when <code>/etc/pam.d/strand</code> is missing.</span></a>
<a class="ref-card" href="battery.html"><code>battery</code><span>The battery, from UPower: its combined display device, followed live, and every power source it reports.</span></a>
<a class="ref-card" href="bluetooth.html"><code>bluetooth</code><span>Bluetooth, from BlueZ, followed live: the first adapter, the devices paired with it, and the devices in range while a pairing page reads them.</span></a>
<a class="ref-card" href="brightness.html"><code>brightness</code><span>The screen backlight: read from <code>/sys/class/backlight</code> (watched, so a brightness key shows at once) and set through logind's <code>SetBrightness</code> (no root or udev rules).</span></a>
<a class="ref-card" href="calendar.html"><code>calendar</code><span>Month grids for calendars.</span></a>
<a class="ref-card" href="clipboard.html"><code>clipboard</code><span>The clipboard, from the compositor's data control (<code>ext-data-control-v1</code>, else <code>wlr-data-control</code>: Hyprland, sway, niri, labwc): the selection, a value copied from a handler, and the history.</span></a>
<a class="ref-card" href="clock.html"><code>clock</code><span>The date and time.</span></a>
<a class="ref-card" href="cpu.html"><code>cpu</code><span>Processor load, sampled once a second while a reader is visible.</span></a>
<a class="ref-card" href="disk.html"><code>disk</code><span>Disk usage of the mounted filesystems (<code>statvfs</code>), read every 10 s while a reader is visible.</span></a>
<a class="ref-card" href="greetd.html"><code>greetd</code><span>A login screen for greetd: when Strand runs as greetd's greeter, its socket (<code>$GREETD_SOCK</code>) logs a user in and starts their session.</span></a>
<a class="ref-card" href="idle.html"><code>idle</code><span>Whether the user is away, from the compositor's idle notifications (ext-idle-notify-v1).</span></a>
<a class="ref-card" href="keyboard.html"><code>keyboard</code><span>The keyboard's lock keys, layouts and modifiers.</span></a>
<a class="ref-card" href="media.html"><code>media</code><span>The active media player, over MPRIS: every <code>org.mpris.MediaPlayer2.*</code> on the session bus, the one playing (the latest to start) chosen, else the latest to pause, unless one was picked with <code>p.select()</code>, which holds until that player leaves or another starts playing; <code>players</code> lists them all.</span></a>
<a class="ref-card" href="memory.html"><code>memory</code><span>Memory use, sampled once a second while a reader is visible.</span></a>
<a class="ref-card" href="network.html"><code>network</code><span>The network, followed live: from NetworkManager, or from iwd (<code>net.connman.iwd</code>) where NetworkManager does not run.</span></a>
<a class="ref-card" href="notifications.html"><code>notifications</code><span>The notification server: the shell owns the freedesktop notification name, and says so clearly if another daemon (dunst, mako) has it.</span></a>
<a class="ref-card" href="outputs.html"><code>outputs</code><span>The monitors' configuration, from the compositor's <code>zwlr_output_manager_v1</code> (wlr-output-management: sway, Hyprland, niri, labwc): every output, on or off, with its modes, place, scale and rotation, changed together with <code>outputs.apply</code> and checked first with <code>outputs.test</code>.</span></a>
<a class="ref-card" href="polkit.html"><code>polkit</code><span>Strand's own polkit authentication agent: the password dialog when a program asks for something that needs one.</span></a>
<a class="ref-card" href="screens.html"><code>screens</code><span>Monitors.</span></a>
<a class="ref-card" href="session.html"><code>session</code><span>The login session and the machine's power, from logind (<code>org.freedesktop.login1</code>): a power menu.</span></a>
<a class="ref-card" href="system.html"><code>system</code><span>The desktop's appearance settings, from the XDG desktop portal and followed live, and the machine's host name, kernel and uptime.</span></a>
<a class="ref-card" href="tray.html"><code>tray</code><span>The system tray: a StatusNotifierItem host, with a watcher of its own when the session has none, and each item's DBusMenu.</span></a>
<a class="ref-card" href="video.html"><code>video</code><span>The programs taking video, from PipeWire: a camera or screen-cast indicator.</span></a>
<a class="ref-card" href="windows.html"><code>windows</code><span>Toplevel windows, from <code>ext-foreign-toplevel-list</code>.</span></a>
<a class="ref-card" href="wm.html"><code>wm</code><span>The compositor.</span></a>
<a class="ref-card" href="workspaces.html"><code>workspaces</code><span>Workspaces, from <code>ext-workspace-v1</code>; Hyprland, niri and sway IPC fill in what the protocol does not cover yet.</span></a>
</div>
