mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 15:39:58 +00:00
Fix handle dbus session address on desktop
This commit is contained in:
39
dotfiles/desktop/.bashrc.d/14-dbus-session.sh
Normal file
39
dotfiles/desktop/.bashrc.d/14-dbus-session.sh
Normal file
@@ -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
|
||||||
@@ -198,9 +198,21 @@ parse_secret_lookup_args() {
|
|||||||
|
|
||||||
resolve_dbus_session_bus_address() {
|
resolve_dbus_session_bus_address() {
|
||||||
if [ -n "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
|
if [ -n "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
|
||||||
|
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"
|
printf '%s\n' "$DBUS_SESSION_BUS_ADDRESS"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
;;
|
||||||
|
unix:abstract=*)
|
||||||
|
printf '%s\n' "$DBUS_SESSION_BUS_ADDRESS"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -f "$HOME/.dbus-session-bus-address" ]; then
|
if [ -f "$HOME/.dbus-session-bus-address" ]; then
|
||||||
saved_bus_address=$(tr -d '\n' <"$HOME/.dbus-session-bus-address")
|
saved_bus_address=$(tr -d '\n' <"$HOME/.dbus-session-bus-address")
|
||||||
|
|||||||
Reference in New Issue
Block a user