otter-osd shows brief overlays for volume, brightness, and lock keys. Run it as a daemon. Scripts, the bar, and compositor keybindings send commands over a UNIX socket.
Usage
Start the daemon (autostart at login):5) applies to volume and brightness commands.
Text messages are centered and wrap to fit the OSD.
Bind your microphone-mute key to otter-osd microphone-mute-toggle to toggle the default PipeWire microphone and display its mute state.
When Do Not Disturb is on, popup surfaces stay hidden. Hardware commands still change volume and brightness. Run otter-notifications dnd-off to show future OSD updates again.
otter-timer and otter-rec also use otter-osd for completion notifications.
Architecture
One binary, two roles:- Daemon (no args): Connects to Wayland, opens a UNIX datagram socket, and renders overlays. Surface buffers are allocated when needed and released after timeout. The daemon and its PipeWire connection remain running.
- Client (with args): Sends a command to the daemon and exits.
$XDG_RUNTIME_DIR/otter-shell/osd-{WAYLAND_DISPLAY}.sock
Configuration
Config file:~/.config/otter-shell/otter-osd.conf
Lua surface
Ifosd.lua is available on the UI script search path, it describes the overlay while native code handles hardware state and rendering. User overrides live under $XDG_DATA_HOME/otter-shell/ui/ (normally ~/.local/share/otter-shell/ui/). Script edits hot-reload; a failed frame falls back to native drawing.
Use otter-settings UI Scripts to create or reset an override, choose Native UI, inspect reported errors, or request Reload now. From a terminal, otter-osd ui-reload requests a script reload. See Settings.
