{“content”:”---\nname: pokemon-red-live-view\ndescription: 在 Windows PC 上运行 Pokemon Red 模拟器,通过 HTTP API 发送指令,Chrome 浏览器查看实时游戏画面。解决 SSH Session 0 无法显示 GUI 的问题。\ncategory: gaming\n---\n\n# Pokemon Red 实时画面 + 远程控制\n\n## 核心问题\n- SSH 在 Windows 上是 Session 0,直接运行 Python 开窗口对用户隐形\n- 通过 schtasks /run /i 可以让进程跑在用户桌面 Session (Session 1)\n- Pokemon Agent (pokemon-agent) 默认 headless,截图返回 169 bytes 空白图\n- 解决方案:自定义 HTTP server (PyBoy headless) + Chrome 查看 JPEG 直播流\n\n## 文件位置\n- ROM: D:\\Games\\Pokemon\\Pokemon - Red Version (USA, Europe) (SGB Enhanced).gb\n- 模拟器 venv: C:\\Users\\Sozo\\pokemon-agent\\venv\\\n- 主脚本: D:\\pokemon_live.py (SCP 上传)\n- Pokemon Agent 源码: C:\\Users\\Sozo\\pokemon-agent\\\n\n## 启动流程\n\n### 第一步:上传脚本到 PC(D:)\n在 Hermes 本地准备好 pokemon_live.py,通过 SCP 上传:\nbash\nscp /data/data/com.termux/files/home/Download/pokemon_live.py sozo@100.83.112.84:D:/pokemon_live.py\n\n\n### 第二步:通过 schtasks 在 Session 1 启动\npowershell\nschtasks /delete /tn PokemonLive /f\nschtasks /create /tn PokemonLive /tr 'C:\\Users\\Sozo\\pokemon-agent\\venv\\Scripts\\python.exe D:\\pokemon_live.py' /sc once /st 23:59 /ru 'desktop-f9ksppp\\sozo' /rl limited /f\nschtasks /run /tn PokemonLive /i\n\n\n### 第三步:用户 Chrome 打开观看\n\nhttp://localhost:8080\n\n\n### 验证服务状态\npowershell\nTest-NetConnection -ComputerName 127.0.0.1 -Port 8080 -InformationLevel Quiet\n\n\n## API 端点\n\n| 端点 | 方法 | 说明 |\n|------|------|------|\n| / | GET | HTML 直播页面 |\n| /frame | GET | 当前帧 JPEG |\n| /action | POST | 发送按钮指令 |\n| /state | GET | 帧计数 |\n\n### POST /action\njson\n{\"button\": \"right\", \"frames\": 20}\n{\"button\": \"a\", \"frames\": 10}\n{\"button\": \"up\", \"frames\": 15}\n\n支持按钮: a, b, start, select, up, down, left, right\n\n### 响应\njson\n{\"ok\": true, \"button\": \"right\", \"frames\": 20}\n\n\n## 重要:PyBoy RGBA 问题\nPyBoy 截图是 RGBA 格式,直接保存 JPEG 会报错:\n\nOSError: cannot write mode RGBA as JPEG\n\n必须先转换: pb.screen.image.convert(\"RGB\").save(...)\n\n## 官方 pokemon-agent serve\n官方 server 端口 8765,有更丰富的 API(structured state、minimap、walk_* action),但之前截图测试 169 bytes 有问题。可尝试:\nbash\ncd C:\\Users\\Sozo\\pokemon-agent\nC:\\Users\\Sozo\\pokemon-agent\\venv\\Scripts\\python -m pokemon_agent serve --rom \"D:\\Games\\Pokemon\\Pokemon - Red Version (USA, Europe) (SGB Enhanced).gb\" --port 8765\n\n\n官方 Actions: walk_up, walk_down, walk_left, walk_right, press_a, press_start, a_until_dialog_end, wait_60\n\n## PowerShell 调试命令\npowershell\n# 查看端口占用\nGet-NetTCPConnection -LocalPort 8080\n\n# 查看 python 进程\nGet-Process python\n\n# 查看进程命令ライン\nGet-CimInstance Win32_Process -Filter 'ProcessId=XXXX' | Select-Object ProcessId, CommandLine\n\n# 结束进程\nStop-Process -Id XXXX -Force\n\n# 测试端口\nTest-NetConnection -ComputerName 127.0.0.1 -Port 8080 -InformationLevel Quiet\n\n# Python 测试 POST\npython -c \"import urllib.request, json; req = urllib.request.Request('http://127.0.0.1:8080/action', data=json.dumps({'button':'right','frames':20}).encode(), headers={'Content-Type':'application/json'}, method='POST'); print(urllib.request.urlopen(req).read())\"\n\n\n## 游戏开始流程\n1. 开机画面 → 按 A 开始\n2. 介绍文字 → 按 A 多直到出现”NEW GAME”\n3. 选择 NEW GAME → 按 A\n4. 主角命名 → 按 A 确认\n\n## 当前状态\n- ✅ 模拟器运行中\n- ✅ Chrome http://localhost:8080 可看画面\n- ✅ /action API 可发送指令\n- ⚠️ 官方 pokemon-agent serve 截图 169 bytes 问题未解决\n”}

v4 升级(2026-05-14)

pokemon_live_v4.py 修复:

  • 支持 /frame?timestamp(Chrome 自动刷新需要)
  • 帧数限制从 3→30
  • HTML 直播页面自动刷新(每秒)
  • 无日志(静默运行)

启动:

Start-Process -FilePath "C:\Users\Sozo\pokemon-agent\venv\Scripts\python.exe" `
  -ArgumentList "D:\pokemon_live_v4.py" -WindowStyle Hidden

Chrome 打开 http://localhost:8080