본문 바로가기
컴퓨터/리눅스

vnc 설치 및 사용

by adnoctum 2010. 10. 15.

   vnc 는 네트워크를 통해 다른 컴퓨터에 접속하여 마치 그 컴퓨터를 사용하는 것처럼 모니터와 키보드, 마우스를 이용하는 것을 가능하게 해주는 프로그램이다. 윈도우즈의 원격데스크톱 연결과 비슷한데 원격데스크톱의 경우 접속 당하는 컴퓨터가 로그 아웃 되는 반면 vnc 는 그렇지 않다. 그래서 보통 서버에는 모니터랑 키보드, 마우스를 두지 않지... KVM이 물리적으로 근접한 곳에 있어야 하지만 vnc를 이용하면 네트웍으로 연결되어 있기만 하면 된다. 이 글은 리눅스에서 vnc 를 실행시키고 윈도우즈나 리눅스에서 그 컴퓨터로 접속하는 방법을 알아 본다.

윈도우즈의 경우 vnc viewer는 realvnc 홈페이지 에서 다운 받는다. 윈도우즈의 경우 다운 받은 프로그램을 기본 옵션으로 막 실행시키면 vnc server가 서비스 모드로 실행되므로, 설치 과정에서 서비스 모드를 사용하지 않도록 적절히 옵션을 선택한다.


우선 편의를 위하여 다음과 같이 용어를 정하자.
host : vnc server 를 설치한 컴퓨터. 이 컴퓨터는 접속을 '당할' 것이다.
client : vncviewer 를 설치할 컴퓨터이다. host 로 접속할 컴퓨터이다.

   우선 리눅스는 GUI 환경이 윈도우즈와 다르므로 그것을 설명한다. 리눅스의 경우, 도스처럼 그냥 terminal 처럼 나오는 환경으로 로그인을 할 수 있고, 마우스를 이용해서 사용할 수 있는 GUI 환경은 X 라는 GUI 환경(프로그램)이 실행된 것에 불과하다. 나는 대부분의 서버 컴퓨터를, 켜지면 그냥 도스 화면처럼 나오도록 run level 을 3 으로 해 놓는데, 그 상황에서 GUI 화면으로 들어가기 위해서는 xstart 를 실행하면 run level 5 처럼 GUI 로 들어갈 수 있게 된다. 이것은 곧, vnc 로 한 host에 여러 client 로 동시에 접속할 수 있다는 것을 의미한다. 즉, 한 host 는 여러 client 의 접속을 수용할 수 있다.

   이제 리눅스에서 vnc 를 실행시키는 방법을 살펴 보자. vnc server 의 설치는 yum 이나 aptget 등 베포판에 따른 소프트웨어 설치 프로그램을 사용한다. 우선, vnc 가 사용할 방화벽을 열어야 한다. vnc 는 TCP/IP 5900 + desktop number 의 port 번호를 사용한다. 즉, server를 하나 띄우면 그 서버는 5901 번 포트를 사용한다. 따라서 수용할 client 의 수만큼에 해당하는 port 번호를 열어 놓아야 한다. 리눅스에서의 방화벽은 iptables 라는 파일을 통해 설정하는데, root 계정으로 이 파일을 다음과 같이 수정해 준다.



[root@csbi adnoctum]# vi /etc/sysconfig/iptables
# ... 생략.
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5902 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5903 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

위에서 붉은 글자로 되어 있는 명령어를 실행시키고, 나오는 파일 중에 푸른 글자로 되어 있는 부분들이 vnc 를 위해 열어 놓은 port 번호이다. 5903 번까지 열려 있으므로 3 대의 vnc server 를 동시에 실행시켜 놓을 수 있다.

그 후 방화벽을 위한 규약을 재실행 시켜 준다.

[root@csbi adnoctum]# /etc/init.d/iptables restart
방화벽 규칙을 삭제하는 중:                                 [  OK  ]
chains를 ACCEPT 규칙으로 설정함: filter                    [  OK  ]
iptables 모듈을 제거하는 중:                               [  OK  ]
iptables 방화벽 규칙들을 적용하는 중:                      [  OK  ]
추가 iptables 모듈을 읽어오는 중: ip_conntrack_netbios_ns i[  OK  ]ack_ftp
[root@csbi adnoctum]#

그 후, vnc server 설정 파일을 살짝 바꾸어 준다.



[adnoctum@csbi ~]$ vi ~/.vnc/xstartup
#!/bin/sh

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

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

vnc 설정 파일은 각 사용자의 홈 디렉토리에 .vnc 디렉토리 안의xstartup 이란 파일이다. 그 파일의 내용을 살펴 보면 위의 붉은 색으로 표시한 부분과 같이 현대적인 GUI 환경으로 보이게 하려면 아래 두 줄의 주석을 없애라는 표시가 있다. # 으로 시작하는 줄이 주석인데 위처럼 가장 앞 칸의 # 을 없애 준다. 바꾸지 않으면 # 이 있는데, 그러면 GUI 환경이 아주 오래 전에 사용하던 것으로 실행된다. 만약 다음과 같은 화면이 나온다면 xstartup 파일의 위 두 줄의 주석을 없애 주지 않은 것이므로 없애주도록 한다.





이제 vnc server 를 실행시켜 보자. 형식은 다음과 같다.

vncserver -geometry 1440x900

실행시킬 서버의 화면 해상도를 위처럼 -geometry 옵션 뒤에 지정해 준다. 이 때, 1440x900 에서 중간에 있는 x 는 알파벳 X 의 소문자이다. 위처럼 실행을 시키면 다음처럼 실행된 결과가 화면에 나온다.



[adnoctum@csbi ~]$ vi ~/.vnc/xstartup
[adnoctum@csbi ~]$ vncserver -geometry 1440x900

New 'csbi.kaist.ac.kr:1 (adnoctum)' desktop is csbi.kaist.ac.kr:1

Starting applications specified in /home/adnoctum/.vnc/xstartup
Log file is /home/adnoctum/.vnc/csbi.kaist.ac.kr:1.log

[adnoctum@csbi ~]$


중요한 부분은 위의 붉은 색으로 해 놓은 부분으로, 지금 실행시킨 server 의 desk top 번호가 1 번으로 되어 있다는 것을 알려 주고 있다. vnc server는 현재 실행되고 있는 vnc server 의 개수를 세서 그 개수보다 1 개가 큰 번호를 새로 실행된 vnc server 의 desk top 번호로 부여한다. 또한 위의 vnc server 는 5900 + 1 인 5901 번을 port 번호로 사용할 것이다.

위와 같은 상황에서 윈도우즈에서 저 서버로 접속을 해보자. 이 때는 vnc viewer 를 실행시키고 주소를 다음의 형식으로 입력한다.

some.host.com :desktop_number

중요한 것은 호스트 주소 다음에 공백 한 칸을 두고 : 을 넣고 공백 없이 desk top 번호를 적어 준다는 것이다. 다음과 같다.


원래는 csbi.kaist.ac.kr 처럼 host name 을 적을 수도 있지만 이렇게 해서 접속이 안 되면 대신 IP 를 사용해도 된다. 그러면 vnc server 를 처음 실행시킬 때 입력해 놓았던 암호를 요구한다. 그 암호를 적으면 다음과 같이 접속할 수 있다.



vnc server 를 두 개 실행시켜 놓고 서로 다른 화면 크기로 접속을 해보자면 다음과 같다.



물론 위의 경우 두 번째 client 는 vnc server를 실행시킬 때 다음과 같이 800x600 의 크기로 실행을 시켰다.

[adnoctum@csbi ~]$ vncserver -geometry 800x600


이제 실행되고 있는 서버를 중지시켜 보자. 기본적인 형식은

vncserver -kill :desktop_number


이다. 이 때도 -kll 다음에 공백을 한 칸 두고 : 을 쓰고 중지시킬 desk top 번호를 쓴다. 다음과 같다.

[adnoctum@csbi ~]$ vncserver -kill :1
Killing Xvnc process ID 9132

물론 위의 경우 vnc viewer 를 먼저 닫고 server 를 닫는 것이 보통이지만 저렇게 서버에서 먼저 닫으면 윈도우즈에서 viewer가 그냥 닫히게 된다. 크게 상관은 없다.