Есть ли причудливый способ заставить OSD уведомлений о громкости работать с pulseaudio и ALSA? Прямо сейчас стандартные настольные работают только с pulseaudio для меня. Как насчет вертикального OSD, которое я могу использовать для замены или вызова из командной строки, чтобы графически сообщать об изменениях в произвольных процентах, в виде полосы, которая перемещается вверх и вниз?
Причина, по которой он мне нужен для работы как с ALSA, так и с pulseaudio, заключается в том, что я использую приложение WINE, которое не очень хорошо работает с импульсами, поэтому я отключаю импульс перед запуском приложения Windows, чтобы использовать ALSA без дополнительного уровня абстракции. Когда я понял, что клавиши регулировки громкости на моей клавиатуре не работают без импульса, я написал несколько сценариев bash, которые я вызываю с помощью Compiz или Openbox (настроенных через CCSM и lxde-rc.xml соответственно), чтобы перехватить сигнал выхода из pulseaudio --check
и затем отрегулируйте громкость соответственно:
vol_step_up
#!/bin/bash
pulseaudio --check
if [ $? -eq 0 ] ; then
pactl set-sink-volume 0 -- +3db
else
amixer -c0 set Master playback 3+
fi
vol_step_down
#!/bin/bash
pulseaudio --check
if [ $? -eq 0 ] ; then
pactl set-sink-volume 0 -- -3db
else
amixer -c0 set Master playback 3-
fi
Сценарии отлично работают и отображаются на кнопки просто отлично, но у меня больше нет возможности видеть визуальную обратную связь - даже с импульсами, так как я перехватываю события кнопок (XF86AudioLowerVolume и т. Д.). Очевидно, я мог бы просто сопоставить клавиши регулировки громкости ALSA с чем-то другим, но нет смысла дублировать сочетания клавиш.
Я нашел регулятор громкости python, который я могу вызвать в приведенных выше скриптах:
https://github.com/fishman/utils/blob/master/pvol.py
pvol.py -s
показывает текущий уровень громкости на экране для ALSA и pulseaudio, но он ужасно крошечный по сравнению с OSD гнома, который я использовал, и он не вертикальный (столбец сверху, старый OSD снизу):
Итак, я сделал это больше и шлепнул вокруг:
Но, даже с переключением ориентации на вертикальную, синяя тема GTK по умолчанию не такая гладкая, как VLC (см. Ниже).
Многое из того, что я нашел при поиске реализаций OSD, - это сообщения о командах notify-send, в которых отсутствует вся концепция индикатора выполнения. В противном случае это в основном горизонтальные столбцы (и большое количество подсчитываемых заполнителей в скриптах bash). На самом деле все, что мне нужно сделать, это вызвать amix & pactl, так что было бы замечательно что-то простое, например, индикатор выполнения gtk в pvol.py - просто не такой синий и не прямо в середине экрана.
VLC имеет хороший пример того, что я имею в виду, когда вы прокручиваете колесо мыши в полноэкранном режиме:
Это намного менее мешает, чем обычные окна, которые находятся в центре экрана:
Вся аналогия с горизонтальным слайдером никогда не имела для меня большого смысла, кроме панорамирования звука между левой и правой колонками.
В любом случае, как получаются уведомления рабочего стола по умолчанию (особенно LXDE)? Я вижу много сообщений о настройке событий нажатия клавиш, но не много о том, какие сценарии запускают эти события. Какие еще варианты есть в вертикально-модном отделе?
Кроме того, есть ли какой-нибудь пакет, который я должен удалить, чтобы предотвратить возникновение конфликтов между событиями, которые я обрабатываю с помощью сценариев и команд compiz или openbox?
Обновление: чтобы выяснить, какое OSD я сейчас использую, я не сразу изменил способ обработки кнопки отключения звука. Если убить xfce4-notifyd, а затем нажать кнопку отключения звука, будет запущен новый процесс xfce4-notifyd, поэтому я предположил, что значок большого динамика произошел из-за чего-то вроде xfce4-Volumed, но на самом деле у меня не установлен этот пакет ... Ах, ха! Убийство gnome-settings-daemon останавливает большое OSD в центре экрана.
Ответы:
Хорошо, рискуя ответить на мой собственный вопрос, я придумал немного взломанную версию Pyqt pvol по ссылке в вопросе выше. Если ничего другого, возможно, кто-то еще может улучшить мой код. В конце концов, я планирую либо избавиться от частей в скрипте ниже, которые остаются неиспользованными, либо убрать скрипты bash из уравнения и сделать так, чтобы один скрипт pyqt обрабатывал все события кнопки. Прямо сейчас экранное меню истекает с постоянной скоростью с первого нажатия кнопки вместо того, чтобы оставаться включенным в течение фиксированного периода времени после последнего нажатия кнопки.
Просто скопируйте, вставьте и сохраните файлы (с именами, выделенными жирным шрифтом), поместите их все в один каталог, установите исполняемые биты и измените системные вызовы в скрипте pyqt в соответствии с тем, где вы их сохраните, или поместите их все в каталог, который находится на вашем пути. Затем сопоставьте сценарии оболочки с командами Compiz, ярлыками Openbox или чем-то подобным и измените сценарий pyqt, если вы не используете кнопки громкости на мультимедийной клавиатуре.
Примечание: имя класса Qvol было рабочим названием, и я не стал его менять. Также обратите внимание, что кнопка отключения звука остается необработанной - это всего лишь прототип для выражения возможного пути выполнения запрошенных функций, и в настоящее время он не связан с каким-либо размещенным проектом или стандартной моделью разработки. Любые существенные разработки, полученные из приведенного ниже кода, вероятно, должны принадлежать Sourceforge, GitHub или веб-сайту проекта. Тем не менее, не стесняйтесь редактировать этот ответ или предложить существующий проект, который позволяет схожи по функциям и дизайну.
vol_step_down
vol_step_up
pqvol
источник