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
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.
99 lines
3.9 KiB
Markdown
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`.
|