Audio
September 20, 2026 · View on GitHub
Otto handles two audio concerns: volume control from the media keys, and UI sound effects for feedback.
Not an audio server
It is not an audio server — PipeWire or PulseAudio does the actual mixing. Otto talks to whichever you run.
Volume keys
[keyboard_shortcuts]
"XF86AudioRaiseVolume" = "VolumeUp"
"XF86AudioLowerVolume" = "VolumeDown"
"XF86AudioMute" = "VolumeMute"
Volume moves in 5% steps. Each change shows an on-screen indicator and, if sound feedback is on, plays a short click so you can hear where the level is.
Media keys
"XF86AudioPlay" = "MediaPlayPause"
"XF86AudioNext" = "MediaNext"
"XF86AudioPrev" = "MediaPrev"
"XF86AudioStop" = "MediaStop"
These control whichever media player is registered on MPRIS: Spotify, VLC, mpv with the MPRIS script, browsers playing video. No configuration needed; Otto talks to the active player.
Sound effects
[audio]
sound_enabled = true
sound_theme = "freedesktop"
sound_enabled = false turns off all UI feedback sounds.
Sound themes
sound_theme names an XDG sound theme, following the
freedesktop Sound Theme specification.
Sounds are looked up at:
/usr/share/sounds/{theme}/stereo/{event}.oga
Commonly available themes: freedesktop, Pop, ocean. See what you have:
ls /usr/share/sounds/
Comment sound_theme out and Otto auto-detects an installed theme.
Custom sounds
Drop your own files in Otto's resources/ directory to override the theme:
resources/audio-volume-change.oga
Custom files take precedence over the theme's version of the same event.
Choosing an output device
Otto has no audio device picker. Use your audio server's tools:
pavucontrol # graphical, works with PipeWire and PulseAudio
wpctl status # list PipeWire devices
wpctl set-default 42 # make node 42 the default sink
pavucontrol in the system tray is the usual setup. See
Top Bar.
Audio over remote sessions
Neither screen sharing nor the RDP bridge carries audio. They are video-only. Route audio separately if you need it — for instance with a PipeWire network sink.
Troubleshooting
Volume keys do nothing. Check they are bound: not every keyboard produces
XF86AudioRaiseVolume. Run wev or ./scripts/show-keys.sh and press the key
to see what it actually emits, then bind that keysym.
Volume changes but nothing gets louder. Otto is adjusting a different sink
from the one playing. Check wpctl status for which sink is default.
No feedback sound. Confirm sound_enabled = true, that the theme is
installed (ls /usr/share/sounds/), and that the file for the event exists in
the theme's stereo/ directory. Many themes are incomplete.
Media keys do nothing. The player must expose MPRIS. Check with:
busctl --user list | grep mpris
Some players need a plugin (mpv) or a setting (Spotify's --enable-mpris).