LINUX.ORG.RU

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

 , ,


0

2

Использую Debian 12 KDE, установлен эквалайзер, который включается командой:

/usr/local/bin/pulseaudio-equalizer enable

Хочу, чтобы он включался сам, автоматически. Моя попытка следующая, создал файл /etc/udev/rules.d/99-headphones.rules содержащий:

ACTION=="add", SUBSYSTEM=="sound", ATTRS{subsystem}=="sound", ATTRS{type}=="headphones", RUN+="/usr/bin/sleep 5 && /usr/local/bin/pulseaudio-equalizer enable"

Гипотетически спустя 5 сек. после подключения наушников должен врубится эквалайзер, но этого почему-то не происходит.

Сама команда на включение 100% верна, если руками в консоли запускать, все норм. Может кто помочь?

В логах при подключение наушников возникают следующие надписи, но они мне абсолютно ничего не говорят:

июл 23 21:00:05 huawei mtp-probe[20798]: checking bus 1, device 8: "/sys/devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2"
июл 23 21:00:05 huawei mtp-probe[20798]: bus: 1, device: 8 was not an MTP device
июл 23 21:00:05 huawei (udev-worker)[20813]: controlC2: Process '/usr/sbin/alsactl -E HOME=/run/alsa -E XDG_RUNTIME_DIR=/run/alsa/runtime restore 2' failed with exit code 99.
июл 23 21:00:05 huawei mtp-probe[20822]: checking bus 1, device 8: "/sys/devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2"
июл 23 21:00:05 huawei mtp-probe[20822]: bus: 1, device: 8 was not an MTP device



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

Сама команда на включение 100% верна, если руками в консоли запускать, все норм.

Это уже что-то незыблемое и постоянное на ЛОРе, упоминать udev в контексте «если руками в консоли запускать, все норм». )
Открытие приложения при подключении зарядки к ноутбуку (комментарий)

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

При подключении наушников у меня возникает следующее событие:

UDEV  [9799.699457] change   /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.0/sound/card2 (sound)
ACTION=change
DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.0/sound/card2
SUBSYSTEM=sound
SYNTH_UUID=0
SEQNUM=4013
USEC_INITIALIZED=9799592287
ID_PATH=pci-0000:03:00.3-usb-0:2:1.0
ID_PATH_TAG=pci-0000_03_00_3-usb-0_2_1_0
ID_FOR_SEAT=sound-pci-0000_03_00_3-usb-0_2_1_0
SOUND_INITIALIZED=1
ID_VENDOR_FROM_DATABASE=Razer USA, Ltd
ID_MODEL_FROM_DATABASE=RC30-026902, Gaming Headset [Nari Essential, Wireless, Receiver]
ID_BUS=usb
ID_MODEL=Razer_Nari_Essential
ID_MODEL_ENC=Razer\x20Nari\x20Essential
ID_MODEL_ID=051e
ID_SERIAL=Razer_Razer_Nari_Essential
ID_VENDOR=Razer
ID_VENDOR_ENC=Razer
ID_VENDOR_ID=1532
ID_REVISION=0100
ID_TYPE=audio
ID_USB_MODEL=Razer_Nari_Essential
ID_USB_MODEL_ENC=Razer\x20Nari\x20Essential
ID_USB_MODEL_ID=051e
ID_USB_SERIAL=Razer_Razer_Nari_Essential
ID_USB_VENDOR=Razer
ID_USB_VENDOR_ENC=Razer
ID_USB_VENDOR_ID=1532
ID_USB_REVISION=0100
ID_USB_TYPE=audio
ID_USB_INTERFACES=:010100:010200:030000:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=snd-usb-audio
ID_ID=usb-Razer_Razer_Nari_Essential-00
SOUND_FORM_FACTOR=headset
TAGS=:seat:
CURRENT_TAGS=:seat:

Написал правило, которое при возникновении данного события выполняет команду на включение:

ACTION=="change", SUBSYSTEM=="sound", ENV{ID_USB_MODEL}=="Razer_Nari_Essential", RUN+="''/usr/local/bin/pulseaudio-equalizer enable''"

Вроде все верно сформировал, атрибуты правильные, скобки тройные, но не работает зараза(

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

Я свой коммент написал к тому, что ты уже не первый с попыткой повесить скрипт на событие посредством udev. Я видел несколько подобных тем здесь и никому не помогли. Даже написал тогда, что похоже на ЛОРе утеряны компетенции по udev: 🙂

вся мощь ЛОРа не способна помочь. Возможно, systemd настолько вытеснил все остальное, что спецов по udev просто не осталось.
Скрипт для автоматического отключения турбобуста (комментарий)

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

Я уже дал понятную наводку. В *nix (и не только) есть пользователис разными правами и окружением. Пшульсаудио ввполняется от твоего юзера, а udev (точно не знаю) от рута или специального системного пользователя. И выполняет твоё «включение эквалайзера» не для тебя.

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

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

nadim
() автор топика

Создать файл /etc/acpi/jack-connected.sh содержания

sudo -u <логин> XDG_RUNTIME_DIR=/run/user/`id -u <логин>` /usr/local/bin/pulseaudio-equalizer enable
Дать команду
chmod 755 /etc/acpi/jack-connected.sh
Создать файл
$ cat /etc/acpi/events/jack-connected 
event=jack/headphone HEADPHONE plug
action=/etc/acpi/jack-connected.sh
Перезапустить acpid
sudo systemctl restart acpid.service

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

У меня не jack, а USB наушники, точнее это USB ресивер (радиомодуль), который вроде как вообще, как отдельная звуковая плата определяется. В этом случае, какая команда должна выглядеть?

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

Посмотри статью, там симбиоз udev и systemd:

Поскольку прямой запуск скрипта из пользовательского правила udev не работает, мне пришлось создать новую службу systemd…

p.s. Наверно можно реализовать только с udev, но правило будет слишком мудреным, имхо, да и кто бы такой умный подсказал как… )

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

В этом случае не знаю, но можно попробовать мою идею применить к своему способу. Вместо создания /etc/acpi/events/jack-connected и перезапуска acpid, поменять в своем правиле

ACTION=="add", SUBSYSTEM=="sound", ATTRS{subsystem}=="sound", ATTRS{type}=="headphones", RUN+="/usr/bin/bash /etc/acpi/jack-connected.sh"
Еще можно
sudo acpi_listen
и вставить наушники и посмотреть, пишется ли какое-то событие, хотя вряд ли будет.

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

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

Это кстати сторонний эквалайзер из гитахаба

Это же неофициально111 andytux на вас нет.

nadim пишет:

при включении он сам определяет активное аудио устройство и только его проксирует

А почему бы его все время тогда не держать включенным?

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

Не получится) Он создаёт новое аудиустойство куда перенаправляет поток с последнего активного аудиоустройства уже в обработанном эквализированном виде.

При подключении нового аудиустройства все слетает и надо врубать заново.

nadim
() автор топика
Последнее исправление: nadim (всего исправлений: 3)
Ответ на: комментарий от damix9

То что я в одном предложении предложил Вам испробовать поколупаться в венде и просарказмировал над её божественностью, вовсе не означает что я записал Вас в фанаты сабжа или утверждал что-либо вообще о Вас.

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

Твой вариант сложноват оказался, да и почему-то эквалайзер этот через sudo -u с указанием пользователя (даже руками через консоль) не стартует.

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

udevadm monitor --udev --subsystem-match=usb

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

Вот это уже корректно работает:

#!/bin/bash

udevadm monitor --udev --subsystem-match=usb | while read line
do
  if echo "$line" | grep -q "bind     /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2 (usb)"; then
    pulseaudio-equalizer enable
  fi
done

Печально лишь, что конкретные наушники надо прописывать руками, но ничего не поделаешь. Главное, что работает =)

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

эквалайзер этот через sudo -u с указанием пользователя (даже руками через консоль) не стартует

А что пишет?

sudo su
sudo -u <логин> XDG_RUNTIME_DIR=/run/user/`id -u <логин>` /usr/local/bin/pulseaudio-equalizer enable

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

Шайтанма… а вот так работает) Блин я столько мучался пытаясь от своего юзера запустить, а тут вон оно что. Надо попробовать теперь через правила udev, я выяснил что там все run команду от рута стартует, автоввод пароля не нужен. Чуть позже отпишусь.

nadim
() автор топика