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

Отредактировано для добавления:Ваша программа пытается получить доступ к графическому рабочему столу пользователя (pi), однако сама выполняется systemd. То есть по умолчанию он будет работать как root, а не как пользователь pi. Более того, на момент запуска может даже не быть графического рабочего стола.

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

  • Запускать программу не через systemd, а когда авторизованный пользователь запускает графический рабочий стол. Поэтому нужно поставить запуск программы в файл ~/.xinitrcили ~/.xprofile. См. Arch Wiki по автозапуску
  • Добавьте строку User=piв службу systemd. Это решение, которое вы упомянули в комментарии к исходному сообщению
  • .
  • systemd можно настроить так, чтобы он выполнялся в пользовательском -режиме (, а не в системном режиме ), когда пользователь входит в систему. Таким образом вы можете запустить свою службу. См. Arch Wiki в systemd/User

Оригинальный ответ:

См. этот вопрос SO . В функции subprocess.Popen(.)есть параметр env=, который можно использовать.

В качестве альтернативы вы можете использовать функцию sh, которая заключается в том, что если вы назначаете переменную непосредственно перед вызовом, эта переменная устанавливается (только )для этого вызова:

myvar=world
# cannot use echo $myvar, because $myvar would be substituted before echo is launched
myvar=hello declare -x myvar 
echo $myvar

дает

declare -x myvar="hello"
world

Ссылка на соответствующую главу в спецификации POSIX

Так для вас:

subprocess.call("DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-goOEk5dZcK,‌​guid=9c1f14175e6be09‌​92b16e5155969b46c notify-send 'Battery full!'",s‌​hell=True)

Вызов, который вы упомянули в комментарии к вашему вопросу, не работает, так как приводит к следующему процессу

  • subprocess.Popen('export DBUS_SESSION_BUS_ADRESS=..., shell = True)

    • Запустить оболочку
    • Установите переменную окружения DBUS_SESSION_BUS_ADRESS=...для этой оболочки. и все вспомогательные -оболочки (вот что делает export).

      Что он делает НЕ:Установить переменную для всех оболочек, которые есть на машине!

    • Закройте оболочку. Теперь значение DBUS_SESSION_BUS_ADRESSснова потеряно.
  • subprocess.Popen(['notify-send',...], shell=True)
    • Запустить оболочку
    • Вызов exportпредыдущей оболочки здесь не имеет силы, потому что эти две оболочки совершенно не связаны
    • Запустите notify-sendкак в исходном вопросе

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

0
08.09.2019, 15:37
1 ответ

для ALSA и Raspberry Pi-https://github.com/pimoroni/pivumeter

на основании этого-http://laugeo.free.fr/ameter.html

1
28.01.2020, 02:39

Теги

Похожие вопросы