← Otto User GuideAudio
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).