LINUX.ORG.RU

Pipewire - неизбежная... победа!

 , ,


5

2

Есть snap, flatpak, wayland. Вроде хорошее дело, но - они добавляют изоляцию между приложениями, и такие штуки как jack, pulseaudio уже не могут работать как раньше. Надо что-то решать. И тут появляется надежда - pipewire. Но надежда ложная, потому что это катастрофа!

Нет, надежда все-таки есть.

Вот мои претензии (которые в итоге разрешились):

1. Обязательный ресемплинг. Как известно, pulseaudio поддерживало две частоты дискретизации микшера - основную и альтернативную. Это позволяло, в случае воспроизведения например только музыки со spotify переключать микшер на частоту дискретизации потока и УБРАТЬ ресемплинг! Если воспроизводит только одно приложение, ресемплинга быть НЕ ДОЛЖНО! Потому что он не нужен. Pipewire не позволяет, и похоже что реализовать это в той архитектуре, которую заложили, будет весьма непросто. На практике он всегда делает ресемплинг и всегда портит звук.

Последняя версия pipewire поддерживает до 16 значений частоты дискретизации и будет переключаться на нужную, когда это возможно.

Переключение РАБОТАЕТ уже сейчас, на версии из Git! На релизе 0.3.33 у меня не работает.

КАК СДЕЛАТЬ:

В pipewire.conf пишем:

default.clock.rate          = 48000
default.clock.allowed-rates = [ 44100, 48000 ]

Можно перечислить в allowed-rates до 16 значений. Все!

ТЕПЕРЬ - если воспроизведения не было, и запустить на воспроизведение ОДНО приложение, pipewrire будет переводить себя и звуковую карту на частоту дискретизации этого приложения, и ресемплинга НЕ БУДЕТ.

2. При работе с jack клиентами может меняться размер буфера. Занавес! То есть я играю на гитаре, и тут мне меняют размер буфера? А ничего что это приведет к слышимому и чувствуемому изменению задержки звука? Как играть??? Так НЕЛЬЗЯ ДЕЛАТЬ, а надо делать ровно наоборот. Я уже молчу про то, что изменение на лету размера буфера может просто крашануть jack приложение, которое такого бреда не ожидало!

3. Для того, чтобы вообще хоть как-то задать размер буфера для jack клиентов, надо запускать приложение с переменной окружения PIPEWIRE_LATENCY. То есть мне теперь все приложения из консоли стартовать? Или все desktop файлы править? С настоящим jack это решается элементарно - программой управления типа qjackctl. Там просто выбирается какой буфер, и все приложения используют его. Должно быть ВОТ ТАК.

Решение:

pw-metadata -n settings 0 clock.force-quantum <size>

устанавливает фиксированный размер буфера.

Или в jack.conf:

node.lock-quantum = true

4. Нельзя нормальным образом поменять частоту дискретизации при работе с jack клиентом. Используется та, на которую настроен pipewire своим конфигом. С нормальным jack частота просто выбирается в qjackctl. А с pipewire что, мне править конфиг и перезапускать его, или как?

Решение, можно менять на лету:

pw-metadata -n settings 0 clock.force-rate <samplerate>

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

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

★★★

Последнее исправление: James_Holden (всего исправлений: 4)

Ответ на: комментарий от James_Holden

Да и не только в файлах дело. Вот есть модуль проверки орфографии. Должен ли у него быть доступ к сети? Может да, а может и нет. А может и да, но с ограничениями. А к файлам ему может вообще не следует доступ давать. Тут какой-то одной техникой не обойтись, придётся переписывать вообще всё под возможность правильного разграничения полномочий.

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

придётся переписывать вообще всё под возможность правильного разграничения полномочий.

Всё верно. И тут возникает уже простой вопрос «а надо?».

Причём естественно принципу «stable api is nonsense» все эти порталы и прочее будут постоянно меняться. И глючить — потому что делается это абы как с шишом в кармане.

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

Влатпак так тонко разграничивать не может. Можно сеть отобрать. А к чему в сети доступ давать - нельзя флатпаком настроить. То же и с файлами, только их можно по одному прокидывать. Но это далеко не всегда уместно.

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

Флатпак это не контейнер.

Да ну? Такой же контейнер, создаётся с помощью bwrap, принципы что и у docker'а, т.е. пространства имён используются. Какая тут принципиальная разница? Разве что файловая система устроена проще, не «слоёный пирог» из кучи образов.

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

Принципиальной разницы нет. Это почти одно и то же.

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

Вроде какая-то сишная либа воткнута была которая была под конкретное железо собрана с оптимизациями под него. Можно пересобрать под другое и будет работать. Но то давно было, может уже и пересобрали.

peregrine ★★★★★
()

я вот подумал, если в пайпвэире избавят от возни с alsa-midi-jack бриджами, то я с удовольствием выкину джек :)

kott ★★★★★
()

иди это отпиши в гитхоб, а не сюда. Что ты тут собрался этим всем добиться? Чтобы 386 страниц фигни нагенерили?

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

Ну конечно же там лохи сидят, которые эту штуку разрабатывают, такие как и systemd

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

На этом форуме такая ситуация - норма.

То же самое и с systemd, да. У меня работа не завязана на тонкости реализации системы инициализации, поэтому у меня не подрывает. А у людей для которых это важно - подрывает, потому что они видят что все сделано не так.

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

Так ты не ответил на вопрос. Ты запостил свой пост на лоре. Если все с тобой согласятся, то пайпвэа свернут разработку?

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

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

Ты мне больге напоминаешь этакого городского сумасшедшего в автобусе.

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

Каштан.

anonymous
()
Ответ на: комментарий от ugoday

когда я запускаю свой emacs, вместе с ним запускаются сотни режимов, т.е. какой-то совершенно непроверенный код из Интернета, который имеет доступ ко всему.

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

ephecaff
()
Ответ на: комментарий от kott

Подключил клавиши - все работает, все роутится с jack приложениями сразу. Клавиши играют через qsynth, а tuxguitar играет через клавиши.

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

Вообще с моей субъективной точки зрения, то что они протолкнули jack-подобную систему с графом теперь для всех, а не только для про-, практически перекрывает минусы pipewire. Это весьма позитивный момент.

James_Holden ★★★
() автор топика

То есть мне теперь все приложения из консоли стартовать?

А как ещё?

Это и приведет нас всех к катастрофе

Не всех, а тех ССЗБ, которые обмазываются

snap, flatpak, wayland

Мы давеча тыкали этот ваш Pipewire, вот на первый взгляд всё хорошо, пульсу эмулирует, но модули от неё подхватывать не хочет, виртуальный синк, чтобы выводить звук по Wi-Fi на кассетный магнитофон, не заводится ⇒ занавес, положили на полочку, потыкаем ещё через пару лет :P

mertvoprog
()
Ответ на: комментарий от ephecaff

А надо их тащить с десятка дисков, заставляя пользователя ими жонглировать? Или тащить их вместе с программой, устаревших версий, и чтобы проект весил несколько гигабайт?

mertvoprog
()

Это говно ещё и без дубаса не собирается, в топку его.

nemixer
()
Ответ на: комментарий от mertvoprog

GStreamer уже два десятилетия как есть, вылезайте из криокамеры.

А что там? Можно прямо на лету направлять вывод одних приложений на ввод других?

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

То же самое и с systemd, да. У меня работа не завязана на тонкости реализации системы инициализации, поэтому у меня не подрывает. А у людей для которых это важно - подрывает, потому что они видят что все сделано не так.

Для меня это важно и меня systemd не подрывает. Всё там сделано так. Единственное, чем он меня подрывал в своё время - мне просто вломы было с ним разбираться, т.к. я потратил кучу времени на разборку с init-ом и весь этот опыт пришлось выбросить на помойку. Ну ладно, это IT. Зато возможность крохотным файликом заменить громадный баш скрипт, причём результат получается более надёжным и предсказуемым, это очень круто.

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

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

Ну Java тащила сотни jar-файлов ещё 20 лет назад. Вроде ничего не поменялось принципиально.

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

То же самое и с systemd, да. У меня работа не завязана на тонкости реализации системы инициализации, поэтому у меня не подрывает. А у людей для которых это важно - подрывает, потому что они видят что все сделано не так.

Ты не учёл людей, для которых это важно и которые видят, что всё сделано «так».

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

Сегодня это по-прежнему бред. Другое дело, что в условиях коллективного безумия бред — норма жизни.

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

Открытость как бы тоже, ещё FHS.

@peregrine

Открытость и FHS намного важнее, чем централизованное управление пакетами в нынешнем виде. Это управление даже изначально и не предполагалось, оно больше мешает чем приносит пользы. У него есть только одно большое преимущество по сравнению с, например, виндой - пакетный менеджер хоть и кидает все валом в систему, но следит чтобы не было конфликтов.

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

Вот и выходит что управление установкой/удалением/обновлением компонентов системы нужно, откатываться к виндовому подходу, где просто инсталлятор распаковывается сам как хочет - ненужно, но это управление должно быть совсем другим.

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

Ты не учёл людей, для которых это важно и которые видят, что всё сделано «так».

Я учел, и не лезу против systemd. Я просто говорю что понимаю и тех, у кого подрывает.

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

Централизованное управление пакетами — киллерфича. Нужно просто относиться к нему соответвующе, оно нужно для обеспечения целостности системы.

А для дистрибуции приложений действительно можно использовать что-то другое.

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

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

Нужно просто относиться к нему соответвующе, оно нужно для обеспечения целостности системы.

Целостность приложений тоже нужна, но ее и обеспечивает любая альтернатива обычным репам, тот же AppImage, это же набор образов, они не могут сломать друг друга и систему. И их нельзя сломать.

На десктопах я лично не виду ничего лучше AppImage, но паковать в него действительно сложно

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

Сборка флатпака в целом похожа на AppImage, но там пихается тупо все, что компилятор породил, минус то что руками прописано «удалить». И породить он должен все что нужно из того чего нету в флатпаковом рантайме, из хостовой системы туда ничего не дергается. Поэтому и собрать можно все, проблемы только если приложение само делает песочницы, которые несовместимы с флатпаковой песочницей.

Еще с AppImage учти такие недостатки.

  1. Не только при сборке, но и при запуске он использует библиотеки с хоста, поэтому легко может не запуститься.

  2. Его разработчик страдает каким-то луддизмом и отказывается пилить поддержку wayland.

  3. Обновляться может только целиком, нет дедупликации между пакетами. Там может дублироваться что угодно.

если флатпак сделают более универсалтным, пользоваться им станет можно (лишь бы не навязывали)

Конкретно с флатпаком тут сразу две проблемы - и с универсальностью, и с навязыванием.

Флатпак это по сути OSTree репозиторий, а не образ, не пакет в виде архива. Его нельзя так просто взять как файлик и таскать, класть куда хочешь и оттуда запускать. В отличие от AppImage. Отсюда проблемы - прибито к /var/lib/flatpak, без интернета это все почти теряет смысл, перетаскивание пакета на флешке через адовые костыли.

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

Что важнее? Для меня то, что дает флатпак. Но это заметно снижает универсальность. Еще учтем, что если у тебя IDE или другая программа запущена из флатпака, то она не может запустить докер, AppImage и даже сам флатпак! Не может собирать пакеты самого же флатпака через flatpak-builder. Потому что песочница.

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

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

Обновляться может только целиком, нет дедупликации между пакетами. Там может дублироваться что угодно

Так это и не требуется. Места сейчас у всех полно, рамы тоже. Дедупликация ведёт к зависимостям, зависимости ведут к неуниверсалтности, а полноценное управление зависимостями возвращает к пакетным менеджерам.

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

Дедупликация ведёт к зависимостям

Не ведет. Зависимости - это только один из методов дедупликации. В OSTree другой метод. Есть общее хранилище файлов, где в кучу, все вместе, лежат вообще все файлы из всех пакетов. Каждый файл имеет имя - его контрольная сумма. Двух одинаковых файлов в хранилище быть не может - у них совпадет контрольная сумма и значит имя.

Потом хардлинками на файлы этого хранилища создаются папки пакетов, в каждом - как бы свое содержимое, но оно полностью состоит из хардлинков. Если файл дублируется между пакетами, со стороны это выглядит что в каждом пакете он свой. Но физически на диске это один файл, остальное - хардлинки.

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

Зависимость не пакетов друг от друга, а пакетов от хранилища, что вообще не составляет проблемы, потому что хранилище это не фиксированный архив с набором файлов, а репозиторий, где все обновляется/добавляется/удаляется централизованно.

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

Ставишь первый пакет - он скачивается целиком, и ставится целиком. Поэтому у людей подрывает - как так, у меня GIMP гиг отожрал!

Ставишь второй, третий, n-й пакет - скачиваются только те файлы, которых еще в хранилище нет. А иначе все это бы до терабайта раздувалось.

AppImage не полностью раздувает потому что он пакует не все и использует хостовую систему. Но тот же Qt пакуется в каждый AppImage, если у тебя 10 Qt-приложений, то у тебя 10 раз Qt продублировано будет. А с флатпаком один раз.

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

Спасибо за пояснение, я не вникал как у флатпака зависимости устроены.

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

Но тот же Qt пакуется в каждый AppImage, если у тебя 10 Qt-приложений, то у тебя 10 раз Qt продублировано будет. А с флатпаком один раз.

Опять фантазируешь. Все приложения будут с разными версиями Qt.

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

С AppImage - да. С флатпаком один раз. Вот на практике, которую ты так любишь у меня такие рантаймы

pdftricks переводы       ….github.muriloventuroso.pdftricks.Locale          stable
AndroidStudio переводы   com.google.AndroidStudio.Locale                    stable
Gpredict переводы        net.oz9aec.Gpredict.Locale                         stable
Ardour переводы          org.ardour.Ardour.Locale                           stable
Codecs                   org.blender.Blender.Codecs                         stable
Blender переводы         org.blender.Blender.Locale                         stable
FreeCAD переводы         org.freecadweb.FreeCAD.Locale                      stable
Guitarix LV2             ….freedesktop.LinuxAudio.Plugins.Guitarix 0.42.1   20.08 
KapitonovPluginsPack     ….LinuxAudio.Plugins.KapitonovPluginsPack 1.2.1    20.08 
Freedesktop Platform     org.freedesktop.Platform                  20.08.14 20.08 
Mesa                     org.freedesktop.Platform.GL.default       21.1.4   20.08 
Intel                    org.freedesktop.Platform.VAAPI.Intel               20.08 
ffmpeg-full              org.freedesktop.Platform.ffmpeg-full               20.08 
openh264                 org.freedesktop.Platform.openh264         2.1.0    2.0   
Freedesktop SDK          org.freedesktop.Sdk                       20.08.14 20.08 
i386                     org.freedesktop.Sdk.Compat.i386                    20.08 
Python3_9_6              org.freedesktop.Sdk.Extension.Python3_9_6          20.08 
gcc_arm_none_eabi        …edesktop.Sdk.Extension.gcc_arm_none_eabi          20.08 
GNOME Application Platf… org.gnome.Platform                                 40    
Guitarix переводы        org.guitarix.Guitarix.Locale                       stable
Inkscape переводы        org.inkscape.Inkscape.Locale                       stable
Adwaita theme            org.kde.KStyle.Adwaita                             5.15  
KDE Application Platform org.kde.Platform                                   5.15  
KDE Software Developmen… org.kde.Sdk                                        5.15  
digikam переводы         org.kde.digikam.Locale                             stable
kdevelop переводы        org.kde.kdevelop.Locale                            stable
KiCad Footprint Librari… org.kicad.KiCad.Library.Footprints                 stable
KiCad 3D Model Libraries org.kicad.KiCad.Library.Packages3D                 stable
KiCad Schematic Symbol … org.kicad.KiCad.Library.Symbols                    stable
KiCad Templates          org.kicad.KiCad.Library.Templates                  stable
KiCad переводы           org.kicad.KiCad.Locale                             stable
LibreOffice переводы     org.libreoffice.LibreOffice.Locale                 stable
firefox переводы         org.mozilla.firefox.Locale                         stable
desktop переводы         org.telegram.desktop.Locale                        stable

Нету двух разных версий даже. А ты говоришь десять.

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

Организационные проблемы технически не решаются, в этом контексте, что разницы между паком и имаджем нет. А кооперация есть, судя по твоему сообщению выше. Если хотя бы каждая вторая система выглядит ± так же, то даже не вникая, я готов поставить на то, что есть как минимум негласный консенсус.

@Harald

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

Протри глаза. Qt находится в рантайме KDE. Он - один. Значит и Qt установлено один раз.

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

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

Если быть точным, мы оба не правы. Полностью Qt никто из тех пакетов что у меня стоят не дублирует, но некоторые пакеты тянут либо плагины, либо QtWebEngine которого нету в рантайме.

James_Holden ★★★
() автор топика

Самое плохое, что никакой альтернативы ему нет. Это и приведет нас всех к катастрофе.

Можно прокрутить огородников с их изоляцией, как альтернатива.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.