Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10

Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #15 kdy: 22. 03. 2026, 22:47:38 »
Možná, když už jsme to tu zmínili a někdo by to tu případně hledal.
Přidám konkrétní návod na vyřazení ALSA zařízení z PipeWire pomocí WirePlumberu. Třeba se to někomu bude hodit.

- spustím si příkaz: wpctl status  a pak najdu ve stromečku "Audio > Devices" číslo zařízení (ID), co chci zakázat
- zjistím další informace příkazem: wpctl inspect <ID>
- ve výpisu dohledám (grepnu) řádek device.name = "..."
např. device.name = "alsa_card.pci-0000_07_00.0"
- pokud neexistuje, tak vytvořím adresářovou strukturu: ~/.config/wireplumber/wireplumber.conf.d/ a v ní následně libovolný .conf soubor.

Např. disable-my-alsa-device.conf

Kód: [Vybrat]
monitor.alsa.rules = [{
  matches = [
    { device.name = "alsa_card.pci-0000_07_00.0" }  # Tady použiju jméno z předchozího výstupu
  ]
  actions = {
    update-props = {
      device.disabled = true
    }
  }
}]


- spustím: systemctl --user restart wireplumber
- zkontroluji znova: wpctl status, zařízení by tam už nemělo být
- profit


Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #16 kdy: 22. 03. 2026, 23:08:57 »
Tak mozna zvukove API to resi.. ale souborovy system s tou exkluzivitou kdy nejde smazat adresar protoze nejaky proces tam ma CWD, byl hlavni duvod odchodu od Win

Kdyby to bylo jen CWD v terminálu. Tohle tvrdé zamykání (oproti eleganci s unlink()) je i důvod, proč je nutné spousty aktualizací na Windows fakticky naplánovat na další boot v nějaké early stage. Resp. když to jde, tak komplet zastavit služby, vyměnit binárky a pak znovu spustit.
Ale už jedu trochu off-topic, každý systém má něco.. ;)

Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #17 kdy: Dnes v 09:08:09 »
Na úrovni ALSA zařízení, žádná takováhle klasifikace klientů (normální, exclusive) není.. tam by se nejspíš muselo něco dohackovat (nevím, přes BPF sledovat, který proces to otevírá, ale asi by to byla prasečina, protože jakmile by s tím nepočítalo vyploženě API, musel by se ten ne-exklusivní klient nějak zvenku urvat).

Samozřejmě přes lsof /dev/snd/* lze zjistit, který proces má zařízení otevřené, a ten by se dal zabít, ale to je hodně na hulváta.

Ale myslím, že tohle má v sobě právě přímo Pipewire.
https://docs.pipewire.org/page_man_pipewire-props_7.html#:~:text=node%2Eexclusive,source
Nikdy jsem to nezkoušel, ale chápu (možná blbě) to tak, že když se vytvoří klient (node) s tímhle příznakem a pak se připojí na sink, tak to po dobu spojení vyruší ostatní klienty.
Teoreticky i pokud to nepodporuje přímo aplikace při vytváření, tak by to pak mohlo jít přidat nějakým pravidlem (match jména "privilegovaného" procesu) i přes WirePluber.

V rámci PW to lze, v podstatě to znamená, že nebude docházet k mixování, node má sink jen sám pro sebe. Ale jakmile se něco připojí na alsí zařízení, už je to natvrdo, ani PW s tím nic neudělá.

Citace
Jinak to, co jsem myslel předtím, že PW zavře ALSA zařízení, tak jen klasicky přes sw_params.
grep -H '^' /proc/asound/*/pcm*/sub?/sw_params

Jj, zjistit proces, který zařízení používá, je snadné. Ale pak už jen jej killnout natvrdo, aby zařízení pustil. Zatím jsem nikde neviděl, že by to někdo takhle používal, ale technicky takovému ošklivému hacku nic nebrání.

Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #18 kdy: Dnes v 09:09:19 »
Možná, když už jsme to tu zmínili a někdo by to tu případně hledal.
Přidám konkrétní návod na vyřazení ALSA zařízení z PipeWire pomocí WirePlumberu. Třeba se to někomu bude hodit.

Super, díky, to je hodně užitečné. Vypínání zařízení v PA bylo snadné přes CLI pactl, ale v PW se nezdá, že to takhle napřímo fungovalo.

Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #19 kdy: Dnes v 09:11:26 »

Možná, když už jsme to tu zmínili a někdo by to tu případně hledal.
Přidám konkrétní návod na vyřazení ALSA zařízení z PipeWire pomocí WirePlumberu. Třeba se to někomu bude hodit.

Super, díky, to je hodně užitečné. Vypínání zařízení v PA bylo snadné přes CLI pactl, ale v PW se nezdá, že to takhle napřímo fungovalo. Přitom mi to přijde velice důležité a řešení přes wireplumber je dost přes ruku.
« Poslední změna: Dnes v 09:16:39 od redustin »


Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #20 kdy: Dnes v 19:15:52 »
Super, díky, to je hodně užitečné. Vypínání zařízení v PA bylo snadné přes CLI pactl, ale v PW se nezdá, že to takhle napřímo fungovalo. Přitom mi to přijde velice důležité a řešení přes wireplumber je dost přes ruku.

Není zač.
A ano s tím ekosystémem okolo PW je to občas fakt komplikované - takže to může působit přes ruku.
Je to teď podle mě ve stavu, kdy do toho běžný uživatel do toho sice málokdy musí hrabat, ale na tyhle pokročilejší věci to může být občas docela boj. Některé kroky dává smysl udělat jen ve WirePlumberu (aby se to dynamicky aplikovalo třeba podle konkrétního zařízení, jména procesu, nebo naopak nepřeráželo), některé zas staticky na úrovni configů PipeWire a pak je tam překryv toho, co jde udělat v obojím. Do toho ještě systemwide vs. lokální a nakonec dvě syntaxe - SPA-JSON a Lua (samotné skriptování pro složitější záležitosti ve WP) a také si jde vybrat, jestli to udělám pravidly nebo třeba ze skriptu s pomocí pw-cli.
Nakonec ještě ta emulovaná API (Pulse, JACK, ALSA), která se nastavují buď svými configy nebo pomocí systémových proměnných.


Re:Zvukovka Behringer 1820 se 7.1 na Kubuntu 24.10
« Odpověď #21 kdy: Dnes v 19:16:44 »
V rámci PW to lze, v podstatě to znamená, že nebude docházet k mixování, node má sink jen sám pro sebe. Ale jakmile se něco připojí na alsí zařízení, už je to natvrdo, ani PW s tím nic neudělá.

Určitě by se dalo upravit ALSA API, aby tam byla např. nějaká priorita klientů, řešilo to odpojování atp. Exkluzivní přístup, ve smyslu - klient má výhradní kontrolu nad zařízením, je tam tak nějak od začátku. Ale obávám se, že po tom není extra poptávka, navíc je vcelku jednoznačný trend zachovat to jako specifické low-level rozhraní a všechny věci okolo pokročilejší správy přístupů řešit nad tím v PipeWire.

S ohledem na tu zmíněnou situaci mě teď napadají v podstatě tři scénáře.

1) na zvukovku vůbec nemusím přistupovat přes PW, mám ji vyhrazenou jen pro specifické aplikace s nativním ALSA API. To je nejjednodušší, vyřadím jí pomocí WirePlumberu, jak jsem psal.

2) budu v pohodě, když se bude používat emulované ALSA rozhraní z PipeWire
poměrně hodně toho můžu nastavit buď configu nebo přes systémové proměnné.. V proměnné PIPEWIRE_NODE ho přímo nasměruju na konkrétní sink resp. source. Pomocí PIPEWIRE_ALSA mu zas můžu dát konkrétní nastavení.
Takže třeba takhle si udělám zmíněný exkluzivní přístup (žádný jiný klient v tu chvíli nesáhne na ten sink nebo source):
PIPEWIRE_ALSA='{ node.exclusive=true }' aplay -D pipewire ./test.wav

Napadají mě jen dvě situace, kdy by mi to mohlo vadit - chtěl bych co nejmenší latenci nebo bych z nějakého důvodu používal mmap přístup na zařízení (který PW emulace neumí).

3) v momentě, kdy budu na ALSA zvukovku přistupovat aplikací přímo bez PW, tak si ji zamknu pomocí příkazu pw-reserve.
https://docs.pipewire.org/page_man_pw-reserve_1.html
Jakmile aplikaci skončím, zase zámek pustím, aby se dala standardně používat přes PW.
Tzn. napíšu si buď nějaký wrapper script, nebo když to bude služba, tak třeba využiju ExecStartPre= atp.

Ukázka s komentářem:
Kód: [Vybrat]
#!/usr/bin/env bash

# Číslo karty v /proc/asound, buď se nemění a vím ho, nebo si ho vyparsuju podle názvu
CARD_NUM=1
# Název pro rezervaci je vždycky Audio a číslo, dá se zjistit i přes pw-dump
# řádek např. "api.dbus.ReserveDevice1": "Audio1"
RESERVE_DEV="Audio${CARD_NUM}"

echo "Requesting reservation for ALSA card $CARD_NUM..."
pw-reserve -n $RESERVE_DEV -r &
RESERVE_PID=$!
# zůstává běžet jako proces na pozadí, uložím si PID
# nastavím trap, aby ho ukončil, ať už skript doběhne, nebo se ukončí natvrdo
trap 'echo "Releasing reservation..."; kill $RESERVE_PID; exit' EXIT INT TERM

# Bulharská konstanta, než se zavřou připojení klienti.
# Dalo by se udělat líp, kdy bych čekal, až bude zařízení volné.
sleep 1

# Původní aplikace.. např.
aplay -D plughw:${CARD_NUM},0 "$@"