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)
Ответ на: комментарий от gentoo_root

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

Пакеты собираются по PKGBUILD'ам, только надо поправить имена, потому что в pkgname они с -git, а в depends без.

Непосредственно по работе программ. jacklistenerd отрабатывает, список устройств выводит. jacknotifierd корректно уведомляет, когда подключены/отключены наушники. musicpaused пишет, что плеер поставлен на паузу, но пауза в плеере не срабатывает. Попробовал с упомянутым выше vlc.

bloodredfrog ★★
()

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

А в чём смысл держать три компонента в разных репозиториях, если по сути компоненты используются в связке и выполняют одну (с точки зрения пользователя) функцию?

i-rinat ★★★★★
()

Интересная программа. Автору спасибо

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

Пакеты собираются по PKGBUILD'ам, только надо поправить имена, потому что в pkgname они с -git, а в depends без.

Точно, спасибо, сейчас поправлю provides.

musicpaused пишет, что плеер поставлен на паузу, но пауза в плеере не срабатывает. Попробовал с упомянутым выше vlc.

Воспроизвёл у себя этот баг, буду исправлять.

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

Сглупил. Всё работает.

o_O А у меня получилось, чтобы не работало…

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

gentoo_root

o_O А у меня получилось, чтобы не работало…

А, чёрт, я тоже протупил — не запустил демон.

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

А, чёрт, я тоже протупил — не запустил демон.

А я перепутал демонов и запустил musicpaused от рута. :)

Спасибо за труды. Штука нужная.

bloodredfrog ★★
()

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

Дальше не читал.

Это какой-то Windows way, запихать как можно больше ненужных демонов в систему!

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

автор, твоя софтина не умеет в дистрибутивы, где есть lib64 >_< аргх!

В чём это проявляется? Сейчас попробую собрать на 64-битной федоре.

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

Сейчас попробую собрать на 64-битной федоре.

Чёрт, не попробую — VPS-ка сегодня истекла. По исправить всё равно попытаюсь, хотя не вижу причин, чтобы оно не работало.

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

А без dbus слабо?

anonymous
()

Отличное решение, спасибо автору. Хейтеров, не родивших ни одного востребонового проекта не слушай.

Davyd ★★
()

Хм, чего-то я не понимаю, в чём смысл? Комп - вещь более-менее стационарная. Соответственно, если сидишь всё время в наушниках - зачем их вообще вынимать из разъёма? (из ушей-то понятно) А если переключаешься на колонки - то зачем останавливать музыку? :) Т.е. лично для себя применения не вижу, но раз кому-то надо, пусть будет...

vitalif ★★★★★
()

Вот это новость! Вот это зашибись! Побежал срочно ставить

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

А если переключаешься на колонки…

Если выдёргиваются наушники.

bloodredfrog ★★
()

По хорошему тут за глаза бы хватило 1 (одного) root-демона, который бы рубил громкость при размыкании разъёма. И работало бы сразу во всех плеерах.

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

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

вы знаете другой стандартизированный метод IPC под *nix-системами?

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

урезание возможностей - вот твой путь, да? К резиновой женщине семимильными шагами? Ненуачо - «Прошли уже те времена когда они были большими и дорогими, сейчас в каждой семье на каждого члена минимум...» ну и дальше по тексту

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

в том, что у тебя /usr/lib захардкоден >_<

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

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

libexec есть ещё в слаке, и ваще такие вещи должны управляться configure

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

в том, что у тебя /usr/lib захардкоден >_<

Вообще, я когда-нибудь configure-скрипт напишу или на autoconf переведу.

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

По хорошему тут за глаза бы хватило 1 (одного) root-демона, который бы рубил громкость при размыкании разъёма. И работало бы сразу во всех плеерах.

Это и pulseaudio умеет, если выставить на динамиках громкость в 0. Но музыка-то играть продолжает, а это нехорошо.

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

Хм, чего-то я не понимаю, в чём смысл? Комп - вещь более-менее стационарная. Соответственно, если сидишь всё время в наушниках - зачем их вообще вынимать из разъёма?

Я слушаю музыку на нетбуке и iPod'е через одни наушники. И чтобы не жмакать руками на паузу, можно просто вынуть наушники из одного устройства и вставить в другое. Или же просто закончил слушать — вынул наушники, и не надо вручную останавливать.

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

Сие хорошо смотрелось бы внутри hal. Но, видимо, плодить демон на каждый чих очень юниксвейно.

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

Все-таки снятие с паузы при втыкании оченно нужно. Заранее спасибо.

Я написал ещё один демон. Он позволяет выполнять собственные команды при любых событиях от jacklistener. Он может служить альтернативой musicpaused и jacknotifier, и его можно будет настроить на снятие паузы при втыкании.

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

Все-таки снятие с паузы при втыкании оченно нужно. Заранее спасибо.

Я написал ещё один демон. Он позволяет выполнять собственные команды при любых событиях от jacklistener. Он может служить альтернативой musicpaused и jacknotifier, и его можно будет настроить на снятие паузы при втыкании.

Вот он: https://github.com/gentoo-root/jackeventcmd

Настройки по умолчанию обеспечивают почти ту же функциональность, что и musicpaused с jacknotifier вместе, но реализованы shell-командами. Для редактирования настроек надо скопировать /usr/share/config/jackeventcmd в ~/.config/ и редактировать файл там. Если раскомментировать последнюю строку, то будет снятие с паузы при втыкании наушников.

Недостаток также есть: при частом втыкании-вытыкании разъёмов уведомления не исчезают моментально, как это происходит с jacknotifier, потому что здесь используется notify-send, который этого не умеет. Но ничего не мешает удалить ненужные строки в конфиге jackeventcmd и заюзать его вместе с jacknotifier.

Вообще, рекомендую использовать jackeventcmd как дополнение к musicpaused и jacknotifier в случаях, когда их функциональности недостаточно. В данном случае это последняя строка дефолтного конфига (закомментированная).

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

А оно умеет на DEVICE_STATE в chan_{alsa|oss|console}.so в asterisk влиять?

Если есть консольная команда, которой можно влиять на этот DEVICE_STATE, то её можно прописать в конфиг jackeventcmd, запустить его и jacklistener, тогда будет работать.

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

Поддерживаю! Годная штуковина, а кто крчит, что, мол, фигня — то из зависти, что они подобного не могут! ;)

anonymous
()

полезная функция, жду в репозиториях!

jekader ★★★★★
()

1. Где тег «курсач на ЛОРе»?
2. Вконтактик под фаерфоксом поди не поддерживает этот MPRIS.
3. Это, надо думать, работает только на ноутах, ведь в случае десктопов наушники обычно вставляют в колонки, которые, конечно, не будут слать в ядро никаких ивентов.
4. Это, надо думать, не работает и с внешними usb-звукокарточками, которые тоже не будуть слать в ядро никаких ивентов (?).
5. Поделка, очевидно, срабатывает не мгновено, и пара звуков успевает пролететь в активизировавшиеся из-за вынимания наушников ноутовские динамики.

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

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

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

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

Респект! Хотел фичу, которой не было, взял и запилил сам. Однозначно респект!

DELIRIUM ☆☆☆☆☆
()

годная вещь. Попробую. Спасибо автору.

pyometra ★★★★★
()

Интересно, оно вообще кому-нибудь кроме ТС нужно? Можно было бы ещё понять, если бы оно работало наоборот. Втыкаешь наушники - плеер останавливается, вытыкаешь наушники - плеер продолжает играть.

dmitry_malikov ★★
()

Автор, в чём проблема?

$ make
gcc -x c -O3 -Wall -fomit-frame-pointer `pkg-config --cflags dbus-1 libnotify` -c notify.c -o notify.o
notify.c: В функции ‘jn_notify_send’:
notify.c:37:3: ошибка: слишком мало аргументов в вызове функции ‘notify_notification_new’
/usr/include/libnotify/notification.h:79:21: замечание: declared here
make: *** [notify.o] Ошибка 1

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

Пакеты собираются по PKGBUILD'ам, только надо поправить имена, потому что в pkgname они с -git, а в depends без.

Точно, спасибо, сейчас поправлю provides.

На данный момент musicpaused хочет jacklistener, но у того в provides ничего не указано, поэтому оно jacklistener-git.

Надо будет еще скрипт в /etc/rc.d добавить...

И, кстати, AUR поднялся.

А jacklistenerd, увы, не запустился — видимо, та же проблема, что и выше в каментах:

$ for file in /sys/class/input/event*/device/phys; do echo «$file»; cat «$file»; done /sys/class/input/event0/device/phys isa0060/serio0/input0 /sys/class/input/event10/device/phys LNXVIDEO/video/input0 /sys/class/input/event1/device/phys usb-0000:00:1d.0-2/input0 /sys/class/input/event2/device/phys usb-0000:00:1d.0-2/input1 /sys/class/input/event3/device/phys PNP0C0E/button/input0 /sys/class/input/event4/device/phys PNP0C0D/button/input0 /sys/class/input/event5/device/phys LNXPWRBN/button/input0 /sys/class/input/event6/device/phys isa0061/input0 /sys/class/input/event7/device/phys card0/codec#0/beep0 /sys/class/input/event8/device/phys isa0060/serio4/input0 /sys/class/input/event9/device/phys wmi/input0

$ lspci | grep Audio 00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)

В любом случае, спасибо =)

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

(Сорри, не то форматирование выбрал, всё съехало... см. исходники HTML-документа, там брейки есть)

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

Я слушаю музыку на нетбуке и iPod'е через одни наушники.

Ну да, тогда понятно.

vitalif ★★★★★
()

Вместо musicpaused можно использовать jackeventcmd, запилил для deadbeef, сижу довольный. Штука действительно удобная, для мобилы наподобие использую, самописную.

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