새소식

기타, 이것저것

서버에 tigervnc 설치하고 host pc에서 realvnc viewer

  • -

 

sudo nano vnc_setup.sh
#!/bin/bash

# VNC 원터치 설치 및 설정 스크립트
# 사용법: sudo bash vnc_setup.sh [사용자명] [VNC패스워드]

set -e

# 색상 정의
RED='\\033[0;31m'
GREEN='\\033[0;32m'
YELLOW='\\033[1;33m'
NC='\\033[0m' # No Color

# 로그 함수
log() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 사용자 입력 확인
VNC_USER=${1:-$USER}
VNC_PASSWORD=${2}

if [ -z "$VNC_PASSWORD" ]; then
    echo -n "VNC 패스워드를 입력하세요: "
    read -s VNC_PASSWORD
    echo
fi

log "VNC 설정 시작 - 사용자: $VNC_USER"

# 1. 시스템 업데이트
log "시스템 패키지 업데이트 중..."
apt update

# 2. 데스크탑 환경 설치
log "XFCE 데스크탑 환경 설치 중..."
apt install xfce4 xfce4-goodies -y

# 3. TigerVNC 설치
log "TigerVNC 서버 설치 중..."
apt install tigervnc-standalone-server tigervnc-common tigervnc-tools -y

# 4. GDM 설정
log "GDM 설정 중..."
GDM_CONF="/etc/gdm3/custom.conf"
if [ -f "$GDM_CONF" ]; then
    cp "$GDM_CONF" "$GDM_CONF.backup"
    log "GDM 설정 파일 백업됨: $GDM_CONF.backup"
fi

cat > "$GDM_CONF" << EOF
[daemon]
# Uncomment the line below to force the login screen to use Xorg
WaylandEnable=true

# Enabling automatic login
AutomaticLoginEnable = true
AutomaticLogin = $VNC_USER
EOF

# 5. 사용자 홈 디렉토리로 전환하여 VNC 설정
log "VNC 설정 디렉토리 생성 중..."
USER_HOME=$(eval echo "~$VNC_USER")
VNC_DIR="$USER_HOME/.vnc"

# VNC 디렉토리가 없으면 생성
if [ ! -d "$VNC_DIR" ]; then
    sudo -u "$VNC_USER" mkdir -p "$VNC_DIR"
fi

# 6. xstartup 스크립트 생성
log "VNC 시작 스크립트 생성 중..."
cat > "$VNC_DIR/xstartup" << 'EOF'
#!/bin/bash

# --- 환경 정리 ---
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
unset WAYLAND_DISPLAY                       # Wayland 변수 제거 (중요)

# systemd --user 환경에 남은 값들도 제거(있으면)
systemctl --user unset-environment WAYLAND_DISPLAY XDG_SESSION_TYPE DISPLAY 2>/dev/null || true

# --- X11 강제 ---
export XDG_SESSION_TYPE=x11
export GDK_BACKEND=x11                      # GTK를 X11로
export QT_QPA_PLATFORM=xcb                  # Qt를 X11로
export DISPLAY="${VNCDISPLAY:-:2}"          # VNC 디스플레이 명시 (tigervnc가 VNCDISPLAY를 줌)

# --- 선택: X 리소스/배경 ---
[ -r "$HOME/.Xresources" ] && xrdb "$HOME/.Xresources"
xsetroot -solid grey

# --- XFCE 시작 (dbus와 함께 한 번에) ---
exec dbus-launch --exit-with-session startxfce4
EOF

# 실행 권한 부여
chown "$VNC_USER:$VNC_USER" "$VNC_DIR/xstartup"
chmod +x "$VNC_DIR/xstartup"

# 7. VNC 패스워드 설정
log "VNC 패스워드 설정 중..."
echo "$VNC_PASSWORD" | sudo -u "$VNC_USER" vncpasswd -f > "$VNC_DIR/passwd"
chown "$VNC_USER:$VNC_USER" "$VNC_DIR/passwd"
chmod 600 "$VNC_DIR/passwd"

# 8. systemctl 서비스 등록
log "systemd 서비스 설정 중..."

# vncserver.users 파일 생성
VNCSERVER_USERS="/etc/tigervnc/vncserver.users"
mkdir -p /etc/tigervnc
echo ":2=$VNC_USER" > "$VNCSERVER_USERS"

# tigervnc.conf 파일 생성
cat > "$VNC_DIR/tigervnc.conf" << 'EOF'
$getDefaultFrom = "-display localhost:0";
$localhost = "no";
$SecurityTypes = "VncAuth,TLSVnc"
EOF
chown "$VNC_USER:$VNC_USER" "$VNC_DIR/tigervnc.conf"

# 9. VNC 서버 테스트 시작
log "VNC 서버 테스트 시작 중..."
sudo -u "$VNC_USER" vncserver :2 -localhost no -geometry 1920x1080 -depth 24

# 10. systemd 서비스 등록 및 시작
log "systemd 서비스 활성화 중..."
systemctl daemon-reload
systemctl enable tigervncserver@:2.service
systemctl start tigervncserver@:2.service

# 11. GDM 재시작
log "GDM 서비스 재시작 중..."
systemctl restart gdm3

# 12. 설치 완료 확인
log "설치 완료!"
echo
echo "=== VNC 설정 정보 ==="
echo "사용자: $VNC_USER"
echo "VNC 디스플레이: :2 (포트 5902)"
echo "해상도: 1920x1080"
echo "데스크탑 환경: XFCE4"
echo
echo "=== 접속 방법 ==="
echo "VNC 클라이언트에서 다음 주소로 접속:"
echo "  IP주소:5902 또는 IP주소::5902"
echo
echo "=== 서비스 관리 명령어 ==="
echo "상태 확인: sudo systemctl status tigervncserver@:2.service"
echo "서비스 중지: sudo systemctl stop tigervncserver@:2.service"
echo "서비스 시작: sudo systemctl start tigervncserver@:2.service"
echo "수동 VNC 시작: sudo -u $VNC_USER vncserver :2 -localhost no -geometry 1920x1080 -depth 24"
echo "수동 VNC 중지: sudo -u $VNC_USER vncserver -kill :2"
echo
warn "방화벽이 활성화되어 있다면 5902 포트를 열어주세요:"
echo "  sudo ufw allow 5902"
chmod +x vnc_setup.sh
# 기본 사용 (현재 사용자로 설정)
sudo ./vnc_setup.sh

# 특정 사용자와 패스워드 지정
sudo ./vnc_setup.sh vraptor 1234qwer

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.