Files
javis_bot/docs/vnc-xfce-setup.md
javis-bot c4abf63f38
Some checks failed
Release / semantic-release (push) Successful in 59s
tests / Unit tests (Linux, Python 3.11) (push) Successful in 13m45s
Release / build-linux (push) Failing after 7m47s
Release / build-windows (push) Has been cancelled
Release / build-macos (arm64, macos-latest) (push) Has been cancelled
Release / build-macos (x64, macos-15-intel) (push) Has been cancelled
Release / release-main (push) Has been cancelled
Release / release-develop (push) Has been cancelled
Add Discord-native hybrid front-end for Jarvis (bot + bridge)
Transform isair/jarvis into a Discord-controlled voice assistant running on
the Ubuntu VNC desktop, keeping the mature ~39k-line Python brain intact.

- bot/ (Node + bun, discord.js): /자비스 slash commands (ephemeral),
  voice channel join + voice receive/playback, pluggable VNC screen broadcast
  (selfbot live / noVNC / screenshot)
- bridge/ (Python, Flask): wraps jarvis STT + run_reply_engine + Piper TTS
  behind a thin localhost HTTP API
- .env.example, scripts/ (start_bridge/start_bot/dev), README rewrite,
  docs/language-comparison.md and docs/vnc-xfce-setup.md

Language decision: hybrid (Python brain + Node/bun Discord layer) because
Discord blocks bot video; native screen broadcast only works via a Node
selfbot library.
2026-06-09 14:51:05 +09:00

99 lines
3.9 KiB
Markdown

# VM 106 (claude) — VNC + XFCE 원격 데스크톱 셋업 기록
> Ubuntu 26.04 LTS / Proxmox VM 106 / RTX 5050 GPU 패스스루(연산 전용) 환경에서
> 헤드리스(모니터 없음) 원격 데스크톱을 구성한 전체 과정과 함정 정리.
> 용도: 크롬으로 웹 제어 + 디스코드 화면공유 (Javis 연동)
---
## 1. 최종 구성 요약
| 항목 | 값 |
|---|---|
| VM | 106 (claude), IP `192.168.10.9` |
| OS | Ubuntu 26.04 LTS (resolute) |
| GPU | RTX 5050 패스스루, 연산 전용 (no x-vga), CUDA 13.2, driver 595.71.05 |
| VNC 서버 | TigerVNC 1.15.0, 포트 `5901` |
| 데스크톱 | XFCE |
| 자동 시작 | `~/start-vnc.sh` + systemd user service + linger |
| 접속 | VNC 뷰어로 `192.168.10.9:5901` (RDP 아님 / mstsc 안 됨) |
---
## 2. 접속 정보
- **프로토콜**: VNC (RDP 아님 — 윈도우 mstsc로는 접속 불가)
- **주소**: `192.168.10.9:5901`
- **VNC 뷰어**: TigerVNC Viewer / RealVNC Viewer / MobaXterm 내장 VNC
- **비밀번호**: `vncpasswd`로 설정한 8자 (VNC는 비번 8자 제한)
---
## 3. 핵심 함정 (이게 제일 중요)
### 3-1. RDP(gnome-remote-desktop)는 포기 → VNC로 전환
- 시스템 모드 `grdctl --system`에서 자격증명 키링 저장 실패 (TPM 없음 → GKeyFile 폴백 깨짐)
- `Credentials are not set, denying client` 로 접속 거부 → TigerVNC로 전환
### 3-2. GPU 패스스루 환경 → render/video 그룹 필수
- `claude` 사용자가 `render`, `video` 그룹에 없으면 Xvnc가 `/dev/dri` 접근 실패로 X 서버 즉시 크래시
- 증상: `libEGL warning: failed to open /dev/dri/card0: Permission denied`, `X connection to :1 broken`
- 해결: `sudo usermod -aG render,video claude` (그룹 추가 후 재로그인/재부팅 필요)
### 3-3. startxfce4 대신 xfce4-session 직접 호출
- `startxfce4`는 X 서버가 이미 떠 있으면 그냥 종료됨 → xstartup에서 `xfce4-session` 직접 호출
### 3-4. 메뉴/패널이 비면 → RENDER 확장 켜기 + XDG 환경변수
- `-extension RENDER`를 넣으면 XFCE 메뉴/패널이 공백으로 나옴 → 이 환경에선 RENDER 켜는 게 정답
- systemd 서비스 환경엔 `XDG_DATA_DIRS`, `XDG_CONFIG_DIRS`를 명시
### 3-5. 설정 손상 시 초기화
- `mv ~/.config/xfce4 ~/.config/xfce4.broken && mv ~/.cache/xfce4 ~/.cache/xfce4.broken` 후 재시작
### 3-6. systemctl --user는 XDG_RUNTIME_DIR 필요
- `export XDG_RUNTIME_DIR=/run/user/$(id -u)`
---
## 4. 설치 패키지
```bash
sudo apt install -y tigervnc-standalone-server tigervnc-common
sudo apt install -y xfce4 xfce4-goodies dbus-x11
sudo apt install -y fonts-noto-cjk fonts-noto-cjk-extra fonts-nanum
cd /tmp && wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb
```
---
## 5. 자동 시작 (`~/start-vnc.sh`)
```bash
#!/bin/bash
export DISPLAY=:1
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export HOME=/home/claude
export XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg
pkill -9 -u $(id -u) Xvnc 2>/dev/null
sleep 2
# 주의: -extension RENDER 넣지 말 것 (메뉴/패널이 안 그려짐)
/usr/bin/Xvnc :1 -geometry 1920x1080 -depth 24 -rfbport 5901 \
-rfbauth $HOME/.config/tigervnc/passwd -SecurityTypes VncAuth -localhost no &
sleep 5
exec dbus-launch --exit-with-session xfce4-session
```
systemd user service + linger로 부팅 시 자동 시작.
---
## 6. Javis 연동 시 핵심 포인트
- 봇/브릿지는 디스플레이 **:1** 에서 동작하는 X 화면을 사용합니다 (`VNC_DISPLAY=:1`).
- 크롬 제어: `DISPLAY=:1 google-chrome --password-store=basic --no-first-run`
- 화면 송출(셀프봇/스크린샷)은 ffmpeg `x11grab`으로 `:1`을 캡처합니다.
- noVNC를 쓰려면: `websockify --web=/usr/share/novnc 6080 localhost:5901`
`.env``NOVNC_URL=http://192.168.10.9:6080/vnc.html`.