když není, tak to ALSA zařízení PW pustí, což je pak vidět i v procfs
IMO v linuxu není možnost, jak by proces zjistil, že se jiný proces snaží zařízení otevřít, aby je zavřel a uvolnil. Buď jej má otevřené, a pak mají všichni ostatní smůlu, nebo je volné, a pak první vyhrává. Narozdíl např. od windows wasapi, kde exclusive může mít zakliknutou prioritu a pak windows mixer (tj. wasapi shared) zařízení uvolní, když přijde požadavek od klienta v režimu exclusive. To mi přijde hodně šikovné.
Jo, to je šikovné a analogicky to funguje i na MacOSu s CoreAudio a exclusive režimem.
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).
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,sourceNikdy 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.
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