sway: factor env restoration into restore-wayland-env.sh, fix caffeine notify
caffeine.sh click was working (icon toggled, swayidle restarted) but the 'Caffeine ON/OFF' notification never appeared. Same root cause as the prior swayidle bug: waybar's on-click context strips WAYLAND_DISPLAY from the spawned script's env. notify-send writes to D-Bus (exit 0) but mako can't display because it has no Wayland socket to render on. Click appears to do nothing visually. Fix: extract the /proc/*/environ probe into a shared helper (restore-wayland-env.sh) and source it from both caffeine.sh AND start-swayidle.sh. Now any future on-click script in this repo can `. restore-wayland-env.sh` to inherit the right env. Verified on tadbit: - click 1 (caffeine ON): swayidle killed, flag set, 'Caffeine ON' notification appeared in mako - click 2 (caffeine OFF): swayidle restarted, flag cleared, 'Caffeine OFF' notification appeared in mako Both are visible in makoctl history now.
This commit is contained in:
parent
05e75bc41e
commit
d78ba4152b
3 changed files with 49 additions and 29 deletions
34
dot_config/sway/restore-wayland-env.sh
Executable file
34
dot_config/sway/restore-wayland-env.sh
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
# restore-wayland-env.sh — probe /proc for a running Wayland client and
|
||||
# inherit its WAYLAND_DISPLAY / DISPLAY / DBUS_SESSION_BUS_ADDRESS /
|
||||
# XDG_RUNTIME_DIR. Used by caffeine.sh and start-swayidle.sh so on-click
|
||||
# scripts run from waybar's context (which doesn't inherit the Sway env)
|
||||
# can still talk to the compositor.
|
||||
#
|
||||
# Why probe /proc? waybar's on-click handler forks the script in waybar's
|
||||
# own process context. That context has WAYLAND_DISPLAY set (waybar is a
|
||||
# Wayland client), but other Sway context (XDG_CURRENT_DESKTOP, sway IPC
|
||||
# socket, etc.) isn't passed to children. We need WAYLAND_DISPLAY for
|
||||
# swaymsg/grim/wl-copy/notify-send, so the env-restoration here covers the
|
||||
# "Wayland client tools" subset. Swaymsg-specific env (I3SOCK / SWAYSOCK)
|
||||
# isn't included because swaymsg falls back to discovery via the
|
||||
# /run/user/UID/sway-ipc.*.sock path.
|
||||
#
|
||||
# Idempotent: if WAYLAND_DISPLAY and DISPLAY are already set, does nothing.
|
||||
# Source-able: `source "$HOME/.config/sway/restore-wayland-env.sh"`.
|
||||
|
||||
if [[ -n "$WAYLAND_DISPLAY" || -n "$DISPLAY" ]]; then
|
||||
return 0 2>/dev/null || exit 0
|
||||
fi
|
||||
|
||||
# Find a running Wayland client. mako, swaybar, foot, wofi — anything
|
||||
# bound to wayland-N. We grab the first one with WAYLAND_DISPLAY set.
|
||||
for pid in /proc/[0-9]*; do
|
||||
[[ -r "$pid/environ" ]] || continue
|
||||
candidate=$(tr '\0' '\n' < "$pid/environ" 2>/dev/null | grep -E '^(WAYLAND_DISPLAY|DISPLAY|DBUS_SESSION_BUS_ADDRESS|XDG_RUNTIME_DIR)=' || true)
|
||||
if [[ -n "$candidate" ]]; then
|
||||
# shellcheck disable=SC2086
|
||||
export $candidate
|
||||
return 0 2>/dev/null || exit 0
|
||||
fi
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue