pactl не зависит от D-Bus - это всего лишь один из различных методов, которые он может использовать для поиска управляющего сокета. Который теперь всегда находится в том же месте - $XDG_RUNTIME_DIR/pulse/native
(как в pulseaudio v3.0). Так что первоначальная жалоба просто не имеет смысла. Я уверен, что strace -e connect pactl info
это покажет, что ошибка «Отказано в соединении» происходит из-за попытки подключиться к самому pulseaudio, а не к D-Bus.
Одна из возможных причин: если strace показывает, что pactl пытается использовать
/var/run/pulse/native
вместо пути для пользователя, $ XDG_RUNTIME_DIR может быть не установлен. Вы можете установить его вручную (на/run/user/$UID
), однако, было бы лучше выяснить, почему он не устанавливается автоматически.Переменная $ XDG_RUNTIME_DIR устанавливается pam_systemd.so; убедитесь, что ваш
/etc/pam.d/sshd
конфигурационный файл в конечном итоге перечисляет этот модуль (иногда напрямую, но чаще, путем включения подконфигурации, такой какsystem-login
илиcommon-session
).
Тем не менее, когда вам нужно использовать другие программы через SSH - программу, которые делают зависеть от сеанса шины - есть три общих варианта:
Чтобы подключиться к «новой» шине пользователя:
Некоторые системы / дистрибутивы, возможно, уже перешли на модель «пользовательской шины», где вместо некоторого количества сессионных шин существует только одна для каждого UID. Его адрес -
unix:path=/run/user/$UID/bus
с помощью dbus-daemon илиkernel:path=/sys/fs/kdbus/$UID-user/bus
с помощью kdbus.Последние версии sd-bus, libdbus, gdbus будут автоматически пытаться использовать этот адрес, если не установлены ни $ DBUS_SESSION_BUS_ADDRESS, ни $ DISPLAY. Это делает модель «пользовательской шины» наиболее надежным ответом на ваш первый вопрос, так как все, что вам нужно знать, это ваш собственный UID. (Большинство подходов, использующих традиционную модель "сессионной шины", не могут быть надежными, поскольку их может быть любое количество, а не один ...)
Чтобы подключиться к «традиционной» сессионной шине:
Адрес шины сеанса обычно выбирается случайным образом, чтобы избежать конфликтов. Однако для различных целей (в первую очередь для функции «автозапуск шины») адрес сохраняется в
~/.dbus/session-bus/$MACHINE_ID-$DISPLAY
(прибл.).Таким образом, вы можете вручную установить $ DBUS_SESSION_BUS_ADDRESS, как и раньше, но вместо этого вы также можете установить $ DISPLAY, и программа найдет подходящую шину сеанса на основе дисплея X11.
Чтобы начать новый (выделенный) сеанс шины:
dbus-launch --exit-with-session /bin/bash