Keep the KEF LSX II LT USB sink from suspending (#11318)

The speaker's USB firmware stops answering control requests when the host
stops the audio stream after WirePlumber's 5 s idle suspend. The kernel
then logs usb_set_interface failed (-110), clock source 1 is not valid,
and cannot set freq 48000 err -110; PipeWire fails to start the sink and
only a replug recovers it. On one machine this happened on six days over
three weeks, up to hundreds of timeouts a day.

A WirePlumber rule sets session.suspend-timeout-seconds = 0 for the KEF
node only, so the stream is never stopped and the trigger never fires.
Other sinks keep the default. The migration seeds the file for existing
installs and restarts WirePlumber if it is running, since conf.d is only
read at startup.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
David Heinemeier Hansson
2026-09-11 21:51:13 +02:00
committed by GitHub
co-authored by Claude Fable 5.1
parent b5589faaf8
commit 31bd80daa4
2 changed files with 28 additions and 0 deletions
@@ -0,0 +1,19 @@
## Never suspend the KEF LSX II LT USB sink.
## The speaker's USB firmware stops answering control requests when the host
## stops the stream after idle (usb_set_interface -110), and only a replug
## recovers it. Keeping the stream open avoids the trigger.
monitor.alsa.rules = [
{
matches = [
{
node.name = "~alsa_output.usb-KEF_LSX_II_LT.*"
}
]
actions = {
update-props = {
session.suspend-timeout-seconds = 0
}
}
}
]
+9
View File
@@ -0,0 +1,9 @@
echo "Keep the KEF LSX II LT USB sink from suspending"
conf="wireplumber/wireplumber.conf.d/kef-lsx-no-suspend.conf"
if [[ ! -f "$HOME/.config/$conf" ]]; then
omarchy-refresh-config "$conf"
# WirePlumber only reads conf.d at startup; restart it if it is running.
systemctl --user try-restart wireplumber.service 2>/dev/null || true
fi