GoVoice/start_go2_voice.sh
2026-04-12 18:48:59 +04:00

94 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
BASE_DIR="/home/unitree/GoVoice"
PY_FILE="$BASE_DIR/Go2Voice.py"
SINK="alsa_output.usb-Anker_PowerConf_A3321-DEV-SN1-01.analog-stereo"
SOURCE="alsa_input.usb-Anker_PowerConf_A3321-DEV-SN1-01.mono-fallback"
WIFI_DEV="wlan0"
ts() { date "+[%b %d %H:%M:%S]"; }
echo "$(ts) 📁 Base dir: $BASE_DIR"
cd "$BASE_DIR"
# ============================================================
# 1) Always ensure default route via Wi-Fi (dynamic gateway)
# ============================================================
echo "$(ts) 🌐 Ensuring default route via $WIFI_DEV ..."
# Detect gateway for wlan0 if it exists in kernel routes
GW="$(ip -4 route show dev "$WIFI_DEV" 2>/dev/null | awk '/default via/ {print $3; exit}')"
# If no gateway line found, fallback to x.x.x.1 from wlan0 IP
if [[ -z "${GW:-}" ]]; then
WIFI_IP="$(ip -4 addr show dev "$WIFI_DEV" 2>/dev/null | awk '/inet /{print $2}' | cut -d/ -f1 | head -n1 || true)"
if [[ -n "${WIFI_IP:-}" ]]; then
GW="$(echo "$WIFI_IP" | awk -F. '{print $1"."$2"."$3".1"}')"
fi
fi
if [[ -z "${GW:-}" ]]; then
echo "$(ts) ⚠️ Could not detect Wi-Fi gateway (no IP on $WIFI_DEV?). Skipping route fix."
else
echo "$(ts) ✅ Using gateway: $GW"
# Remove any existing default route then add via wifi
sudo ip route del default 2>/dev/null || true
sudo ip route add default via "$GW" dev "$WIFI_DEV" 2>/dev/null || true
echo "$(ts) 📡 Current default route:"
ip route | awk '/^default/ {print}'
fi
# ============================================================
# 2) Audio (PulseAudio/PipeWire) setup
# ============================================================
echo "$(ts) 🔊 Checking PulseAudio..."
if ! command -v pactl >/dev/null 2>&1; then
echo "$(ts) ❌ pactl not found. Install:"
echo " sudo apt-get install -y pulseaudio-utils"
exit 1
fi
echo "$(ts) ⏳ Waiting for audio server..."
READY=0
for i in {1..20}; do
if timeout 0.3s pactl info >/dev/null 2>&1; then
READY=1
break
fi
sleep 0.3
done
if [[ "$READY" -ne 1 ]]; then
echo "$(ts) ❌ PulseAudio/PipeWire not ready"
exit 1
fi
echo "$(ts) ✅ Audio server ready"
echo "$(ts) 🎧 Setting default speaker → PowerConf"
pactl set-default-sink "$SINK" || true
echo "$(ts) 🎤 Setting default microphone → PowerConf"
pactl set-default-source "$SOURCE" || true
echo
echo "$(ts) 📋 Current PulseAudio defaults:"
pactl info | grep -E "Default Sink|Default Source" || true
echo
# ============================================================
# 3) Run python
# ============================================================
if [[ ! -f "$PY_FILE" ]]; then
echo "$(ts) ❌ Python file not found: $PY_FILE"
exit 1
fi
echo "$(ts) 🚀 Starting Gemini Sanad"
echo "$(ts) 🐍 Running: $PY_FILE"
exec python3 "$PY_FILE"