Rode Wireless GO II RX przerywa w OBS (Linux, PipeWire)

1. Wyłącz autosuspend USB dla Rode

(reguła musi być w jednej linii)

echo 'ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="19f7", ATTR{idProduct}=="002e", TEST=="power/control", ATTR{power/control}="on"' | sudo tee /etc/udev/rules.d/50-rode-power.rules
sudo udevadm control --reload && sudo udevadm trigger

2. Wyłącz usypianie węzła w WirePlumber i zwiększ margines bufora

mkdir -p ~/.config/wireplumber/wireplumber.conf.d
cat > ~/.config/wireplumber/wireplumber.conf.d/51-rode-nosuspend.conf <<'EOF'
monitor.alsa.rules = [
  {
    matches = [
      { node.name = "~alsa_input.usb-R__DE_Wireless_GO_II_RX.*" }
    ]
    actions = {
      update-props = {
        session.suspend-timeout-seconds = 0
        node.pause-on-idle = false
        api.alsa.headroom = 1024
      }
    }
  }
]
EOF

3. Większy bufor w PipeWire i dla klientów Pulse (Flatpak OBS)

mkdir -p ~/.config/pipewire/pipewire.conf.d ~/.config/pipewire/pipewire-pulse.conf.d

cat > ~/.config/pipewire/pipewire.conf.d/99-stable.conf <<'EOF'
context.properties = {
  default.clock.rate = 48000
  default.clock.quantum = 1024
  default.clock.min-quantum = 512
  default.clock.max-quantum = 2048
}
EOF

cat > ~/.config/pipewire/pipewire-pulse.conf.d/99-stable.conf <<'EOF'
pulse.properties = {
  pulse.min.req = 512/48000
  pulse.min.quantum = 512/48000
  pulse.default.req = 1024/48000
}
EOF

systemctl --user restart wireplumber pipewire pipewire-pulse

Uruchom ponownie OBS i wybierz Rode. W OBS ustaw Ustawienia → Audio → 48 kHz.

4. Weryfikacja

for d in /sys/bus/usb/devices/*/; do [ "$(cat $d/idVendor 2>/dev/null)" = "19f7" ] && echo "$d: $(cat $d/power/control)"; done   # ma być: on
pactl list sources | grep -A80 "Wireless_GO" | grep -E "headroom|pause-on-idle|suspend-timeout"   # przy włączonym OBS
pw-metadata -n settings 0 | grep -E "quantum|clock.rate"

5. Skrót ratunkowy, gdyby przerywanie wróciło (KDE: Ustawienia systemowe → Skróty → Własne skróty)

systemctl --user restart wireplumber

Jeśli to nie pomoże, diagnoza w momencie awarii, zanim cokolwiek przełączysz: pw-top (kolumna ERR przy Rode) i dmesg | tail -50. Błędy USB w dmesg oznaczają port, kabel lub kontroler. Rosnące ERR przy czystym dmesg oznaczają bufor.

Czy zadziała na Ubuntu?

Tak, w większości. Kubuntu to Ubuntu z innym środowiskiem graficznym, więc kernel, udev, PipeWire i Flatpak są takie same.

  • Krok 1 (udev) działa wszędzie.
  • Krok 3 (PipeWire/pipewire-pulse) działa na każdym systemie z PipeWire.
  • Krok 2 (WirePlumber) zależy od wersji. Format wireplumber.conf.d z mojej instrukcji wymaga WirePlumber 0.5 lub nowszego. Masz PipeWire 1.6.2, więc to jest nowe wydanie i u Ciebie działa. Na nowych Ubuntu (od 25.04) będzie tak samo. Ubuntu 24.04 LTS ma starszy WirePlumber 0.4, który używa skryptów Lua w ~/.config/wireplumber/main.lua.d/, więc plik z kroku 2 tam nie zadziała i trzeba by napisać jego odpowiednik w Lua. Daj znać, jeśli na to trafisz, to go przygotuję.
  • Ubuntu 22.04 domyślnie używa PulseAudio, więc kroki 2 i 3 nie mają zastosowania. Zostaje tylko udev.
  • Skrót ratunkowy i polecenia pactl działają wszędzie, gdzie jest PipeWire.
  • W wersji GNOME skrót ustawisz w Ustawienia → Klawiatura → Skróty własne, a nie w KDE.

Przed przeniesieniem sprawdź na nowym systemie LC_ALL=C pactl info | grep "Server Name" oraz wireplumber --version.