From 26440543601ed7e0a172f61da4154350e723639c Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Sun, 10 May 2026 08:57:05 +0200 Subject: [PATCH] Fix handle dbus session address on desktop --- dotfiles/desktop/.bashrc.d/14-dbus-session.sh | 39 +++++++++++++++++++ scripts/bootstrap_mail.sh | 16 +++++++- 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 dotfiles/desktop/.bashrc.d/14-dbus-session.sh diff --git a/dotfiles/desktop/.bashrc.d/14-dbus-session.sh b/dotfiles/desktop/.bashrc.d/14-dbus-session.sh new file mode 100644 index 0000000..30e8a7f --- /dev/null +++ b/dotfiles/desktop/.bashrc.d/14-dbus-session.sh @@ -0,0 +1,39 @@ +# Validate DBUS_SESSION_BUS_ADDRESS: a stale value (e.g. inherited from a +# dead X session) makes secret-tool, mbsync, msmtp fail with +# "Could not connect: No such file or directory". +# Fall back to ~/.dbus-session-bus-address (written by .xinitrc) or +# /run/user/$UID/bus, mirroring scripts/bootstrap_mail.sh. + +_dbus_addr_socket_path() { + printf '%s' "${1#unix:path=}" | sed 's/,.*//' +} + +_dbus_addr_is_live() { + case "$1" in + unix:path=*) + [ -S "$(_dbus_addr_socket_path "$1")" ] + ;; + unix:abstract=*) + return 0 + ;; + *) + return 1 + ;; + esac +} + +if ! _dbus_addr_is_live "${DBUS_SESSION_BUS_ADDRESS:-}"; then + unset DBUS_SESSION_BUS_ADDRESS + if [ -f "$HOME/.dbus-session-bus-address" ]; then + _saved=$(tr -d '\n' <"$HOME/.dbus-session-bus-address" 2>/dev/null) + if [ -n "$_saved" ] && _dbus_addr_is_live "$_saved"; then + export DBUS_SESSION_BUS_ADDRESS="$_saved" + fi + unset _saved + fi + if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ] && [ -S "/run/user/$(id -u)/bus" ]; then + export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus" + fi +fi + +unset -f _dbus_addr_socket_path _dbus_addr_is_live diff --git a/scripts/bootstrap_mail.sh b/scripts/bootstrap_mail.sh index 990abfd..88c5397 100755 --- a/scripts/bootstrap_mail.sh +++ b/scripts/bootstrap_mail.sh @@ -198,8 +198,20 @@ parse_secret_lookup_args() { resolve_dbus_session_bus_address() { if [ -n "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then - printf '%s\n' "$DBUS_SESSION_BUS_ADDRESS" - return 0 + case "$DBUS_SESSION_BUS_ADDRESS" in + unix:path=*) + _path=${DBUS_SESSION_BUS_ADDRESS#unix:path=} + _path=${_path%%,*} + if [ -S "$_path" ]; then + printf '%s\n' "$DBUS_SESSION_BUS_ADDRESS" + return 0 + fi + ;; + unix:abstract=*) + printf '%s\n' "$DBUS_SESSION_BUS_ADDRESS" + return 0 + ;; + esac fi if [ -f "$HOME/.dbus-session-bus-address" ]; then