갈루아의 반서재

구글 클라우드 플랫폼 환경 중 Deep Learning VM 의 기본 운영체제인 Debian 9 서버에 VNC 를 설치해보도록 하자. 


데스크탑 환경 및 VNC 서버 설치


기본적으로 Debian 9 서버는 그래픽 데스크탑 환경이나 VNC 서버를 제공하지 않으므로, 아래 관련 패키지를 설치하는 것에서 시작해야 한다. 특히 최신 Xfce 데스크탑 환경과 TightVNC 패키지를 사용할 예정이다.

먼저 패키지 리스트를 업데이트한다. 

1
~$ sudo apt updateColored by Color Scripter
cs

Xfce 데스크탑 환경을 설치한다. 설치과정에서 키보드 레이아웃 선택 화면이 뜨면 해당되는 옵션을 선택 후 설치를 계속 진행한다.

1
~$ sudo apt install xfce4 xfce4-goodies
cs

설치가 끝나면 이제 TightVNC 를 설치하도록 한다.

1
~$ sudo apt install tightvncserver
cs

VNC 서버 최초 설정을 위해 vncserver 명령을 이용하여 안전한 패스워드를 생성한다. 원격접속시 사용할 패스워드를 입력한다. 패스워드는 6~8 자리로 구성되어야 한다. 8자리가 넘어가는 것은 자동으로 잘려나간다. 다음으로 view-only 패스워드를 허용할지 물어본다. 필요에 따라 설정하도록 한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
~$ vncserver
 
You will require a password to access your desktops.
 
Password:
Warning: password truncated to the length of 8.
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Warning: password truncated to the length of 8.
Verify:
xauth:  file /home/fuchsia/.Xauthority does not exist
 
New 'X' desktop is fuchsia:1
 
Creating default startup script /home/fuchsia/.vnc/xstartup
Starting applications specified in /home/fuchsia/.vnc/xstartup
Log file is /home/fuchsia/.vnc/fuchsia:1.log 
 
cs


VNC 서버 구성하기


VNC 서버에게 시작할 때 어떤 명령을 수행해야 하는지를 알려줘야 한다. 특히 접속시 어떤 그래픽 데스크탑을 써야하는지 알려줄 필요가 있다.

이러한 명령어는 홈디렉토리 아래 .vnc 폴더의 xstartup 파일에 기술되어 있다. 시작 스크립트는 앞서 vncserver 를 구동했을 때 이미 생성이 된다. 여기서는 Xfce 데스크탑을 로딩해야 하므로 수정이 필요하다. 

VNC 가 처음 셋업이 되면, 5901 포트에 기본 서버 인스턴스를 띄우게 된다. 이 포트는 디스플레이 포트로 불리며, VNC 에서는 :1 로 다루어진다. VNC 는 :2, :3 과 같은 식으로 서로 다른 디스플레이 포트 위에 다수의 인스턴스를 띄울 수 있다. 

VNC 서버의 구성을 변경할 것이므로, 먼저 5901번 포트에서 돌아가고 있는 VNC 서버 인스턴스를 중지시킨다. 

1
2
3
4
5
 
~$ ss -ltp | grep vnc
LISTEN     0      5          *:5901                     *:*                     users:(("Xtightvnc",pid=27859,fd=3))
LISTEN     0      128        *:x11-1                    *:*                     users:(("Xtightvnc",pid=27859,fd=0))
fuchsia@fuchsia:~$ vncserver -kill :1
Killing Xtightvnc process ID 27859
 
cs

xstartup 파일을 수정하기 전에 원본을 백업해두자. 

1
fuchsia@fuchsia:~$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
cs

이제 xstartup 파일을 생성하고 열어서 편집하자. 

1
fuchsia@fuchsia:~$ nano ~/.vnc/xstartup
cs

다음의 내용을 붙여넣는다.

xrdb $HOME/.Xresources 는 VNC 의 GUI 프레임워크로 하여금 서버 사용자의 .Xresources 파일을 읽을 수 있도록 한다. .Xresources 는 터미널 색상, 커서 테마 그리고 폰트 렌더링과 같은 그래픽 데스크탑의 셋팅을 변경할 수 있는 곳이다. 다음 명령어인 startxfce & 는 서버로 하여금 Xfce 를 띄우게 하는 역할을 한다.

1
2
3
#!/bin/bash
xrdb $HOME/.Xresources
startxfce &
cs

실행가능하도록 권한을 644 에서 755 로 변경한다. 

1
fuchsia@fuchsia:~$ sudo chmod +x ~/.vnc/xstartup
cs

VNC 서버를 재시작하자. 다음과 비슷한 아웃풋을 볼 수 있을 것이다. 

1
2
3
4
5
6
7
8
 
fuchsia@fuchsia:~$ vncserver
 
New 'X' desktop is fuchsia:1
 
Starting applications specified in /home/fuchsia/.vnc/xstartup
Log file is /home/fuchsia/.vnc/fuchsia:1.log
 
cs

설정이 끝났으면 로컬에서 TightVNC 를 실행시켜 서버에 접속해보도록 하자. 서버의 ip::5901 과 같은 형식으로 remote host 란에 입력하고 Connect 를 누른다. 그러면 암호 입력창이 뜨게 된다. 

암호를 정확히 입력하면 아래와 같이 서버 접속이 완료된다. 



VNC 시스템 서비스 등록하기


이제 VNC 를 systemd 서비스로 셋팅하여, 필요에 따라 시작, 중지, 재시작이 가능하도록 하자. 

먼저 /etc/systemd/system/vncserver@.service 라는 새로운 파일을 생성한다. 여기서 @ 심볼은 VNC 디스플레이 포트를 특정하기 위해 사용된다. 

1
fuchsia@fuchsia:~$ sudo nano /etc/systemd/system/vncserver@.service
cs

다음 코드를 앞서 만든 파일에 붙여넣는다. 당연히 소유자 및 그룹은 본인 것에 맞게 고쳐 넣는다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
 
[Service]
Type=forking
User=fuchsia
Group=fuchsia
WorkingDirectory=/home/fuchsia
 
PIDFile=/home/fuchsia/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i
 
[Install]
WantedBy=multi-user.target
cs

여기서 ExecStartPre 명령어는 기존에 구동중인 VNC 가 있다면 이를 종료시키는 역할을 한다. ExecStart 명령어는 VNC 를 실행시키고, 1280*800 해상도에 24비트 컬러를 지원하도록 셋팅한다. 물론 이런 값들은 수정할 수 있다. 이제 파일을 저장하고 닫자.

다음으로, 시스템이 새로운 유니트 파일을 인지할 수 있도록 리로드한다.

1
fuchsia@fuchsia:~$ sudo systemctl daemon-reload
cs

유니트 파일을 활성화시킨다. 

1
2
fuchsia@fuchsia:~$ sudo systemctl enable vncserver@1.service
Created symlink /etc/systemd/system/multi-user.target.wants/vncserver@1.service → /etc/systemd/system/vncserver@.service.
cs

여기서 @ 뒤의 1은 앞서 설명했듯이 서비스 넘버를 나타낸다. 

현재 구동중인 인스턴스를 종료시키자.

1
2
fuchsia@fuchsia:~$ vncserver -kill :1
Killing Xtightvnc process ID 28127
cs

다른 systemd 서비스처럼 vncserver 를 시작하자. 

1
fuchsia@fuchsia:~$ sudo systemctl start vncserver@1
cs

서비스가 정상적으로 가동되었다면 다음과 같은 값을 보일 것이다. 

1
2
3
4
5
6
7
fuchsia@fuchsia:~$ sudo systemctl status vncserver@1
● vncserver@1.service - Start TightVNC server at startup
   Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-11-24 04:20:17 UTC; 49s ago
  Process: 28585 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
  Process: 28579 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
 Main PID: 28593 (Xtightvnc)
cs

이것으로 Debian 9 서버에 VNC 설치 및 환경설정이 완료되었다.