pactl ist nicht auf D-Bus angewiesen - es ist nur eine der verschiedenen Methoden, die es zur Lokalisierung der Steuerungsbuchse verwenden kann. Welches ist jetzt immer am selben Ort - $XDG_RUNTIME_DIR/pulse/native
(ab pulseaudio v3.0). Also macht die ursprüngliche Beschwerde einfach keinen Sinn. Ich bin mir sicher, dass strace -e connect pactl info
dies zeigen würde, dass der Fehler "Verbindung abgelehnt" auf den Versuch zurückzuführen ist, sich mit pulseaudio selbst zu verbinden, nicht mit dem D-Bus.
Eine mögliche Ursache: Wenn strace zeigt, dass pactl
/var/run/pulse/native
anstelle des benutzerspezifischen Pfads verwendet wird, wurde $ XDG_RUNTIME_DIR möglicherweise nicht festgelegt. Sie können es manuell einstellen (bis/run/user/$UID
), es ist jedoch besser herauszufinden, warum es nicht automatisch eingestellt wird.Die Variable $ XDG_RUNTIME_DIR wird von pam_systemd.so gesetzt. Stellen Sie sicher, dass Ihre
/etc/pam.d/sshd
Konfigurationsdatei dieses Modul schließlich auflistet (manchmal direkt, aber häufiger durch Hinzufügen einer Unterkonfiguration wiesystem-login
odercommon-session
).
Wenn Sie jedoch andere Programme über SSH verwenden müssen - Programme, die von einem Sitzungsbus abhängen - gibt es drei Möglichkeiten:
An den 'neuen' Benutzerbus anschließen:
Einige Systeme / Distros sind möglicherweise bereits zum "User Bus" -Modell übergegangen, wobei anstelle einer Anzahl von Sitzungsbussen nur einer für jede UID vorhanden ist. Seine Adresse lautet
unix:path=/run/user/$UID/bus
bei dbus-daemon oderkernel:path=/sys/fs/kdbus/$UID-user/bus
bei kdbus.Neueste Versionen von sd-bus, libdbus, gdbus versuchen diese Adresse automatisch, falls weder $ DBUS_SESSION_BUS_ADDRESS noch $ DISPLAY gesetzt sind. Damit ist das "User Bus" -Modell die zuverlässigste Antwort auf Ihre erste Frage, da Sie nur Ihre eigene UID kennen müssen. (Die meisten Ansätze, die ein herkömmliches "Sitzungsbus" -Modell verwenden, können nicht zuverlässig sein, da es eine beliebige Anzahl davon geben kann, nicht genau eine ...)
An einen "traditionellen" Sitzungsbus anschließen:
Die Sitzungsbusadresse wird normalerweise zufällig ausgewählt, um Konflikte zu vermeiden. Zu verschiedenen Zwecken (hauptsächlich für die Funktion "Bus Autolunch") wird die Adresse jedoch in
~/.dbus/session-bus/$MACHINE_ID-$DISPLAY
(ca.) gespeichert .Sie können also $ DBUS_SESSION_BUS_ADDRESS wie zuvor manuell festlegen. Stattdessen können Sie auch $ DISPLAY festlegen. Das Programm wird den passenden Sitzungsbus anhand der X11-Anzeige finden.
So starten Sie einen neuen (dedizierten) Sitzungsbus:
dbus-launch --exit-with-session /bin/bash