Ask RTKit directly for the speaker tuning's realtime priority (#12958)

The tuning host loaded module-rt with default arguments, so it asked for
realtime through xdg-desktop-portal. A portal started before rtkit was
installed reports a realtime budget of zero. module-rt applies that as a
hard RLIMIT_RTTIME of 0, RTKit still makes the data thread SCHED_RR, and
the kernel kills the host with SIGKILL as soon as audio plays; systemd
restarts it every two seconds and the speakers stay silent until the next
login.

Set rtportal.enabled = false, as the stock pipewire.conf does. The host is
a user service in the same session as the PipeWire daemon and has no
reason to go through the portal.

The host config is only copied by `omarchy-audio-tuning on`, so a
migration replaces an installed copy that is still Omarchy's own with the
old setting, and restarts the host if it runs. It does not call `on`,
which would overwrite a tuning graph another tool wrote under the same
name.

Co-authored-by: Michael de By <contact@michaeldeby.nl>
This commit is contained in:
MichaelandMichael de By authored and GitHub committed 2026-10-04 10:20:11 -04:00
1 parent 245630786c
commit baf0287138
3 files changed
+83 -2

No files matched your search

+5 -2
View File
@@ -23,9 +23,12 @@ context.spa-libs = {
}
context.modules = [
# Boost the audio thread priority.
# Boost the audio thread priority. Ask RTKit directly, as pipewire.conf
# does: a portal started before rtkit existed reports a realtime budget of
# zero, which becomes a hard RLIMIT_RTTIME of 0 while RTKit still makes the
# data thread realtime, and the kernel then kills the host once audio plays.
{ name = libpipewire-module-rt
args = { }
args = { rtportal.enabled = false }
flags = [ ifexists nofail ]
}