#!/bin/sh # Block while at least one zellij server process was spawned from an # SSH context, exit cleanly once none remain. # # Rationale: a zellij session started locally (e.g. from a sway terminal) # is the user actively sitting in front of the laptop — that should NOT # inhibit suspend. Only zellij sessions started while SSH'd in deserve # the lock, so the host stays awake across detach + disconnect but # normal local-attended suspend still works. # # Detection: zellij's daemonised server is exec'd by the client and # inherits the client's environment. Linux preserves that exec-time # environment in /proc//environ for the life of the process, even # after the original SSH session is gone. So an "ssh-spawned" zellij is # one whose environ contains SSH_CONNECTION=. # # This script is the ExecStart payload of zellij-inhibit-suspend.service, # which wraps it in systemd-inhibit. When this script exits, the lock is # released. The .path unit re-fires the service on the next zellij socket # transition. set -eu poll=${ZELLIJ_INHIBIT_POLL:-15} has_ssh_zellij() { pids=$(pgrep -x zellij 2>/dev/null) || return 1 for pid in $pids; do [ -r "/proc/$pid/environ" ] || continue if tr '\0' '\n' <"/proc/$pid/environ" 2>/dev/null | grep -q '^SSH_CONNECTION='; then return 0 fi done return 1 } while has_ssh_zellij; do sleep "$poll" done