#!/bin/bash # --- 日志相关 --- LOG_DIR="/home/unitree/robot_face_rec/logs/face_rec" mkdir -p "$LOG_DIR" LOG_FILE="$LOG_DIR/face_rec_$(date +%Y%m%d_%H%M%S).log" { echo "===== $(date) Starting face_rec script =====" echo "User: $(whoami)" echo "PWD before cd: $(pwd)" echo "Python: $(which python) / Version: $(python --version 2>&1)" } >> "$LOG_FILE" # 切换到项目目录 cd /home/unitree/robot_face_rec || { echo "Failed to cd to project dir" >> "$LOG_FILE" exit 1 } { echo "PWD after cd: $(pwd)" echo "Env before display detection: DISPLAY=$DISPLAY, XAUTHORITY=$XAUTHORITY" } >> "$LOG_FILE" # --- 动态检测 DISPLAY 的逻辑 --- # 方法:尝试从正在运行的 Xorg / X 进程环境中读取 DISPLAY display_found="" for pid in $(pgrep Xorg); do if [ -r /proc/$pid/environ ]; then disp=$(tr '\0' '\n' < /proc/$pid/environ | grep '^DISPLAY=' | cut -d'=' -f2-) if [ -n "$disp" ]; then # display_found="$disp" echo "Chosen " break fi fi done # 如果还没找到 DISPLAY,则尝试 fallback if [ -z "$display_found" ]; then # 常见默认::0 display_found=":0" echo "Chosen default" fi export DISPLAY="$display_found" { echo "Chosen DISPLAY = $DISPLAY" } >> "$LOG_FILE" # XAUTHORITY:假设用户的 .Xauthority 存在于 home 目录 export XAUTHORITY="/home/unitree/.Xauthority" { echo "Using XAUTHORITY = $XAUTHORITY" } >> "$LOG_FILE" # 最终执行 Python 程序(不后台化,用 exec 替换进程) exec python face_rec.py >> "$LOG_FILE" 2>&1