|
1 | 1 | #!/bin/bash |
2 | | -set -e |
3 | 2 | SSH_HOST="${1:-localhost}" |
4 | 3 | SSH_PORT="${2:-2222}" |
5 | 4 |
|
6 | 5 | SSH_CMD="sshpass -p raspberry ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -p $SSH_PORT pi@$SSH_HOST" |
7 | 6 |
|
8 | | -echo "Installing Xvfb and configuring virtual display..." |
| 7 | +echo "Installing Xvfb and x11-apps..." |
| 8 | +$SSH_CMD "sudo apt-get update -qq && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq xvfb x11-apps 2>&1 | tail -5" |
9 | 9 |
|
10 | | -# Install xvfb and x11-apps (for xwd screenshot capture) |
11 | | -$SSH_CMD "sudo apt-get update -qq && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq xvfb x11-apps 2>&1 | tail -3" |
12 | | - |
13 | | -# In QEMU virt, logind's seat0 has CanGraphical=no (no real display device), |
14 | | -# so lightdm won't start an X session. Start Xvfb and the GUI session directly. |
15 | 10 | echo "Starting Xvfb virtual display..." |
16 | | -$SSH_CMD "sudo nohup Xvfb :0 -screen 0 1280x720x24 > /dev/null 2>&1 < /dev/null &" |
17 | | -sleep 2 |
| 11 | +$SSH_CMD "sudo nohup Xvfb :0 -screen 0 1280x720x24 > /tmp/xvfb.log 2>&1 < /dev/null &" |
| 12 | +sleep 3 |
| 13 | + |
| 14 | +echo "Verifying Xvfb is running..." |
| 15 | +XVFB_PID=$($SSH_CMD "pgrep -f 'Xvfb :0' || true" 2>/dev/null) |
| 16 | +if [ -z "$XVFB_PID" ]; then |
| 17 | + echo " WARNING: Xvfb not running, checking log..." |
| 18 | + $SSH_CMD "cat /tmp/xvfb.log 2>/dev/null || true" 2>/dev/null |
| 19 | +else |
| 20 | + echo " Xvfb running (pid: $XVFB_PID)" |
| 21 | +fi |
| 22 | + |
| 23 | +echo "Checking lighttpd status..." |
| 24 | +$SSH_CMD "systemctl is-active lighttpd 2>/dev/null || true" 2>/dev/null |
| 25 | +$SSH_CMD "curl -s -o /dev/null -w 'HTTP %{http_code}' http://localhost/ || true" 2>/dev/null |
| 26 | +echo "" |
18 | 27 |
|
19 | 28 | echo "Starting GUI session (matchbox + chromium kiosk)..." |
20 | | -$SSH_CMD "sudo -u pi nohup bash -c 'export DISPLAY=:0; export HOME=/home/pi; /opt/custompios/scripts/start_gui' > /dev/null 2>&1 < /dev/null &" |
| 29 | +$SSH_CMD "sudo -u pi nohup bash -c 'export DISPLAY=:0; export HOME=/home/pi; /opt/custompios/scripts/start_gui' > /tmp/start_gui.log 2>&1 < /dev/null &" |
21 | 30 |
|
22 | | -# Wait for Chromium to appear on the display |
23 | 31 | echo "Waiting for Chromium to start..." |
24 | | -for i in $(seq 1 30); do |
| 32 | +for i in $(seq 1 60); do |
25 | 33 | PGREP=$($SSH_CMD "pgrep -f 'chromium.*--kiosk' || true" 2>/dev/null) |
26 | 34 | if [ -n "$PGREP" ]; then |
27 | | - echo " Chromium running on display (pid: $PGREP)" |
| 35 | + echo " Chromium running (pid: $PGREP) after ${i}x5s" |
28 | 36 | break |
29 | 37 | fi |
| 38 | + if [ "$((i % 6))" -eq 0 ]; then |
| 39 | + echo " ... still waiting (${i}x5s), diagnostics:" |
| 40 | + $SSH_CMD "pgrep -a Xvfb || echo ' Xvfb: NOT RUNNING'" 2>/dev/null || true |
| 41 | + $SSH_CMD "pgrep -a matchbox || echo ' matchbox: NOT RUNNING'" 2>/dev/null || true |
| 42 | + $SSH_CMD "pgrep -a chromium || echo ' chromium: NOT RUNNING'" 2>/dev/null || true |
| 43 | + $SSH_CMD "tail -5 /tmp/start_gui.log 2>/dev/null || true" 2>/dev/null || true |
| 44 | + fi |
30 | 45 | sleep 5 |
31 | 46 | done |
32 | 47 |
|
33 | | -# Give the page time to render |
34 | | -echo " Waiting for page to load..." |
| 48 | +if [ -z "$PGREP" ]; then |
| 49 | + echo " WARNING: Chromium did not appear after 300s" |
| 50 | + echo " start_gui log:" |
| 51 | + $SSH_CMD "cat /tmp/start_gui.log 2>/dev/null || true" 2>/dev/null || true |
| 52 | + echo " xvfb log:" |
| 53 | + $SSH_CMD "cat /tmp/xvfb.log 2>/dev/null || true" 2>/dev/null || true |
| 54 | + echo " Process list:" |
| 55 | + $SSH_CMD "ps aux | head -30" 2>/dev/null || true |
| 56 | +fi |
| 57 | + |
| 58 | +echo "Waiting for page to render..." |
35 | 59 | sleep 15 |
36 | 60 |
|
| 61 | +echo "Post-boot display state:" |
| 62 | +$SSH_CMD "DISPLAY=:0 xdotool search --onlyvisible --name . getwindowname 2>/dev/null || echo '(no visible windows)'" 2>/dev/null || true |
| 63 | + |
37 | 64 | echo "Post-boot setup complete" |
0 commit comments