테크믈리에의 리뷰 공간

Synology VMM 우분투 구축기 3. VNC 서버 구축 본문

프로그래밍|소프트웨어

Synology VMM 우분투 구축기 3. VNC 서버 구축

테크믈리에 2021. 9. 23. 01:54

 

* 2023.08.17 그동안 바빠서 까먹고 있었는데, 내용에 오류가 있어 수정해두었습니다.

 

 앞서 2번 글을 따라 Lubuntu를 설치해보았다면 DDNS 없이 IP로만 접속하여 가상 환경을 써야 한다는 것에 큰 불편함을 느꼈을 것이다. 더욱이 이 경우 DSM 로그인이 풀리면 그대로 원격 제어 창 역시 꺼지기 때문에 여간 귀찮은 것이 아니다. 때문에 이번 글에서는 보다 나은 원격 접속 환경을 구축하기 위하여 VNC 서버를 설치하고 접속하는 방법에 관하여 다루어 보도록 하겠다.

 

 이번 글의 경우 정말 구글에서 Lubuntu 관련 정보도 얼마 없는 와중에 추가 데스크톱 환경 설치 없이 LxQT를 그대로 활용하여 VNC 서버를 꾸리기 위해 2주라는 시간 동안 엄청나게 정보를 검색하고 코드를 수정해 얻은 자료이기 때문에 보고 유익하다고 느꼈으면 좋아요 하나라도 박아주도록 하자 ㅠ.. 

 

 VNC 서버 구축

 

 기초 프로그램 설치

 우선, VNC 서버의 설치 이전에 Lubuntu는 gcc 등의 기초 프로그램이 설치되지 않은 상태이기 때문에 이들부터 먼저 설치를 해주어야 한다.

 

sudo apt-get update
sudo apt-get upgrade -y

 우선, QTerminal을 실행하여 위와 같은 명령어를 입력해주도록 하자. 그러면 알아서 프로그램을 다운로드할 배포 서버와 관련된 내용을 업데이트 한 뒤 기본 설치된 프로그램 중 업데이트가 필요한 프로그램들을 업데이트시켜줄 것이다.

 

 그 다음으로 설치할 것은 gcc, g++, make, perl과 같은 소스코드 빌드에 필요한 프로그램들과 파일 수정을 위해 필요한 메모장, 한글 입력을 위한 키보드 설치 등 기초 프로그램을 설치하는 것이다.

sudo apt-get install -y build-essential ssh nano fcitx fcitx-hangul wget curl ufw

 위의 명령어를 입력해 필요한 프로그램들을 설치했으면 그다음은 방화벽을 여는 것과 SSH 서버를 실행하는 것이다. 만약 SSH 관련 설정을 하고 싶은 것이 있다면 다른 블로그를 참고하여 config 파일을 수정해주도록 하자.

sudo ufw allow 22
sudo service ssh start

 그 다음으로는 한글 키보드를 사용하기 위해 fcitx을 설정해주도록 하자. 참고로 fcitx을 사용하는 이유는 uim등과 달리 안정적으로 VNC 환경에서 한글을 사용할 수 있는 유일한 입력기이기 때문이다.

 

 

 먼저 기본 설정 - 입력기를 실행하여 주도록 하자.

 

 

그다음 fcitx을 체크하고 ok를 눌러 기본 키보드를 fcitx으로 변경하여 주자.

 

 

 이제 시스템 도구 - Fcitx을 눌러 Fcitx을 실행시켜준 다음 기본 설정 - Fcitx 설정을 눌러 입력기 설정으로 넘어가도록 하자. 성공적으로 설치가 된 상황이라면 입력 방법 아래에 Keyboard - 한국어가 보일 것이다. (여기서 이미 추가로 Hangul이라는 것이 뜰 때도 있고 아닐 때도 있지만, 보통 아래와 같이 입력 전환 키를 설정 후 한글 입력을 시도해본 뒤 돌아오면 Hangul이 추가되어 있을 것이다.)

 

 

 한영 변환키를 등록하기 위해서는 전역 설정으로 넘어가 Trigger Input Method를 수정하면 된다. 한영키가 있는 키보드라면 해당 키를 누를 시 한영키라고 정상적으로 뜰 것이며 필자의 키보드처럼 우측 Alt 키가 한영 전환 역할을 한다면 Ralt라고 뜰 것이다. 이제 한영키 및 한글 입력이 정상적으로 작동하는지 여부는 FireFox를 실행하여 입력해 확인하도록 하자.

 

 번외로 만약 파이썬을 설치해야 하는 사람이라면 개인적으로는 아나콘다 혹은 미니 콘다를 추천하고 싶다. 

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc

 

 VNC 서버 설치

 자, 이제 본격적으로 VNC 서버를 설치해보도록 하자. 개인적으로 추천하는 VNC 서버는 tigerVNC이다. Lubuntu에서 VNC 서버를 돌리기 위해 noVNC와 tightVNC 등 여러 가지 VNC 서버도 설치해보고 설정 파일도 엄청 만져봤지만 tigerVNC만큼 안정적인 VNC 서버도 없었고 클라이언트도 없었다.

sudo apt-get install -y tigervnc-standalone-server tigervnc-xorg-extension sddm

 우선 위의 명령어로 필요한 프로그램을 설치하여 주도록 하자.

vncpasswd
sudo ufw allow 5901
sudo nano ~/.vnc/xstartup

 위의 명령어는 차례대로 VNC 서버에 접속하기 위한 비밀번호를 설정하는 것, VNC 서버를 위한 포트를 방화벽에서 열어주는 것, 그리고 VNC 관련 설정 파일을 수정하기 위해 여는 것이다.

 

 

 vncpasswd를 통해 비밀번호를 설정하는 경우 위와 같이 Would you like to enter a view-only password?라는 질문이 나올 것인데, n을 입력하고 넘어가도록 하자.

 

 포트를 5901로 개방하는 이유는 기본적으로 VNC 서버의 포트가 5900부터 시작하여 1번 Display는 5901, 2번 Display는 5902와 같은 식으로 포트가 할당되기 때문이다. 우리는 기본적으로 외부 접속을 위한 Display 하나만 운용할 것이기 때문에 개인이 VNC 관련 설정을 수정하지 않았다면 5901을 접속 포트로 사용하게 될 것이다.

 

 마지막으로 xstartup 파일을 열었다면 아래와 같은 내용을 넣어주도록 하자. 참고로 nano 에디터의 경우에는 F2 버튼 혹은 ctrl+x를 통하여 저장을 할 수 있다.

#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx
fcitx &

exec openbox-session &
startlxqt &
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
# xsetroot -bitmap "/usr/share/lubuntu/wallpapers/2004-lubuntu-background.png"
vncconfig -iconic
autocutsel -fork
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &

 위와 같이 내용을 작성하고 저장하였다면 다시 아래의 명령어를 통하여 위에서 작성한 파일의 권한을 설정하여 준 뒤 /etc/init.d/vncserver 파일을 열어 그 아래 내용대로 수정하고 저장하여주도록 하자. 참고로 이 과정은 가상 OS 부팅 시 자동으로 VNC 서버가 실행되도록 하는 과정이다.

sudo chmod +x ~/.vnc/xstartup
sudo chmod +x ~/.vnc/passwd
sudo nano /etc/init.d/vncserver

#!/bin/bash

### BEGIN INIT INFO

# Provides: vncserver

# Required-Start: $syslog

# Required-Stop: $syslog

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: VNC Server Startup Script

# Description: Author: Leo Gaggl (www.gaggl.com)

### END INIT INFO

unset VNCSERVERARGS

VNCSERVERS=""

[ -f /etc/vncserver/vncservers.conf ] && . /etc/vncserver/vncservers.conf

prog=$"VNC server"

start() {

. /lib/lsb/init-functions

REQ_USER=$2

echo -n $"Starting $prog: "

ulimit -S -c 0 >/dev/null 2>&1

RETVAL=0

for display in ${VNCSERVERS}

do

export USER="${display##*:}"

if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then

echo -n "${display} "

unset BASH_ENV ENV

DISP="${display%%:*}"

export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"

su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"

fi

done

}

stop() {

. /lib/lsb/init-functions

REQ_USER=$2

echo -n $"Shutting down VNCServer: "

for display in ${VNCSERVERS}

do

export USER="${display##*:}"

if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then

echo -n "${display} "

unset BASH_ENV ENV

export USER="${display##*:}"

su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1

fi

done

echo -e "\n"

echo "VNCServer Stopped"

}

case "$1" in

start)

start $@

;;

stop)

stop $@

;;

restart|reload)

stop $@

sleep 3

start $@

;;

condrestart)

if [ -f /var/lock/subsys/vncserver ]; then

stop $@

sleep 3

start $@

fi

;;

status)

status Xvnc

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

exit 1

esac

 내용 작성을 완료했다면 이제 아래의 명령어를 통해 실행 권한을 주도록 하자.

sudo chmod +x /etc/init.d/vncserver

 마지막으로 하나의 파일만 더 작성하면 끝이 난다. 아래의 명령어들을 실행 후 그 아래 내용대로 파일을 작성하여 주도록 하자.

sudo mkdir /etc/vncserver
sudo nano /etc/vncserver/vncservers.conf

VNCSERVERS="1:<우분투ID>"

VNCSERVERARGS[1]="-geometry 2560x1600 -localhost no"

update-rc.d vncserver defaults 99

 이때, <우분투 ID>에는 본인이 현재 사용 중이고 원격 접속에 사용하게 될 우분투 계정의 ID를 넣도록 하자. 또한, -geometry 뒷부분이 원격 클라이언트에서 사용하게 될 해상도인데 이 역시 본인의 경우에 맞게 값을 수정하도록 하자. 데스크톱으로 접속하는 경우, 아래 부분에서 필자가 제시한 방법대로 접속하게 된다면 클라이언트의 창 크기에 맞춰 자동으로 해상도가 변경되니 아무 값이나 넣어도 되고 아이패드 등의 IOS/Android 기기로 접속할 시 해당 기기에 맞게끔 값을 넣어주도록 하자. 2560x1600은 아이패드 프로 12.9인치 기준으로 작성된 값이다.

sudo /etc/init.d/vncserver start

 이제 마지막으로 위 명령어를 통하여 VNC 서버를 기동시 켜주도록 하자. 성공적으로 실행이 되었다면 Starting vncserver (via systemctl): vncserver.service라는 문구가 출력될 것이다. 해당 문구를 확인 후 sudo reboot 명령어, 혹은 시놀로지 VMM의 종료 옵션을 통하여 OS를 재부팅시켜준 뒤 vncserver -list 명령어를 통하여 vncserver가 부팅 시 자동으로 잘 실행되는지 확인하도록 하자.

 

 

 VNC 클라이언트 접속

 이제 VNC 서버를 클라이언트로 접속하여 볼 차례이다. 우선, 테스트하는 환경을 윈도/맥이라 가정하고 먼저 설명하겠다.

윈도우 및 리눅스용 TigerVNC Viewer 다운로드 링크: tigervnc.bphinz.com/nightly/

Mac Brew용 TigerVNC Viewer 다운로드 링크: tigervnc-viewer — Homebrew Formulae

 개인적으로 추천하는 VNC 접속 클라이언트는 TigerVNC인데, 타 VNC 클라이언트와는 다르게 창 사이즈를 리사이징 할 때마다 그 사이즈에 맞춰서 화면 해상도를 업데이트해주는 기능을 기본으로 갖추고 있으며 한영키 전달 등도 잘 되기 때문이다. 

 

 

 다운로드 후 실행한다면 위와 같은 화면을 볼 수 있다. 그러면 이제 접속할 IP 주소를 확인해야 하는데, 기본적으로 VMM으로 생성된 가상 OS는 시놀로지와 별도 장치로 공유기에서 인식되며 그에 따라 다른 IP를 추가로 할당받게 된다. 이를 확인하기 위해서는 공유기에 접속해서 확인하는 방법과 OS에서 직접 확인하는 방법이 있는데, 우선은 후자를 보도록 하겠다.

sudo apt-get install net-tools
ifconfig

 위의 명령어를 순차적으로 입력하게 되면 위와 같은 결과창을 볼 수 있다. 여기서 ens3 항목의 inet이 공유기에서 해당 OS에 할당한 IP 주소이다. 이제 NAS가 설치된 공유기의 내부망에서 작업을 진행해야 하는데, VNC Viewer의 VNC server 항목에 <IP>:5901을 입력하도록 하자.

 

 

성공적으로 접속에 성공했다면 위와 같은 화면을 볼 수 있을 것이다. 다만, VMM의 noVNC로 접속했을 때와 달리 하단의 아이콘이 깨지는 모습을 볼 수 있는데 이를 해결하는 방법은 배경화면 설정법과 같이 하단의 번외 파트에서 다루도록 하겠다.

 

 만약 안드로이드나 아이패드로 접속해야 하는 경우에는 realVNC나 Jump Desktop을 사용하도록 하자. 다만, realVNC는 한영키 입력부터 시작하여 몇 가지 문제가 있기 때문에 되도록이면 Jump Desktop을 사용하는 편을 추천한다.

 

 남은 것은 외부에서도 접속할 수 있도록 공유기를 설정하는 것인데, 포트 포워딩의 경우 이미 NAS를 운용하는 사람이라면 당연히 알 고 있어야 하는 내용이기 때문에 굳이 언급하지 않고 넘어가도록 하겠다.

 

 번외 1. 한글 입력, FireFox 등에서의 주의 사항

 사실 대다수 사용자는 관련이 없는 이야기지만 간혹 영문 키캡 키보드를 사거나 하는 이유로 한글키 없이 우측 Alt키로 한영 전환을 하는 분들이 있을 것이다. 이 경우, noVNC로 접속하여 fcitx을 설정할 때는 정상적으로 RAlt를 등록하여 한영 전환을 할 수 있으나 직접 설치한 VNC 서버를 클라이언트를 통하여 접속하게 되면 RAlt가 아예 먹지 않는 것을 확인할 수 있다. 이 경우에는 맥과 비슷하게 Caps Lock을 사용하여 한영 전환을 하거나 Ctrl+Space, Shift+Space 등의 단축키 하나를 등록하여 익숙해지는 것을 추천한다.

 

 

 두 번째 주의사항으로는 FireFox가 있는데, VMM의 noVNC 서버에서 FireFox를 실행시켜둔 경우 VNC 서버에서 추가로 실행하려 할 때 위와 같은 에러가 나는 것을 볼 수 있다. 당황하지 말고 noVNC로 다시 들어가 FireFox를 종료한 뒤 돌아오면 정상적으로 실행되는 것을 확인할 수 있다. FireFox 외에도 간혹 두 개 이상의 Display에 띄우지 못하는 프로그램들도 있고 무조건 noVNC의 Display로 넘어가 실행되는 프로그램들이 있을 수 있으니 프로그램이 실행된 것 같지만 창이 보이지 않는다면 IP를 통하여 VMM에 접속한 뒤 noVNC 화면을 확인해보도록 하자.

 

 번외 2. 아이콘과 배경화면

 우선은 아이콘 설정부터 보도록 하자.

 

 

 LXQt 데스크톱 환경의 설정은 LXQt Configuration Center에서 하나하나 다룰 수 있다. 우선은 Appearance를 열어 Icons Theme과 LXQt Theme을 고르도록 하자.

 

 

 미니멀리즘을 숭상하는 필자는 개인적으로 Papirus 시리즈와 Lubuntu Arc를 사용하는 것을 추천한다. 이 세트가 Lubuntu의 기본 세트이기도 하다.

 이제 기본 아이콘 설정이 끝났으니 창의 모양도 바꿀 차례이다. LXQt의 경우 Openbox가 창을 관리하기 때문에 Openbox Settings를 켜주도록 하자.

 

 

 LXQt의 테마와 깔맞춤 하기 위해서는 Arc-Dark나 Arc-Darker를 사용하는 것을 추천한다. 대충 여기까지 왔으면 아이콘이 깨진 듯했던 아까와는 다르게 나름 볼만해졌다. 다만 여전히 애플리케이션 아이콘을 여기에 놓으세요 문구가 거슬리는 것은 어쩔 수 없기에 이것 역시 없애보도록 하자.

 

 없애는 방법은 간단하다. 자주 쓸 프로그램을 메뉴로부터 드래그-드롭으로 끌어다 두도록 하자.

 

 

 아까보다 훨씬 깔끔해졌다. 이제 남은 것은 바탕화면뿐이다. 바탕화면을 우클릭한 후 Desktop Preferences를 보면 Wallpaper image file이라는 항목을 볼 수 있다. 원하는 사진이 있다면 파일을 다운로드하여 넣어주도록 하자. 만약 Lubuntu 기본 배경화면이 쓰고 싶다면 "/usr/share/lubuntu/wallpapers/" 폴더에서 찾을 수 있다. 원하는 사진을 찾아 적용을 누르면 마무리다.

 

 

 이제 다음 글에서는 코딩 환경을 구축하기 위해 Code-Server를 까는 방법에 관하여 보도록 하겠다. 또한, 현재 이 가상 OS는 NAS의 파일 시스템과는 분리되어 있어 NAS에서 실행함에도 불구하고 저장된 파일들에 접근할 수 없다는 단점이 있는데 이를 SMB를 통하여 해결하는 방법 역시 다음 글에서 다룰 예정이다.

 

 

 

 

Comments