Fix setting $DBUS_SESSION_BUS_ADDRESS after Emacs has started

* doc/misc/dbus.texi (Alternative Buses): Explain using
$DBUS_SESSION_BUS_ADDRESS after Emacs has started.

* src/dbusbind.c (XD_DBUS_VALIDATE_BUS_ADDRESS): Use egetenv.
This commit is contained in:
Michael Albinus 2023-06-12 12:45:38 +02:00
parent bdb0bc2b4e
commit 1383efe01d
2 changed files with 19 additions and 3 deletions

View file

@ -1847,8 +1847,24 @@ This function establishes the connection to D-Bus @var{bus}.
corresponding bus. For the system and session buses, this function is corresponding bus. For the system and session buses, this function is
called when loading @file{dbus.el}, there is no need to call it again. called when loading @file{dbus.el}, there is no need to call it again.
The function returns the number of connections this Emacs session has If Emacs was invoked when there was no D-Bus session bus available
established to the @var{bus} under the same unique name yet, you can set the environment variable
@env{DBUS_SESSION_BUS_ADDRESS} once the session bus daemon is running
and offering the address. Calling @code{dbus-init-bus} initializes
the connection to the session bus.
@lisp
(setenv "DBUS_SESSION_BUS_ADDRESS" "unix:path=/run/user/1000/bus")
@result{} "unix:path=/run/user/1000/bus"
(dbus-init-bus :session)
@result{} 2
@end lisp
@code{dbus-init-bus} returns the number of connections this Emacs
session has established to the @var{bus} under the same unique name
(@pxref{dbus-get-unique-name}). It depends on the libraries Emacs is (@pxref{dbus-get-unique-name}). It depends on the libraries Emacs is
linked with, and on the environment Emacs is running. For example, if linked with, and on the environment Emacs is running. For example, if
Emacs is linked with the GTK+ toolkit, and it runs in a GTK+-aware Emacs is linked with the GTK+ toolkit, and it runs in a GTK+-aware

View file

@ -276,7 +276,7 @@ XD_OBJECT_TO_STRING (Lisp_Object object)
#define XD_DBUS_VALIDATE_BUS_ADDRESS(bus) \ #define XD_DBUS_VALIDATE_BUS_ADDRESS(bus) \
do { \ do { \
char const *session_bus_address = getenv ("DBUS_SESSION_BUS_ADDRESS"); \ char const *session_bus_address = egetenv ("DBUS_SESSION_BUS_ADDRESS"); \
if (STRINGP (bus)) \ if (STRINGP (bus)) \
{ \ { \
DBusAddressEntry **entries; \ DBusAddressEntry **entries; \