#!/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"