LINUX.ORG.RU

Настройки звуковых карт после загрузки системы в PipeWire/WirePlumber

 ,


0

3

Каждый раз после перезагрузки системы PipeWire или WirePlumber отключает выход наушников и сбрасывает ещё несколько настроек звуковой карты. Я попытался найти в lua-конфигах WirePlumber, где он это делает, но я там заблудился и ничего не понял. Прошу помощи.

Сервис alsa-restore.service не предлагать, так как PipeWire и WirePlumber запускаются позже и всё равно перезаписывают настройки ALSA. Костыли типа `sleep 5 && alsactl restore` в автозапуске не предлагать тоже. Я хочу сделать всё прямым путём, желательно средствами WirePlumber.



Последнее исправление: toady2 (всего исправлений: 2)
Ответ на: комментарий от eternal_sorrow

Люди делятся на две категории - те, кто говорит слово «крайний» вместо слова «последний» и тех, кого это раздражает (c). 🙂

Суеверия…, скажу «последний» и разрабы забросят дальнейшую разработку PipeWire. ) Шутка.

krasnh ★★★★
()
Ответ на: комментарий от krasnh

Не забросят, потому что ты не лётчик. Возможно что используя специфический жаргон ты хочешь быть ближе к этим мужественным отважным людям, лётчикам, морякам, пожарным, космонавтам. А возможно ты просто нахватался лингвистического мусора из среды тебя окружающей (вряд ли это лётчики, моряки, космонавты и пожарные).

Не нужно изображать из себя того кем ты не являешься, не нужно использовать профессиональный жаргон и «маркеры» не являясь представителем соответствующей профессии. Оставь «крайний» людям ежедневно рискующим жизнью, им можно так говорить, и их можно понять, тебе же так выражаться несколько неуместно.

Мир не рухнет и ты не погибнешь если скажешь «последний». При этом ты будешь выглядеть взрослым человеком, а не wannabe.

А по вопросу — pipewire уважает определение звуковухи как default в настройках alsa. У меня в /etc/alsa/conf.d/@99-pipewire-default-hook.conf

# Load pipewire configuration at conf hook processing time. This allows to
# override pulseaudio defaults configuration which is also applied via hook.
#
# Note since hooks are run after /etc/asound.conf and ~/.asoundrc are applied,
# we load these again here make sure that user configuration takes precedence.

@hooks [
        {
                func load
                files [
                        "/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf"
                        "/etc/asound.conf"
                        "~/.asoundrc"
                ]
                errors false
        }
]
Jameson ★★★★★
()
Ответ на: комментарий от Jameson

Ну к чему эта категоричность, не делай то, не делай это. Так не правильно, а вот так правильно… Не следуй суевериям, не обращай внимание на бабу с пустыми ведрами… 🙂

Может, пусть живут и дальше мои ‘тараканы’, все же они достаточно безобидны. Или мешают? :)

krasnh ★★★★
()
Ответ на: комментарий от krasnh

Категоричность в твоём восприятии, я же просто намекаю на то что использование профжаргона и маркеров человеком непричастным выглядит, как бы это сказать мягко, чтобы не обидеть... Не очень зрелым.

Дело не в суевериях, а в том что в данном случае это суеверие присуще определённой категории людей, работа которых профессионально связана с постоянным риском. И тут мы вступаем на зыбкую почву «ответа за слова». Казалось бы это что то из «понятий» и уголовной среды, но на самом деле это не так, просто уголовная среда заставляет относиться к подбору слов тщательно и ответственно.

А если просто «по жизни» — человек понимающий что он говорит, когда он это говорит и зачем он это говорит привлекает к своим словам больше уважительного внимания чем тот кто повторяет словесные штампы не вдумываясь в их значение и контекст. Со значением всё в порядке, ты вполне можешь быть суеверным.

Не в порядке контекст, сразу по двум пунктам — во первых ситуация в которых ты употребляешь слово «крайний» не связана с риском для жизни, ни твоей, ни окружающих. А во вторых ты не относишься к категории лиц для которых подобный жаргон характерен. Для самих этих лиц несоответствие очевидно, и если оно окажется в круге твоего общения сочтёт тебя балаболом. Скорее всего вслух не скажет, но мнение сформируется.

Ну и наконец, чисто лингвоэстетический момент. Для меня человек говорящий «крайний раз» выглядит либо как неграмотный колхозник, либо как человек присвоивший себе чужой жаргон. Вот такое у меня тонкое восприятие, извиняюсь. Нежные уши режет.

Jameson ★★★★★
()

Ну раз пошла пьянка, объясните, пожалуйста, в чём разница между «последний» и «крайний» с точки зрения суеверного человека? Если не говорить «последний», боясь материализации, то чем «крайний» лучше? Конец чего-либо — тоже край.

toady2
() автор топика
Ответ на: комментарий от shell-script

Если дефолтных настроек нет используется эвристика. На чём нагрузка висит, что в каком порядке загрузилось... И если эвристика врёт нужно в alsa порядок следования карт настраивать, а не в pipewire.

В pipewire это запоминается на уровне юзерской сессии, если руками карты переключал, но порядок слетает например если при засыпании или выключении монитора отваливается HDMI аудиканал, порядок следования карт меняется. С блютус аналогично. Чтобы не отваливался и не «засыпал» есть какая то настройка, чтобы в канал непрерывно «тишина» играла, то бишь чтобы существовал бесшумный поток данных. Но я сейчас быстро не вспомню как это включается.

Можно «руками» через pavucontrol например настроить дефолтную карту, а потом посмотреть в ~/.local/state/wireplumber/ как это всё прописалось. Наверняка можно почитать и узнать как то же самое написать в /etc/wireplumber. Но я бы alsa настраивал всё же...

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

В pipewire это запоминается на уровне юзерской сессии, если руками карты переключал, но порядок слетает например если при засыпании или выключении монитора отваливается HDMI аудиканал, порядок следования карт меняется.

Вот в этом проблема. У меня не HDMI, а usb-брелок от наушников, определяющийся как отдельная звуковуха. И да, судя по wpctl, он периодически отваливается и меняет свой порядковый номер. И соответсвенно, сбрасывается в дефолт с нулевой громкостью. Сейчас я это вылечил костылём, который смотрит в udev, даёт команды wpctl поставить его дефолтным устройством вывода и накручивает громкость. Но хочется как-то это дело сделать красивее.

Можно «руками» через pavucontrol

У меня отсутствует пульса от слова вообще и соответственно нет никаких инструментов управления пульсой. Звуком рулит kmix, а что у него там внутри - хз, надо разбираться, но пока руки не дошли. А вот за ~/.local/state/wireplumber/ спасибо, посмотрю в эту сторону.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

У меня отсутствует пульса

Pavucontrol c пайпварью тоже прекрасно работает. Но не суть, в настройках звука в контролцентре Кед всё то же самое настраивается.

Звуком рулит kmix

kmix нынче рудимент, рекомендуется его вообще удалить из системы, или хотя бы из автозапуска. По дефолту в кедах звуком рулит апплет kde-plasma/plasma-pa (несмотря на «pa» прекрасно работает с пайпварью, как и весь пульсаудиовский управляющий и регулирующий софт, так как pipewire для него от пульсы неотличима). Если ты специально этот апплет не отключал он конфликтует с kmix и сражается «за настройки» с ним. Вот что по этому поводу у kmix в ebuild сказано:

* In KDE Plasma, kde-plasma/plasma-pa is the default audio volume handler.
* Should you prefer this to be kde-apps/kmix instead, do the following:
* - In system tray, right click on [Show hidden items]
* - Select [Configure System Tray]
* - In [Entries],  search for [Audio Volume] and set it to [Disabled]
* KMix will be shown as [Volume Control].

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson
└─> eix -c kde-plasma/plasma-pa
[N] kde-plasma/plasma-pa (5.26.5(5)): Plasma applet for audio volume management using PulseAudio
└─> eix -c kde-apps/kmix
[I] kde-apps/kmix (22.12.3(5)@02.04.2023): Volume control gui based on KDE Frameworks

Впервые слышу про plasma-pa. ) Специально я его не отключал. Но у меня система без переустановки живёт со времён KDE 4.10(даже несмотря на несколько раз сменившееся железо), поэтому возможно, он просто не прилетал по зависимостям. А в глобальных USE стоит -pulseaudio.

Но если я тебя правильно понял, вне зависимости от апплета, управление должно идти одинаково. Сам апплет мне по сути нужен только для отображения текущего уровня громкости и в редких случаях для вкл/выкл звука отдельным приложениям. В идеале хочется настроить дефолтное поведение звука без привязки к апплету.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Да, а «отсутствует pulse» это как? Pipewire наполовину из кода pulseaudio состоит, ну, как минимум использует её заголовочные файлы. У тебя не стоит pipewire-pulse, всмысле pipewire не притворяется pulseaudio сервером для не умеющих нативно в pipewire программ? А как они у тебя звуки издают тогда? Куда? В pipewire-jack, в эмуляцию alsa, напрямую в alsa?

Я был уверен (и уверен) что во первых pipewire без части кода pulseaudio не соберётся, а во вторых он самим фактом своего присутствия заменяет pulseaudio, и одновременно на одной машине не может быть «старого» pulseaudio и pipewire, в генте они друг друга взаимно блокируют...

Jameson ★★★★★
()
Ответ на: комментарий от shell-script

Ты как то странно используешь pipewire, боюсь я не смогу тебе больше ничем помочь. Как по мне выпилив юз pulseaudio ты отломал половину функционала от pipewire, так как он не означает что у тебя станет pulseaudio вместо pipewire, он означает что умеющие в pulseaudio программы будут работать с pipewire, так как для них он будет изображать сервер pulseaudio. Причём он так хорошо это делает что даже конфигурялки типа pavucontrol с ним работают. Но хозяин-барин, просто я такого пуризма ещё не встречал...

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

Я лентяй. Иду всегда по пути наименьшего сопротивления.

Я не выпиливал pulseaudio из pipewire. До недавнего времени мне хватало голой alsa и apulse в качестве затычки для тех, кто в неё не умеет. Но как раз после появления новых наушников, которые ведут себя как дополнительная звуковая карта, мне стало лень пилить конфиги альсы под это дело(потому я сразу и сказал, что у меня они дефолтные) и я стал пробовать разные прослойки. Я включил pulseaudio и оно из коробки не захотело играть в несколько устройств одновременно и что-то там ещё с настройками требовало. Потому, не вникая в подробности, я вернул USE=-pulseaudio и скомпилял pipewire. Без проблем собралось и работает. Умеет в несколько устройств, умеет по отдельности, притворяется пульсой для тех, кому это необходимо(никаких дополнительных pipewire-pulse для этого ставить не надо).

└─> equery u pipewire
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for media-video/pipewire-0.3.66-r1:
 U I
 + + X             : Enable audible bell for X11
 + + abi_x86_32    : 32-bit (x86) libraries
 - - bluetooth     : Enable Bluetooth Support
 + + dbus          : Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc)
 - - doc           : Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
 - - echo-cancel   : Enable WebRTC-based echo canceller via media-libs/webrtc-audio-processing
 - - extra         : Build pw-cat/pw-play/pw-record
 - - ffmpeg        : Enable ffmpeg/libav-based audio/video codec support
 - - flatpak       : Enable Flatpak support
 - - gsettings     : Use gsettings (dev-libs/glib) to read/save used modules (useful for e.g. media-sound/paprefs
 - - gstreamer     : Add support for media-libs/gstreamer (Streaming media)
 - - jack-client   : Install a plugin for running PipeWire as a JACK client
 - - jack-sdk      : Use PipeWire as JACK replacement
 - - lv2           : Allow loading LV2 plugins via media-libs/lv2
 - - modemmanager  : Combined with USE=bluetooth, allows PipeWire to perform telephony on mobile devices.
 + + pipewire-alsa : Replace PulseAudio's ALSA plugin with PipeWire's plugin
 + + readline      : Enable support for libreadline, a GNU line-editing library that almost everyone wants
 + + sound-server  : Provide sound server using ALSA and bluetooth devices
 + + ssl           : Enable raop-sink support (needs dev-libs/openssl)
 - - systemd       : Enable use of systemd-specific libraries and features like socket activation or session tracking
 - - test          : Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
 - - v4l           : Enable support for video4linux (using linux-headers or userspace libv4l libraries)
 - - zeroconf      : Support for DNS Service Discovery (DNS-SD)
Единственный косяк - это вот как раз «забывание» настроек для одной из карт(как раз для наушников) из-за чего пока и решаю проблему костылём, выставляющим настройки и хотелось бы от костыля избавиться, сделав всё через конфиг. Но сходу я не смог пока найти этих настроек.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от shell-script

Ты не просто лентяй, ты странный. Ты вроде как шаришь, и одновременно пишешь какую то дичь... Никаких pipewire-pulse отдельно ставить не надо, да и нет такого, это невыпиливаемый функционал, юз -pulseaudio не отключает pulseaudio, его отключает установка pipewire, которое блокирует пакет pulseaudio. А отключение юза «pulseaudio» просто заставляет те программы которые могли бы использовать pipewire выводить звук через жопу, например через эмуляцию alsa.

Видно что ты не вникал, да. Никогда не понимал людей которые от нежелания вникать пердолятся с голой alsa и apulse, как будто там вникать не надо, ага. Особенно в чудовищные конфиги alsa, которые инопланетяне с lisp головного мозга придумывали и при этом документировать не желали, видимо думая что всем и так всё понятно в океане скобочек.

Вангую что у тебя там просто груда слежавшихся костылей покрывает заплесневелые конфиги, и надо бы с самого начала таки вникнуть и разобраться один раз и навсегда.

Jameson ★★★★★
()
Ответ на: комментарий от shell-script

судя по wpctl, он периодически отваливается и меняет свой порядковый номер. И соответсвенно, сбрасывается в дефолт с нулевой громкостью.

Возможно он у тебя «засыпает». Отключи это через /etc/modprobe.d/usb.conf

options usbcore autosuspend=-1
Jameson ★★★★★
()
Ответ на: комментарий от Jameson

А отключение юза «pulseaudio» просто заставляет те программы которые могли бы использовать pipewire выводить звук через жопу, например через эмуляцию alsa.

Это всё понятно. Ну судя по по тому, что мне показывает тот же wpctl, они выводят звук через pipewire. Хотя, опять же я не разбирался, похоже они выводят через эмуляцию alsa, а не через эмуляцию pulseaudio(судя по chrome - не обращал внимания раньше).

[cppmm@damned ansible]$ wpctl status
PipeWire 'pipewire-0' [0.3.66, cppmm@damned, cookie:404533590]
 └─ Clients:
        31. WirePlumber                         [0.3.66, cppmm@damned, pid:4420]
        32. WirePlumber [export]                [0.3.66, cppmm@damned, pid:4420]
        64. Music Player Daemon                 [0.3.66, cppmm@damned, pid:4467]
        73. telegram-desktop                    [0.3.66, cppmm@damned, pid:6637]
        74. wpctl                               [0.3.66, cppmm@damned, pid:2429]
        80. PipeWire ALSA [chrome]              [0.3.66, cppmm@damned, pid:6589]

Видно что ты не вникал, да. Никогда не понимал людей которые от нежелания вникать пердолятся с голой alsa и apulse, как будто там вникать не надо, ага.

Дело в том, что изначально я выпиливал pulseaudio по той же причине, по которой и сейчас. Оно не работало из коробки, а ковыряться в звуковой подсистеме мне было лень и не интересно. apulse тогда просто взял и заработал. Точно так же как pipewire сейчас.

Вангую что у тебя там просто груда слежавшихся костылей покрывает заплесневелые конфиги, и надо бы с самого начала таки вникнуть и разобраться один раз и навсегда.

В том-то и дело, что я ни строчки в конфигах альсы не правил. Там полный дефолт. Если с апдейтами системы в них что-то менялось со временем, оно там изменено.

Возможно он у тебя «засыпает». Отключи это через /etc/modprobe.d/usb.conf

Попробую. Но это не решит проблему восстановления громкости после ребута.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Попробую. Но это не решит проблему восстановления громкости после ребута.

ВНЕЗАПНО pipewire и всякие прочие pulse не отменяют микшеров alsa. И управление громкостью всего звукового устройства в целом осуществляется микшером alsa. И раз у тебя сбрасывается громкость глобально — у тебя не сохраняется состояние микшера. Настрой его, а потом сделай /etc/init.d/alsasound save. После перезагрузки по идее должен произойти restore уровней.

Jameson ★★★★★
()
Ответ на: комментарий от shell-script

выводят через эмуляцию alsa, а не через эмуляцию pulseaudio

Именно. И это не есть хорошо, потому что в силу специфики alsa эмуляция не может быть полной, точнее она полная, но программа должна это уважать. И если она за неимением альтернатив решит издать звук монопольно захватив устройство напрямую, то бишь заиграть не в не default, который как раз эмуляция, а в hw, который перехватить и блокировать невозможно — pipewire никак не сможет этому помешать и просто банально рухнет.

Jameson ★★★★★
()
Ответ на: комментарий от krasnh

Одно дело спорить про «звони́т» или «зво́нит», другое дело говорить вместо «бутылка» - «кардан» и возмущаться что тебя не понимают и гаткие злодеи раздражаются на твою искромётную чушь.

R_He_Po6oT ★★★★★
()

По вопросу звуковухи не понял. Это именно Pipewire переключает профиль и отключает наушники? Сколько сталкивался с настолками - везде карта автоматически переключается, если к ней не подключены наушники. И ни с пайпварей ни с алсой ни даже с линуксом это никак не связано.

Что же ТС имел в виду? Не пойму ни из описания ни из обсуждения.

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

И ни с пайпварей ни с алсой ни даже с линуксом это никак не связано.

А с этим связано? https://github.com/alsa-project/alsa-ucm-conf

Вот из последнего, к примеру, из-за неправильной конфигурации у меня было два вывода наушников и не было спикеров. В итоге- поведение как у автора. Приходилось рестартить wireplumber

Jeronimo ★★
()
Ответ на: комментарий от R_He_Po6oT

По-моему, я написал прямым текстом: после перезапуска системы выход наушников оказывается отключен.

Более длинная версия: у меня есть ПК с одной звуковухой, встроенной в материнку. Есть выход под спикер (задняя панель ПК) и под наушники (передняя панель ПК). Вот я выставил уровни через alsamixer. Слушаю музыку. На ночь комп выключаю. На следующий день включаю: спикер говорит, наушники молчат. Открываю alsamixer: выход наушников замьючен и громкость на нуле. До перехода на pipewire сервис alsa-restore.service сохранял настройки при выключении компа и восстанавливал при включении. Сейчас это не работает по причинам, описанным в первом сообщении.

toady2
() автор топика
Последнее исправление: toady2 (всего исправлений: 2)

Попробуй «чистый эксперимент», где дистрибутив с rolling release и PipeWire 0.3.69.
Например, флешка с Ventoy и возможность сохранения с Persistence Plugin, чтобы перезагружаться без потери данных.

Я это к чему, то что попадалась по теме, чаще представляет бардак из смеси PipeWire, Pulseaudio и конфигов alsa, который мужественно расчищают и у них все начинает работать как должно.
Дистр с нуля, будет как образец правильной работы. Это будет какой-никакой, но отправной точкой решения проблемы. Имхо.

krasnh ★★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от krasnh

У меня Arch, весьма минимальный и чистый. Я вообще пользовался голой альсой пока не приобрёл блютус наушники. Сейчас у меня стоят только pipewire{-audio,-alsa} и wireplumber.

В интернетах нашёл проблемы как у меня (например, раз, два). Проблема возникает как с pulseaudio, так и с pipewire – оба сервера сбрасывают некоторые контролы alsa до дефолтного состояния. К сожалению, в интернете, судя по всему, никто не знает, как и когда они это делают и как это исправить штатными способами. Самое популярное решение – это костыль с sleep 10 && alsactl restore в автозупуске после логина.

toady2
() автор топика
Ответ на: комментарий от Jeronimo

Что там напихали в этот пакет в арче - одним арчеводам известно. Мы выше говорили про генту и там ничего такого нет. Всё решается через USE(я уже немного разобрался после этого обсуждения).

shell-script ★★★★★
()