LINUX.ORG.RU

Вышел Music Pause Daemon

 autopause, , , ,


0

3

Вчера на github появились исходники открытого проекта musicpaused. Основное предназначение программы — приостанавливать воспроизведение музыки при вынимании наушников так же, как это делают мобильные устройства на ОС Android и iOS. Многие хотели бы иметь такую же функциональность и на своих ноутбуках и компьютерах, и теперь это возможно. Также она может показывать уведомления на рабочем столе при вставке и вынимании разъёмов наушников, микрофона и некоторых других. Для Линукса подобных программ раньше не было.

Программа состоит из 3 демонов:

  • jacklistener — монитор событий изменения состояния разъёмов. Читает события из event-device'ов и передаёт их в виде сигналов на системную шину D-Bus;
  • musicpaused — демон, работающий с правами пользователя и приостанавливающий воспроизведение музыки при получении сигнала о вынимании наушников от jacklistener. Может управлять всеми плеерами, поддерживающими интерфейс MPRIS;
  • jacknotifier — демон, работащий с правами пользователя и показывающий уведомления на рабочем столе при получении сигналов от jacklistener.

Такая организация программы позволяет легко расширять её функциональность за счёт написания дополнительных демонов, выполняющих какую-то одну задачу и взаимодействующих с сервером jacklistener.

Программа работает, если ядро сообщает об изменении состояния разъёмов через event-интерфейс. Для аудиокарт Intel HDA необходимо включить в конфигурации ядра опцию CONFIG_SND_HDA_INPUT_JACK.

На гитхабе доступны исходники и ебилды для Gentoo, а также инструкции по установке.

Исходники jacklistener

Исходники jacknotifier

>>> Исходники musicpaused

★★★★★

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

Когда-то делал это костылем в 10 строчек на баше.
Траверсим /sys ищем input

cat /dev/input/eventX| ... do
...
done

Как-то так

AiFiLTr0 ★★★★★
()

сфeерический (sic) пример эталонного велосипеда в вакууме.

планирует ли автор complement данную программулину, чем-нибудь вроде Music UnPause Daemon? мир затаил дыхание, да.

P.S. у пульсы вроде есть в планах запилить рекацию на фтыкание наушников. но фобам это же не интересно.

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

Когда-то делал это костылем в 10 строчек на баше.

На баше не получится нормально распарсить структуру, которая приходит из event-девайса, потому что оттуда двоичные данные идут. И тут возникнут сложности с правами — по умолчанию из event-девайса может читать только рут, а чтобы остановить плеер, надо подключиться к шине D-Bus пользователя, поэтому придётся менять права на event-девайс, что нехорошо.

Идейно моя программа тоже читает этот файл (причём умеет читать сразу из нескольких — у меня, например, их 2 — по одному на разъём), но она разделена на 2 части — сервер работает под рутом и предоставляет информацию на системную шину. Права доступа к этой информации органичиваются через polkit — здесь возможность тонкой настройки прав. Клиенты, которым разрешено читать эту информацию, слушают широковещательные сигналы от сервера и делают то, на что они запрограммированы — останавливают музыку, показывают уведомления и т.п.

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

так у меня не интеграшка. придётся шарить

У не-интеграшек обычно нет такого понятия, как «выход на наушники».

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

ну а что мешает вендорам ушей сделать еще и емкостные сенсоры?

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

Не сильно в курсе, какой интерфейс управления, но с Music Player Demon работает?

Должно работать, если установить это:

http://ayeon.org/projects/mpDris/

Это клиент к mpd, который выставляет на dbus интерфейс MPRIS, через который можно управлять mpd.

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

У меня когда-то было 2 реализации. Одна при помощи hexdump'а и cut'a, другая при помощи Сшного костыля. В принципе, это более хорошее решение, но вот только смущает необходимость 3х! демонов. В идеале, как-нибудь передавать этот эвент иксам, типа нажата/отпущена кнопка. а дальше можно разруливать. Мне кажется архитектурно, это было бы правильнее

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

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

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

P.S. у пульсы вроде есть в планах запилить рекацию на фтыкание наушников. но фобам это же не интересно.

Я жду уже не первый год эту функциональность в Линуксе. В частности, ждал её в pulseaudio. И почему-то само оно не пришло. Да, в пульсе запилили реакцию на наушники — она сохраняет разные уровни громкости для наушников и динамиков. Но этим всё и ограничилось. Возможности легко допилить нет. А тем временем в древней венде XP уже больше 10 лет появляются уведомления о вставленных и вынутых разъёмах.

Сколько мне ещё надо было ждать этого в пульсе? Год? Два? Десять? Проще потратить один вечер и принести пользу себе и другим, чем бессмысленно ждать.

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

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

chg ★★★★★
()

Программа состоит из 3 демонов

Мда...

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

смущает необходимость 3х! демонов.

Это типа Unix-way. Один демон предоставляет события, другие их по-разному обрабатывают. Кому нужны только уведомления, поставит 2 демона. Кому нужна только автопауза, поставит тоже 2 демона. Кому нужна вся функциональность, поставит 3 демона.

В идеале, как-нибудь передавать этот эвент иксам, типа нажата/отпущена кнопка.

Иксы тоже читают event-девайсы, например, те, которые соответствуют ACPI-кнопкам выключения, ждущего режима и т.п. Почему они не обрабатывают разъёмы, непонятно. Для этого надо патчить иксы.

Мне кажется архитектурно, это было бы правильнее

Но тогда появляется зависимость от иксов. Т.е. это перестанет работать, если нет иксов, а D-Bus можно запустить и без иксов. Если кто-то сидит только в консоли, слушает музыку через mpd и mpc и хочет, чтобы музыка ставилась на паузу при вынимании наушников, то ему больше подойдёт решение с dbus, а не с иксами.

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

В принципе, это более хорошее решение, но вот только смущает необходимость 3х! демонов.

Ну так по Прэтчетту же для принятия решения нужно не меньше трёх аудиторов реальности :)

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

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

Это Unix-way. Эти 3 демона выполняют разные задачи, не связанные непосредственно, поэтому и выполнены отдельными программами. Тот, кому не нужна часть функциональности (например, уведомления), не будет у себя выполнять лишний код.

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

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

ждем PKGBUILD'ов... Хотя мне оно не нужно на ноуте - колоночки и так громко поют, а наушниками не пользуюсь... Но все равно полезная штука.

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

amix, minakov

Залил PKGBUILD'ы на гитхаб. Работоспособность не проверял, т.к. нет арча, поэтому если что, пишите, исправлю. Если работают, залью в AUR.

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

Тестировать не буду, но за заботу спасибо!

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

Клиентов может быть много, если залогинено несколько пользователей/

Прошли уже те времена когда компьютеры были большими и дорогими, сейчас в каждой семье на каждого члена минимум один свой персональный комп и/или бук, не считая смартфонов и планшетов, а вы всё никак не вылезете из пещеры и несёте какую-то ахинею про нескольких залогиненых пользователей!

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

В AUR еще не появилось?

AUR лежит почему-то у меня, хотя isup.me говорит, что он работает. PKGBUILD'ы выложил на гитхаб, протестируйте их, и если работают, попробую выложить в AUR.

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

Годно, помню пару раз ночью случайно выдергивал наушники, а потом судорожно пытался их назад вставить под ор из динамиков :)

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

Годно, помню пару раз ночью случайно выдергивал наушники, а потом судорожно пытался их назад вставить под ор из динамиков :)

соседи подумали - ну наконец то девушку завел ))

anonymous
()

приостанавливать воспроизведение музыки при вынимании наушников

Вот это реально полезная вещь!

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

В винде такое есть, теперь и в моей любимой системе тоже будет!

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

Ну так по Прэтчетту же для принятия решения нужно не меньше трёх аудиторов реальности :)

А ещё есть принцип 2 из 3-х

argin ★★★★★
()

таки годная вещь, да.

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

Программа легковесная, жрёт 600 килобайт, 2500 килобайт, 2500 килобайт

Итого пять с половиной мегабайт, чтобы отследить размыкание контактов? Я просто в шоке.

anonymous
()

Полезная штука, спасибо. Из того, чего сразу не хватает — опциональное снятие с паузы, когда наушники вставлены назад. И ещё, как мне показалось, на моём буке демон не реагирует на джек во втором выходе. Дома протестирую ещё раз, чтобы убедиться.

the_one
()

uname -a
Linux i 2.6.38-11-generic #50-Ubuntu SMP Mon Sep 12 21:18:14 UTC 2011 i686 athlon i386 GNU/Linux

cat /boot/config-2.6.38-11-generic | grep CONFIG_SND_HDA_INPUT_JACK
CONFIG_SND_HDA_INPUT_JACK=y

sudo /etc/init.d/jacklistener start
* Starting jack listener daemon jacklistener [ OK ]

/etc/init.d/jacklistener status
* jacklistener is not running

/usr/sbin/jacklistenerd
Usage: /usr/lib/jacklistener/jacklistenerd <event device files>

В чём косяк?

alexandr7
()

Автору респект, настолько Unix-wayных программ я сразу и не вспомню.

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

Ага, а ещё

 whereis mpd
mpd: /usr/ports/lang/mpd
- там правда какой-то язык.

А я честно говоря не понял, зачем оно надо вообще на десктопе? Наушники из него редко выдергиваются, а если и выдергиваются, то только чтоб переключить музыку на колонки.

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

Из того, чего сразу не хватает — опциональное снятие с паузы, когда наушники вставлены назад.

Это легко сделать, но надо придумать, при каких условиях оно будет сниматься с паузы, если оно должно быть опциональным. Выбрасывать окошко с вопросом мне кажется не очень красивым решением — это всё равно, что нажать на кнопку в плеере. Другого я не придумал.

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

Что за второй выход? Как было установлено, что демон не реагирует? Выложите выхлоп команды:

for file in /sys/class/input/event*/device/phys; do echo «$file»; cat «$file»; done

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

Хотелось бы в линуксе иметь такую штуку как на венде у рилтека сделано, там при втыкании чего либо в звукачку( причем в любой разъем) появляется окошко с вопросом «а что это в меня воткнули и как использовать?» Т.е. интерактивную настройку устройств звуковых.

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

В чём косяк?

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

for file in /sys/class/input/event*/device/phys; do echo «$file»; cat «$file»; done

Возможно, ALSA не поддерживает эту функцию на вашей аудиокарте. Покажите также выхлоп:

lspci | grep Audio

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

for file in /sys/class/input/event*/device/phys; do echo «$file»; cat «$file»; done

/sys/class/input/event0/device/phys

PNP0C0C/button/input0

/sys/class/input/event1/device/phys

LNXPWRBN/button/input0

/sys/class/input/event2/device/phys

isa0060/serio0/input0

/sys/class/input/event3/device/phys

isa0060/serio1/input0

lspci | grep Audio

00:04.0 Multimedia audio controller: nVidia Corporation CK804 AC'97 Audio Controller (rev a2)

alexandr7
()

На С

Нужно. Много ресурсов не сожрёт, и профит есть. :)

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

Хотелось бы в линуксе иметь такую штуку как на венде у рилтека сделано, там при втыкании чего либо в звукачку( причем в любой разъем) появляется окошко с вопросом «а что это в меня воткнули и как использовать?» Т.е. интерактивную настройку устройств звуковых.

Я видел это окошко — у меня оно работало некорректно. Т.е. если я воткну микрофон в разъём наушников, он всё равно не работал как микрофон, независимо от настроек в этом окошке. Значит, моя аудиокарта не поддерживает переназначение разъёмов и если бы я начал это делать, у меня бы не было возможности протестировать работоспособность.

Вроде бы, возможность переназначения выходов есть в pulseaudio через pactl set-card-profile. Нужно сделать интерфейс к этому, если его ещё нет, и демона, вызывающего произвольные команды при появлении событий от jacklistener'а. Запишу это в TODO.

Важно следующее: нужный интерфейс у вас уже есть, и его нужно только запустить, или же интерфейса для управления тоже нет?

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

Да, к сожалению, здесь только ACPI-кнопки, клавиатура и мышь PS/2. Если в ядре включена опция CONFIG_SND_HDA_INPUT_JACK и не работает, то поддержки отслеживания разъёмов на вашей аудиокарте нет в ALSA. В таком случае, если подобная функциональность есть в других ОС, надо отправить багрепорт разработчикам ALSA, чтобы они реализовали это в драйвере, и тогда отслеживание разъёмов заработает.

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

Прошли уже те времена когда компьютеры были большими и дорогими, сейчас в каждой семье на каждого члена минимум один свой персональный комп и/или бук, не считая смартфонов и планшетов, а вы всё никак не вылезете из пещеры и несёте какую-то ахинею про нескольких залогиненых пользователей!

чушь и дурь несусветные. лучше иметь один сощный 12 ядерный комп, чем три четырехядерника.

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

Умеет.

Сам по себе не умеет, но есть ear candy.

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

Вроде бы, возможность переназначения выходов есть в pulseaudio через pactl set-card-profile

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

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

лучше иметь один сощный 12 ядерный комп, чем три четырехядерника.

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

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

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

OK, я попробую заняться этим на досуге. Для pulseaudio, кстати, были и графические утилиты для настройки. Они этого точно не умеют?

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

опять D-BUS... ну ппц же =(

Вы так говорите, как будто это что-то плохое.

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