LINUX.ORG.RU
ФорумTalks

Мы нежеланные Божьи дети

 , , ,


0

1

Недавно я купил usb-аудиокарту Creative X-Fi HD. Карта воспроизводила звук в моем раче с pulseaudio без каких-либо усилий с моей стороны. Уж не знаю может этот звук далек от аудифилии, задуманной производителем, но в целом я получил то, что хотел: больше басов, чище звук и самое главное – громче звук. На встройке у меня было обычным делом громкость, выкрученная на 100% в фильмах, некоторых музыкальных композициях и ютубе, сейчас та же громкость на 30-40%. Кстати, слышал гипотезу, что у хорошей встройке звук по качеству почти не отличается от дискретной аудиокарты, но за счет усилителя и, соответственно, более высокой громкости, звучание дискретки воспринимается как более качественное. Может оно и так.

Звук есть – уже хорошо, но на карте есть железная крутилка громкости, которая не работала. Небольшое гугление показало, что настраивать его нужно через lirc. Довольно интересная штука эта lirc. Помнится несколько лет назад кто-то хотел удалить его откуда-то, потому что он представлял из себя невероятный говнокод. Готов в это поверить. lirc, значит, перехватывает события наших устройств, а irexec на эти события позволяет навесить какие-нибудь действия, например, увеличить/уменьшить громкость или вообще выключить звук. Я даже нашел полезные статьи, что конкретно надо записать в конфиг lirc и irexec для моей карты. Путем мытарств было установлено, что для моей задачи lirc должен быть собран с драйвером devinput и.. в раче он почему-то собран без него. Одинокие забытые треды на просторах интернета оставляют больше вопросов, чем ответов. Кто виноват я не выяснил, а вот что делать придумал: установить lirc-git из aur, который был собран правильно.

lirc перестал ругаться на devinput и наконец-то запустился. Читатель, возможно, подумал, что проблема решена и ОП смог насладиться радостью настоящей железной крутилки, о которой всегда мечтал, но приятный холодок металического кругляша не хотел ничего делать. Но ведь я прописал в конфиг именно то, что нужно. Статья вот.. Про мою карту.. irexec так и не заработал и я сделал небольшой грязный скрипт, который просто читал события из irw и крутил громкость. Успех.

На следующий день индеец Зоркий Глаз заметил, что lirc почему-то жрет 100% одного ядра процессора. Причем запускается он нормально, ничего не жрет, но только ты начинаешь крутить крутилку, потребление процессора подскакивает до 100% и.. на таком же уровне и остается, даже если к крутилке больше не притрагиваешься. Одинокие забытые треды, традиционные для lirc, конечно же ничего путного не советуют. Что же делать? Так ведь жить нельзя. И тут, назло хейтерам приходит на помощь systemd: в нем можно для любого сервиса задать параметры для ограничения потребления процессора: CPUAccounting=true, CPUQuota=2%. Но и этого мало, можно не меняя системный сервис просто сделать оверрайд некоторых настроек! /etc/systemd/system/lircd.service.d/override.conf Как вам такое, хейтеры? Удобно? Как по мне – очень. И заметьте, это все работает на любом дистрибутиве.

В общем, lircd у меня все так же жрет 100% доступного ему ЦПУ, но доступно ему только 2%, которых хватает, чтобы менять мне громкость крутилкой без тормозов.

Ошибку в конфиге irexec я тоже нашел, оказывается в конфиге для моей карты был лишний параметр remote = devinput с которым ничего не работало.

К чему я это все написал? Куча каких-то ошибок и багов, все сделано как-то сложно, а мы лепим для них костыли и подпорки. Особенно меня удивило ограничение процессорного времени для процесса, который жрет 100% CPU – это настолько нелепо и криво, что даже красиво.

Небольшое гугление показало, что настраивать его нужно через lirc

Я бы даже не стал пытаться, и судя по твоей простыне - логика моя верна

Deleted ()

Мало секаса. Теперь нужно {s,l}trace'нуть lircd и найти причину жора.

Deleted ()

К чему я это все написал? Куча каких-то ошибок и багов, все сделано как-то сложно, а мы лепим для них костыли и подпорки.

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

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

Учитывая, что жор CPU был не только у меня, мне даже пришла в голову шальная идея зарегистрироваться на форумах и рассылках с этой проблемой и предложить страдальцам ограничение CPUQuota. Чтобы эта нелепая срань стала типа официальным решением лол.

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

Учитывая, что жор CPU был не только у меня, мне даже пришла в голову шальная идея зарегистрироваться на форумах и рассылках с этой проблемой и предложить страдальцам ограничение CPUQuota. Чтобы эта нелепая срань стала типа официальным решением лол.

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

Meyer ★★★★ ()

Заголовок, конечно... Всё идет по плану, полный иншаллец. Ну а то, что тебя это не устраивает - типа твои проблемы

TooPar ()

Кто докуда дочитал, признавайтесь?

Я дальше слова «аудифилии» не читал.

EXL ★★★★★ ()

.. CPUQuota=2%... Удобно? Как по мне – очень. И заметьте, это все работает на любом дистрибутиве.

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

DawnCaster ()
Ответ на: комментарий от EXL

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

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

Эх, а я ещё помню времена когда Мандрейк 8.2 отлично работал на 64 метрах ОЗУ и 433 целероне... И, что самое забавное - грузилось оно практически так-же быстро как и сегодняшние дистры с SystemD на современном железе. И таких вот подстав с 100% загрузкой системы - не было.

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

Мандрейк 8.2 отлично работал на 64 метрах ОЗУ и 433 целероне

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

грузилось оно практически так-же быстро как и сегодняшние дистры с SystemD на современном железе

А это просто феерическая чушь. Системы тогда грузились по 20-40 секунд, что винды, что линуксы.

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

Это ужасно :((

Deleted ()
Ответ на: комментарий от DawnCaster

помню времена когда Мандрейк 8.2 отлично работал

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

Im_not_a_robot ★★★★★ ()

можно ли предположить, что эта история успеха не ограничится лором и ты все же дополнишь арчвики?

BOSS-NIGGER ()

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

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

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

Iron_Bug ★★★★ ()

Да, в своё время сам подбирал коды для клавиш пульта и этой крутилки на X-Fi 5.1. Но это было несложно, а Lirc работал, как часы. В результате я смог кастомизировать управление чего угодно на компе. Того же MPV, к примеру.

roiman ()

libinput debug-events и крутилку покрути. Если события приходят, можешь в настройках DE шоткат назначить.

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

Нет, ничего он не показывает. Мышь, клавиатуру, а крутилку – нет.

Im_not_a_robot ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)