修复:消除 QProcess 重载歧义并归档串流故障验证
变更详情:QProcess::finished 重载消歧;文档:串流失败根因(双 IP ARP 混乱)与延迟 A/B 结论 - moonlight_session.cpp:QOverload 显式指定 finished 重载,修复 ARM64 编译 - moonlight.conf:vsync/frame-pacing 默认改回开启(A/B 实测关闭无改善) - docs:补充 10-29 登录流程验收、重启验收、Monitor 恢复、双 IP 根因与 A/B 数据 - tools:新增 deploy_kiosk.sh 一键部署脚本与语法自检
This commit is contained in:
1 parent
61127fb714
commit
ee6f449bf1
7 files changed
+381
-46
No files matched your search
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
# 一键同步/编译/部署/验证 kiosk-shell 到 RK3528 盒子
|
||||
#
|
||||
# 用法(在 Windows 开发机的 Git Bash 里执行):
|
||||
# bash tools/deploy_kiosk.sh
|
||||
#
|
||||
# 前置:盒子已恢复网络(ssh armbian@192.168.1.188 可达)。
|
||||
set -e
|
||||
|
||||
BOX="${VDI_BOX:-armbian@192.168.1.188}"
|
||||
REPO="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
SRC="$REPO/terminal/kiosk-shell"
|
||||
|
||||
echo "==> 检查盒子连通性"
|
||||
ssh -o ConnectTimeout=8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'echo "box ok: $(hostname)"'
|
||||
|
||||
echo "==> 同步源码到盒子"
|
||||
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'rm -rf ~/vdi-build/repo/kiosk-shell/src && mkdir -p ~/vdi-build/repo/kiosk-shell/src'
|
||||
scp -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SRC/CMakeLists.txt" "$BOX":~/vdi-build/repo/kiosk-shell/
|
||||
scp -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SRC"/src/*.cpp "$SRC"/src/*.h "$BOX":~/vdi-build/repo/kiosk-shell/src/
|
||||
scp -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SRC/scripts/vdi-moonlight" "$BOX":~/vdi-terminal/bin/vdi-moonlight
|
||||
scp -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SRC/etc/moonlight.conf" "$BOX":~/.config/vdi-terminal/moonlight.conf
|
||||
scp -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SRC/vdi-kiosk.desktop" "$BOX":~/.config/autostart/vdi-kiosk.desktop
|
||||
scp -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$SRC/vdi-moonlight.desktop" "$BOX":~/.config/autostart/vdi-moonlight.desktop
|
||||
|
||||
echo "==> 在盒子上编译"
|
||||
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'sed -i "s/\r$//" ~/vdi-build/repo/kiosk-shell/src/*.cpp ~/vdi-build/repo/kiosk-shell/src/*.h ~/vdi-terminal/bin/vdi-moonlight; chmod +x ~/vdi-terminal/bin/vdi-moonlight; cd ~/vdi-build/repo/kiosk-shell && (cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release > /tmp/cmake.log 2>&1 || (tail -30 /tmp/cmake.log; exit 1)) && cmake --build build 2>&1 | tail -8'
|
||||
|
||||
echo "==> 安装二进制"
|
||||
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'pkill -f "/vdi-kiosk-monitor " 2>/dev/null || true; pkill -f "/bin/sh /home/armbian/vdi-terminal/bin/vdi-moonlight" 2>/dev/null || true; pkill -f "^moonlight-qt stream" 2>/dev/null || true; sleep 2; cp ~/vdi-build/repo/kiosk-shell/build/kiosk-shell ~/vdi-terminal/bin/kiosk-shell && cp ~/vdi-build/repo/kiosk-shell/build/vdi-kiosk-monitor ~/vdi-terminal/bin/vdi-kiosk-monitor && chmod +x ~/vdi-terminal/bin/kiosk-shell ~/vdi-terminal/bin/vdi-kiosk-monitor && ls -la ~/vdi-terminal/bin/'
|
||||
|
||||
echo "==> 收敛自启项(只保留 kiosk-shell 一条链)"
|
||||
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'mkdir -p ~/.config/autostart; rm -f ~/.config/autostart/vdi-kiosk.desktop.bak; sed -i "s/^Hidden=.*/Hidden=true/;s/^X-GNOME-Autostart-enabled=.*/X-GNOME-Autostart-enabled=false/" ~/.config/autostart/vdi-moonlight.desktop 2>/dev/null || true; grep -H . ~/.config/autostart/*.desktop'
|
||||
|
||||
echo "==> 启动受管栈并验证"
|
||||
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'rm -f /tmp/vdi-kiosk.heartbeat; nohup /home/armbian/vdi-terminal/bin/vdi-kiosk-monitor -- /home/armbian/vdi-terminal/bin/kiosk-shell > /tmp/vdi-monitor.log 2>&1 & sleep 8; echo "--- 进程 ---"; pgrep -af "vdi-kiosk-monitor|kiosk-shell|moonlight-qt" | grep -v pgrep; echo "--- 看门狗日志 ---"; tail -5 /tmp/vdi-monitor.log; echo "--- 心跳 ---"; cat /tmp/vdi-kiosk.heartbeat 2>/dev/null; echo'
|
||||
|
||||
echo "==> 抓屏确认当前界面(应为登录页)"
|
||||
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BOX" 'DISPLAY=:0 xwd -root -silent' 2>/dev/null | python "$REPO/tools/xwd2png.py" /tmp/kiosk-login.png && echo "captured /tmp/kiosk-login.png"
|
||||
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Rough brace/paren balance sanity check for edited C++ files."""
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
"..", "terminal", "kiosk-shell"))
|
||||
|
||||
FILES = [
|
||||
"src/main_window.cpp",
|
||||
"src/main_window.h",
|
||||
"src/desktop_list_page.cpp",
|
||||
"src/desktop_list_page.h",
|
||||
"src/desktop_service.cpp",
|
||||
"src/desktop_service.h",
|
||||
"src/desktop_session.h",
|
||||
"src/moonlight_session.cpp",
|
||||
"src/moonlight_session.h",
|
||||
"src/login_page.cpp",
|
||||
"src/login_page.h",
|
||||
"src/state_machine.cpp",
|
||||
"src/state_machine.h",
|
||||
]
|
||||
|
||||
fail = False
|
||||
for f in FILES:
|
||||
src = open(f, encoding="utf-8").read()
|
||||
src2 = re.sub(r"//[^\n]*", "", src)
|
||||
src2 = re.sub(r'"(?:\\.|[^"\\])*"', '""', src2)
|
||||
src2 = re.sub(r"'(?:\\.|[^'\\])*'", "''", src2)
|
||||
counts = {c: src2.count(c) for c in "{}()"}
|
||||
ok = counts["{"] == counts["}"] and counts["("] == counts[")"]
|
||||
print(f, counts, "OK" if ok else "MISMATCH")
|
||||
if not ok:
|
||||
fail = True
|
||||
|
||||
sys.exit(1 if fail else 0)
|
||||
Reference in new issue
Block a user