LINUX.ORG.RU

PulseAudio и cron

 , ,


0

1

Пытаюсь из скрипта рулить настройками pulseaudio. Написал нечто подобное

#!/bin/bash
/usr/bin/pacmd set-sink-volume 0 0x800
Запускаю из командной строки - работает. Добавляю в кронтаб - вылетает с ошибкой «No PulseAudio daemon running, or not running as session daemon»

Вот здесь предлагали пихнуть в crontab содержимое env, не помогло. Тут - собрать велосипед из костылей и гнать запросы по сети через loopback, но так у меня отваливатся pavucontrol, который про сеть ничего не знает.

Есть мысли как бороться с Поттерингом этой проблемой?

★★★★

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

У тебя PA наверняка запущен от юзера как session instance. Конечно, pacmd, запускаемый от имени крона, никак не может увидеть PA (ему нужен адрес сессионной dbus шины, который есть только в environment у процессов, запускаемых внутри графической сессии).

Бескостыльного способа я не вижу. Разве что при старте сессии сохранять содержимое DBUS_SESSION_BUS_ADDRESS в файл и читать этот файл из скрипта (естественно, запуская pacmd от имени своего пользователя).

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

При чем здесь dbus? достаточно проинструктировать cron выполнять эту команду от твоего пользователя.

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

При том, что pacmd и прочие тулзы общаются с PA через dbus.

Это уже давно неверно. Они общаются по своему протоколу через сокет, положение которого зависит от того, используется systemd или нет. См. XDG_RUNTIME_DIR

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

Хм. Да, по ходу, ты прав. Myau, дбас действительно ни при чём, я ошибся.

Тогда, может быть, дело в том, что эта самая XDG_RUNTIME_DIR не задана? su и sudo её не устанавливают.

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

Fallback в стандарте описан как «специфичный для каждого приложения». Переменная выставляется, если используется systemd, и не выставляется, если используется ConsoleKit.

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

Но у ТС это почему-то не работает. Значит, она так или иначе задана, и нужно передать её из юзерской сессии в кроновское окружение.

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

Она строится алгоритмически. У меня uid = 1000, и поэтому XDG_RUNTIME_DIR=/run/user/1000. Предлагаю просто захардкодить.

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

Да, это понятно, но хардкодить — как-то вообще не комильфо.

Впрочем... Ну, наверное, всё же норм.

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

нахардкодил - заработало

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