#!/bin/bash # /usr/local/bin/polybar-gpu-trigger # 1. Critical sleep to prevent the udev timing race condition sleep 0.5 # Find the Process ID (PID) of Polybar POLYBAR_PID=$(pgrep -x polybar) if [ -z "$POLYBAR_PID" ]; then exit 0 fi # Loop through found PIDs to locate the correct user context for pid in $POLYBAR_PID; do if [ -f "/proc/$pid/environ" ]; then USER_UID=$(stat -c "%u" "/proc/$pid") USER_NAME=$(id -nu "$USER_UID") # Safely parse the environment file for XDG_RUNTIME_DIR XDG_DIR=$(tr '\0' '\n' < "/proc/$pid/environ" | grep '^XDG_RUNTIME_DIR=' | cut -d= -f2-) if [ -n "$XDG_DIR" ]; then # Drop root privileges and forcefully send the text directly into Polybar sudo -u "$USER_NAME" XDG_RUNTIME_DIR="$XDG_DIR" \ polybar-msg action "#gpu-status.send.0" >/dev/null 2>&1 break fi fi done