~/bin/bd-philips-enforce.sh
最终使用的脚本 ~/bin/bd-philips-enforce.sh
!/bin/bash
set -u
LOGDIR="$HOME/Library/Logs" LOG="$LOGDIR/bd-philips-enforce.log" LAST="$LOGDIR/.bd-philips-enforce.last" COOLDOWN=60
mkdir -p "$LOGDIR" exec >>"$LOG" 2>&1 echo "---- $(date '+%F %T') start ----"
now="$(date +%s)" if [[ -f "$LAST" ]]; then last="$(cat "$LAST" 2>/dev/null || echo 0)" if [[ "$last" =~ ^[0-9]+$ ]] && (( now - last < COOLDOWN )); then echo "INFO: cooldown $((now-last))s < ${COOLDOWN}s, exit" exit 0 fi fi
SKIP_FLAG="$HOME/.bd_allow_philips_usb_display" if [[ -f "$SKIP_FLAG" ]]; then echo "INFO: SKIP flag exists: $SKIP_FLAG" echo "$now" > "$LAST" echo "---- $(date '+%F %T') end ----" exit 0 fi
export PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
BDCLI="$(command -v betterdisplaycli || true)" if [[ -z "$BDCLI" ]]; then echo "ERROR: betterdisplaycli not found" echo "$now" > "$LAST" echo "---- $(date '+%F %T') end ----" exit 0 fi echo "INFO: betterdisplaycli=$BDCLI"
BetterDisplay 没起时先拉起
if ! pgrep -x "BetterDisplay" >/dev/null 2>&1 && ! pgrep -f "BetterDisplay.app" >/dev/null 2>&1; then echo "INFO: launching BetterDisplay..." open -gja "BetterDisplay" >/dev/null 2>&1 || true sleep 2 fi
DEC="$("$HOME/bin/bd-philips-decide.py" 2>&1)" echo "$DEC" LASTLINE="$(echo "$DEC" | tail -n 1)" KEEP_TAG=""; KILL_TAG=""; KEEP_HZ=""; KILL_HZ="" read -r KEEP_TAG KILL_TAG KEEP_HZ KILL_HZ <<<"$LASTLINE" || true echo "INFO: decision KEEP_TAG=$KEEP_TAG KILL_TAG=$KILL_TAG (Hz keep=$KEEP_HZ kill=$KILL_HZ)"
if [[ -z "${KEEP_TAG:-}" || -z "${KILL_TAG:-}" ]]; then echo "INFO: no decision; skip" echo "$now" > "$LAST" echo "---- $(date '+%F %T') end ----" exit 0 fi
如果 kill 这路已经是 Failed(通常代表已断开/已关),就不再重复 off,避免无意义写配置
KILL_RR="$("$BDCLI" get --tagID="$KILL_TAG" --refreshRate 2>/dev/null || true)" if echo "$KILL_RR" | grep -qi "Failed"; then echo "INFO: kill path already off (refreshRate=Failed), skip off" "$BDCLI" set --tagID="$KEEP_TAG" --connected=on >/dev/null 2>&1 || true else echo "ACTION: keep on, kill off" "$BDCLI" set --tagID="$KEEP_TAG" --connected=on >/dev/null 2>&1 || true "$BDCLI" set --tagID="$KILL_TAG" --connected=off >/dev/null 2>&1 || true fi
echo "$now" > "$LAST" echo "---- $(date '+%F %T') end ----"