1 #!/usr/bin/env bash 2 # ARMOR OS laptop launcher 3 # Safe launcher for X11 laptop command station mode. 4 # Launches the ARMOR OS laptop command station only. 5 6 set -euo pipefail 7 8 cd /home/shire3d/ARMOR 9 10 HOST="$(hostname)" 11 if [ "$HOST" != "armoros" ]; then 12 echo "FAIL: Wrong host. Expected armoros. Current: $HOST" 13 exit 1 14 fi 15 16 if [ -z "${DISPLAY:-}" ]; then 17 echo "FAIL: DISPLAY is not set. Start this from an X11-capable terminal." 18 exit 1 19 fi 20 21 if [ ! -x ./venv/bin/python ]; then 22 echo "FAIL: ARMOR venv missing at ./venv/bin/python" 23 exit 1 24 fi 25 26 27 export QT_QPA_PLATFORM=xcb 28 export ARMOR_DISPLAY_PROFILE=laptop 29 export QT_AUTO_SCREEN_SCALE_FACTOR=0 30 export QT_SCALE_FACTOR="${QT_SCALE_FACTOR:-1.35}" 31 32 echo "========================================" 33 echo " ARMOR OS LAPTOP COMMAND STATION" 34 echo " Host: $HOST" 35 echo " Repo: $(pwd)" 36 echo " Display: ${DISPLAY}" 37 echo " Profile: ${ARMOR_DISPLAY_PROFILE}" 38 echo " Scale: ${QT_SCALE_FACTOR}" 39 echo "========================================" 40 41 BOOT_VIDEO="/home/shire3d/ARMOR/assets/shire_boot.mp4" 42 43 echo "Playing ARMOR startup animation..." 44 45 ffplay \ 46 -loglevel error \ 47 -nostats \ 48 -autoexit \ 49 -fs \ 50 -noborder \ 51 -an \ 52 "$BOOT_VIDEO" \ 53 /dev/null 2>&1 || true 55 56 echo "Launching ARMOR OS..." 57 58 ./venv/bin/python main.py & 59 ARMOR_PID=$! 60 61 WINDOW="" 62 63 for _ in $(seq 1 60); do 64 if ! kill -0 "$ARMOR_PID" 2>/dev/null; then 65 wait "$ARMOR_PID" 66 exit $? 67 fi 68 69 WINDOW="$( 70 wmctrl -lGpx 2>/dev/null | 71 awk -v pid="$ARMOR_PID" ' 72 $3 == pid { 73 area = $6 * $7 74 if (area > largest) { 75 largest = area 76 window = $1 77 } 78 } 79 END { 80 print window 81 } 82 ' 83 )" 84 85 [ -n "$WINDOW" ] && break 86 sleep 0.25 87 done 88 89 if [ -n "$WINDOW" ]; then 90 SCREEN="$( 91 xrandr --current | 92 awk '/\*/ {print $1; exit}' 93 )" 94 95 WIDTH="${SCREEN%x*}" 96 HEIGHT="${SCREEN#*x}" 97 98 wmctrl -ir "$WINDOW" \ 99 -b remove,hidden,shaded,fullscreen,maximized_vert,maximized_horz || 100 true 101 102 sleep 0.25 103 104 wmctrl -ir "$WINDOW" \ 105 -e "0,0,0,$WIDTH,$HEIGHT" || 106 true 107 108 wmctrl -ir "$WINDOW" \ 109 -b add,maximized_vert,maximized_horz || 110 true 111 112 wmctrl -ir "$WINDOW" \ 113 -b add,fullscreen || 114 true 115 116 wmctrl -ia "$WINDOW" || true 117 118 echo "ARMOR fullscreen enforced on window $WINDOW." 119 else 120 echo "WARNING: ARMOR window was not found for fullscreen enforcement." 121 fi 122 123 wait "$ARMOR_PID"