system-reboot-bringup Skill
この環境を再起動した後に、日常運用で使っている常駐プロセス群を復旧するための runbook です。
tmux 管理のプロセスを中心に、起動順・確認手順・ログ確認をまとめています。
対象プロセス(このスキルの範囲)
VOICEVOX API(http://127.0.0.1:50021)
VacuumTube(remote debugging :9992、通常 tmux セッション vacuumtube-bg)
whisper.cpp 音声コマンド待受一式(whisper-server-ja, whisper-agent-ja)
Tauri 字幕オーバーレイ(caption-overlay-poc または tauri-overlay)
GOD MODE ウェブカメラ + 顔認識オーバーレイ(god-mode-bg tmux / port 8765)
前提
- KDE Plasma デスクトップにログイン済み
- 実際に有効な
DISPLAY を確認して GUI 操作できる(再起動後に :0 / :1 が変わることがある)
tmux, curl, jq, python3 利用可能
重要ルール
- 音声待受は
listener と agent を同時起動しない(マイク競合)
- 再起動後はまず
VOICEVOX と VacuumTube の土台を復旧してから whisper-agent を起動する
- UX(音声・字幕・VacuumTube 操作)は自動テストだけで保証できないため、最後に必ず手動確認する
推奨の起動順(再起動後)
0) 有効な DISPLAY を確認(重要)
再起動後は DISPLAY が :0 になることがあるため、固定値 :1 を前提にしない。
bash
1for d in :0 :1 :2; do
2 echo "== $d =="
3 DISPLAY="$d" XAUTHORITY="$HOME/.Xauthority" xdpyinfo >/dev/null 2>&1 && echo ok || echo ng
4done
ok になった値を以降のコマンドで使う(例: :0)。
bash
1export DESKTOP_DISPLAY=:0
2export XAUTHORITY="$HOME/.Xauthority"
1) VOICEVOX (VOICEBOX) を起動(tmux 推奨, API :50021)
VOICEVOX も tmux で常駐化しておくと、作業セッション終了時に巻き込まれて落ちにくい。
bash
1tmux has-session -t voicevox-bg 2>/dev/null && tmux kill-session -t voicevox-bg || true
2tmux new-session -d -s voicevox-bg \
3 "bash -lc 'export DISPLAY=${DESKTOP_DISPLAY}; export XAUTHORITY=\"$HOME/.Xauthority\"; exec \"$HOME/.voicevox/VOICEVOX.AppImage\"'"
確認:
bash
1curl -fsS http://127.0.0.1:50021/version
2tmux capture-pane -pt voicevox-bg -S -40 | tail -n 20
補足:
VOICEVOX が起動していないと、whisper-agent は音声応答できない(字幕だけになる/フォールバックになる)
2) VacuumTube を起動(tmux 推奨)
bash
1tmux new-session -d -s vacuumtube-bg \
2 "bash -lc 'export VACUUMTUBE_DISPLAY=${DESKTOP_DISPLAY}; export XAUTHORITY=\"$HOME/.Xauthority\"; exec ~/vacuumtube.sh'"
確認:
bash
1pgrep -af '^/opt/VacuumTube/vacuumtube( |$)'
2curl -fsS http://127.0.0.1:9992/json/version
起動直後の手動操作(必要な場合):
- アカウント選択画面で
YuisekinTV を選択
- 右上にタイル配置(
desktop-windows-layout / vacuumtube スキル手順)
3) Tauri 字幕オーバーレイを起動(tauri-overlay tmux セッション)
字幕・ロック画面オーバーレイを 音声待受とは独立して 起動します。
tmux_listen_only.sh(step 3-b)と重複しても問題ありません(tmux_listen_only.sh が caption-overlay-poc セッションで同じバイナリを管理します)。
ロック画面単体をテストしたいときや、音声待受なしで字幕 IPC だけ使いたいときに便利です。
bash
1# 既存セッションがあれば殺してから起動
2tmux has-session -t tauri-overlay 2>/dev/null && tmux kill-session -t tauri-overlay || true
3tmux new-session -d -s tauri-overlay \
4 "bash -lc 'cd ~/Workspaces/tmp/tauri-caption-overlay-poc/src-tauri && PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig DISPLAY=${DESKTOP_DISPLAY} XAUTHORITY=\"$HOME/.Xauthority\" ./target/debug/caption-overlay-poc 2>&1 | tee /tmp/tauri-overlay.log'"
起動確認(IPC ポート 47832):
bash
1sleep 3 && tail -5 /tmp/tauri-overlay.log
2# 期待: "caption overlay IPC listening on 127.0.0.1:47832"
ロック画面の表示テスト:
bash
1echo '{"type":"lock_screen_show","text":"SYSTEM LOCKED"}' | nc -q1 127.0.0.1 47832
2# 解除テスト
3echo '{"type":"lock_screen_hide"}' | nc -q1 127.0.0.1 47832
補足:
- バイナリは
feature/biometric-lock-screen ブランチで管理(HUD デザイン+生体認証ロック画面)
- リビルドが必要な場合:
cd ~/Workspaces/tmp/tauri-caption-overlay-poc/src-tauri && PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig asdf exec cargo build
whisper-agent が tauri-overlay とは別に caption-overlay-poc セッション経由でオーバーレイを使う場合は、ポート競合に注意(47832 は1プロセスのみ)
3.5) Chromium ロック画面ブリッジを起動(lock-screen-bridge tmux セッション)
Tauri の代わりに Chromium でロック画面を表示するためのブリッジサーバーです(4K 環境で滑らか)。
ポート 47833 (TCP) + 18766 (WebSocket) + 18765 (HTTP static) を使用します。
bash
1# ブリッジ起動
2tmux has-session -t lock-screen-bridge 2>/dev/null && tmux kill-session -t lock-screen-bridge || true
3tmux new-session -d -s lock-screen-bridge \
4 "bash -lc 'cd ~/Workspaces/tmp/tauri-caption-overlay-poc && DISPLAY=${DESKTOP_DISPLAY} python3 lock_screen_bridge.py 2>&1 | tee /tmp/lock-screen-bridge.log'"
5sleep 2
6
7# Chromium ロック画面ウィンドウを起動
8DISPLAY=${DESKTOP_DISPLAY} chromium \
9 --app="http://127.0.0.1:18765/" \
10 --disable-background-timer-throttling \
11 --disable-renderer-backgrounding \
12 --no-first-run --no-default-browser-check \
13 2>/dev/null &
起動確認:
bash
1# ブリッジログ確認
2tail -5 /tmp/lock-screen-bridge.log
3# 期待: "Lock screen bridge ready."
4
5# ロック画面テスト
6python3 -c "
7import socket, json
8payload = json.dumps({'type': 'lock_screen_show', 'text': 'SYSTEM LOCKED'}) + '\n'
9with socket.create_connection(('127.0.0.1', 47833), timeout=3) as s:
10 s.sendall(payload.encode()); s.shutdown(socket.SHUT_WR)
11 print(s.recv(4096).decode().strip())
12"
13# 期待: {"ok": true}
14
15# 解除テスト
16python3 -c "
17import socket, json
18payload = json.dumps({'type': 'lock_screen_hide'}) + '\n'
19with socket.create_connection(('127.0.0.1', 47833), timeout=3) as s:
20 s.sendall(payload.encode()); s.shutdown(socket.SHUT_WR)
21 print(s.recv(4096).decode().strip())
22"
音声待受起動時は WHISPER_AGENT_LOCK_SCREEN_IPC_PORT=47833 を指定:
bash
1WHISPER_AGENT_LOCK_SCREEN_IPC_PORT=47833 \
2STT_BACKEND=moonshine \
3... (通常の tmux_listen_only.sh start-agent コマンド)
4) 音声待受(tmux 管理)
tmp/whispercpp-listen/tmux_listen_only.sh が以下をまとめて管理します。
STT バックエンドは STT_BACKEND 環境変数で切り替えます(デフォルト: whisper):
STT_BACKEND | 起動するセッション | レイテンシ | 精度 |
|---|
whisper(既定) | whisper-server-ja + whisper-agent-ja + caption-overlay-poc | ~4500ms | 100% |
moonshine | whisper-agent-ja + caption-overlay-poc(server不要) | ~270ms | 96.6% |
whisper バックエンド(既定)
bash
1CAPTION_OVERLAY_DISPLAY="${DESKTOP_DISPLAY}" \
2CAPTION_OVERLAY_XAUTHORITY="$HOME/.Xauthority" \
3tmp/whispercpp-listen/tmux_listen_only.sh start-agent
moonshine バックエンド + 声紋認証(推奨構成)
bash
1STT_BACKEND=moonshine \
2WHISPER_AGENT_SPEAKER_ID=1 \
3CAPTION_OVERLAY_DISPLAY="${DESKTOP_DISPLAY}" \
4CAPTION_OVERLAY_XAUTHORITY="$HOME/.Xauthority" \
5tmp/whispercpp-listen/tmux_listen_only.sh start-agent
moonshine バックエンド(声紋認証なし)
bash
1STT_BACKEND=moonshine \
2CAPTION_OVERLAY_DISPLAY="${DESKTOP_DISPLAY}" \
3CAPTION_OVERLAY_XAUTHORITY="$HOME/.Xauthority" \
4tmp/whispercpp-listen/tmux_listen_only.sh start-agent
moonshine は whisper-server-ja セッションを起動しません。モデルは voice_command_loop.py プロセス内にロードされます。
モデルサイズ変更(既定: base):
bash
1STT_BACKEND=moonshine MOONSHINE_MODEL_SIZE=tiny \
2WHISPER_AGENT_SPEAKER_ID=1 \
3tmp/whispercpp-listen/tmux_listen_only.sh start-agent
状態確認:
bash
1tmp/whispercpp-listen/tmux_listen_only.sh status
よく使うログ:
bash
1tmp/whispercpp-listen/tmux_listen_only.sh logs-agent
2tmp/whispercpp-listen/tmux_listen_only.sh logs-agent-tail
3tmp/whispercpp-listen/tmux_listen_only.sh logs-overlay
補足:
- whisper 既定モデルは
ggml-small.bin
- DJI マイクを明示したいときは
WHISPER_MIC_SOURCE=... tmp/whispercpp-listen/tmux_listen_only.sh restart-agent
- moonshine バックエンドは音声キャプチャに
ffmpeg(parec 不要)を使用します
WHISPER_AGENT_SPEAKER_ID=1 で ECAPA-TDNN 声紋認証を有効化(お嬢様のみコマンド実行可能)
- マスターボイスプリント:
tmp/whispercpp-listen/tests/fixtures/master_voiceprint.npy
- 閾値:
WHISPER_AGENT_SPEAKER_THRESHOLD(既定 0.60、ライブマイク実測値 0.63〜0.78)
- 認証失敗時: 「声紋認証に失敗しました。もう一度お試しください。」と返答してコマンドをブロック
- マスター再生成:
cd tmp/whispercpp-listen && python3 prototype_speaker_id.py
5) GOD MODE(ウェブカメラ + 顔認識オーバーレイ)を起動(tmux 管理)
GOD MODE はリアルタイム映像をデスクトップ上にオーバーレイ表示する「映像表示系」です。
tmp/GOD_MODE/god_mode_restart.sh を tmux セッション god-mode-bg から実行します。
内部では god_mode.sh restart が各プロセスを nohup で起動し PID を /tmp/god_mode_8765.pids に保存します。
その後 layout --full-screen → --backmost でウィンドウを全画面・最背面(壁紙代わり)に配置します。
bash
1tmux has-session -t god-mode-bg 2>/dev/null && tmux kill-session -t god-mode-bg || true
2tmux new-session -d -s god-mode-bg \
3 "bash -lc 'cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} XAUTHORITY=\"$HOME/.Xauthority\" bash god_mode_restart.sh; exec bash'"
god_mode_restart.sh の内容(参考):
bash
1./god_mode.sh restart --chromium --port 8765 --cameras 0,2,4
2./god_mode.sh layout --full-screen
3./god_mode.sh layout --backmost
起動確認(起動完了まで 10〜20 秒かかります):
bash
1# tmux セッションのログを確認
2tmux capture-pane -pt god-mode-bg -S -40 | tail -n 20
3
4# video server の HTTP 応答を確認
5curl -fsS http://localhost:8765/status
手動でウィンドウレイアウトを変更したい場合:
bash
1cd ~/Workspaces/tmp/GOD_MODE
2
3# 前面に出す(ウェブカメラが見たいとき)
4DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --frontmost
5
6# フルスクリーン
7DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --full-screen
8
9# 左下コンパクト配置
10DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --left-bottom
11
12# 最背面に戻す(壁紙モード)
13DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --backmost
停止したい場合:
bash
1cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh stop
補足:
- GOD MODE は
--chromium モードで Chromium ウィンドウを使用(--chromium なし: Tauri モード)
--cameras 0,2,4 でカメラ 0・2・4 番を使用(実際のデバイス番号は環境依存)
- 音声コマンド
システム、ウェブカメラが見たい 等でも制御可能(whisper-agent 運用中の場合)
まとめて確認(復旧完了チェック)
bash
1tmux ls | rg 'voicevox-bg|vacuumtube-bg|whisper-server-ja|whisper-agent-ja|caption-overlay-poc|tauri-overlay|god-mode-bg'
2curl -fsS http://127.0.0.1:50021/version
3curl -fsS http://127.0.0.1:9992/json/version
4curl -fsS http://localhost:8765/status
5# Tauri オーバーレイ IPC 確認
6echo '{"type":"notify","text":"bringup OK"}' | nc -q1 127.0.0.1 47832
期待される tmux セッション(通常運用):
voicevox-bg
vacuumtube-bg
tauri-overlay(字幕・ロック画面オーバーレイ / IPC :47832)
whisper-server-ja(STT_BACKEND=whisper のときのみ)
whisper-agent-ja
caption-overlay-poc(tmux_listen_only.sh が tauri-overlay と 別に 起動する場合 — ポート競合に注意)
god-mode-bg(起動スクリプト完了後は idle、GOD_MODE プロセス自体は nohup で稼働中)
注意:
whisper-listen-ja は agent 運用中は STOPPED が正常
god-mode-bg の tmux は起動コマンド実行後に idle になるのが正常(exec bash で待機している)
最小の手動確認(UX)
システム 状況報告 と話しかける
- 字幕オーバーレイ + VOICEVOX 応答が出ることを確認
YouTubeを小さくして など簡単なコマンドを試す
トラブルシュート(再起動直後に多いもの)
1) whisper-agent は動いているのに喋らない
VOICEVOX が起動していないことが多い
- 再起動後に
DISPLAY を取り違えて VOICEVOX が即終了していることもある
- 確認:
curl -fsS http://127.0.0.1:50021/version
2) VacuumTube の CDP が見えない
~/vacuumtube.sh 起動漏れ or :9992 未設定
- 確認:
curl -fsS http://127.0.0.1:9992/json/version
4) Tauri オーバーレイ(IPC :47832)に繋がらない
tauri-overlay セッションが未起動、またはポート競合で落ちている
- 確認:
nc -zv 127.0.0.1 47832
- ログ確認:
tmux capture-pane -pt tauri-overlay -S -40 または tail -20 /tmp/tauri-overlay.log
- 再起動手順は Step 3 を参照
- 別プロセスがポートを使用中の場合:
lsof -i :47832 で PID を特定して kill
5) GOD MODE の video server に繋がらない
god_mode.sh restart が失敗しているか、まだ起動中
tmux capture-pane -pt god-mode-bg -S -40 でログを確認
DISPLAY が合っていないと Chromium ウィンドウが開かない(step 0 で確認した値を使うこと)
- 手動で再起動:
cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} bash god_mode_restart.sh
6) GOD MODE ウィンドウが前面に出たまま戻らない
--backmost の KWin スクリプトが効いていない可能性
- 手動で最背面に:
cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --backmost
関連スキル
vacuumtube(VacuumTube の CDP 操作)
audio-stt-whisper(whisper-agent 運用)
audio-speak-voicebox(VOICEVOX + 字幕オーバーレイ)
desktop-windows-layout(VacuumTube の右上配置など)