'VNC'에 해당되는 글 1건

  1. 2010.07.14 리눅스 VNCSERVER 설정 방법 3
2010. 7. 14. 15:27

리눅스 VNCSERVER 설정 방법

VNCSERVER 는 외부에서 원격으로  GUI 환경으로 접속이 가능하도록 만들어주는 프로그램으로
리눅스에서는 서버가 운영되고 외부의 PC 에서는 vncviewer 라는 클라이언트를 통해서
접속이 가능하게 된다.

1. CentOS 에서는 rpm 으로 설치가 가능하다.

yum -y install vncserver


2. 최초 시작시에는 다음과 같이 터미널에 입력해준다.

이때에 사용자의 VNC 로 접속할 때 사용될 패스워드를 넣어주어야 하고
나중에 vncpasswd 라는 명령어로 패스워드 변경할 수 있다.
아래는 root 에서 수행했으니 root 의 vncpasswd 가 생성되는 것이다.
만약 다른 계정으로 했다면 그 계정의 vncpasswd 가 실행되게 된다.

[root@localhost ~]# vncserver :1

You will require a password to access your desktops.

Password:
Verify:
xauth:  creating new authority file /home/bjh/.Xauthority

New 'localhost:3 (bjh)' desktop is localhost:1

Creating default startup script /home/bjh/.vnc/xstartup
Starting applications specified in /home/bjh/.vnc/xstartup
Log file is /home/bjh/.vnc/localhost:1.log


3.  각 계정 사용자의 홈디렉토리에 숨김 디렉토리가 생성된다.  ( .vnc )
그 안의 xstartup 이라는 파일을 vi 로 열어서 수정해야 한다.

[root@localhost .vnc]# cat 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 &

파일을 열어서 위의 빨간색 두 라인을 주석해제 ( 맨 앞에 # 을 삭제 ) 해서
적용이 되도록 만들어준다.

unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

만약 이 과정을 빼먹으면 나중에 vnc viewer 로 접속햇을 때 원하지 않는 이상한 화면(아무것도 없는 화면)을 볼 지도 모른다.

4. 원격접속시 사용될 해상도와  어느 유저로 접속할 것인지를 결정해야 한다.
root 로 로그인한 상태에서 /etc/sysconfig/vncservers 라는 파일을 열어서 편집해야 한다.

[root@localhost sysconfig]# cat  vncservers
# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the lines below to start a VNC server on display :2
# as my 'myusername' (adjust this to your own).  You will also
# need to set a VNC password; run 'man vncpasswd' to see how
# to do that. 
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see
# <URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html>.

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-nohttpd" to prevent web-based VNC clients connecting.

# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel.  See the "-via" option in the
# `man vncviewer' manual page.

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

여기서 맨 마지막 두 라인이 바로 예제이다.
이것을 그대로 복사해서 라인을 추가하고
VNCSERVERS 라는 라인에서는 사용하고자하는 포트와 유저를 지정하게 된다.
또한 두번째 라인의 VNCSERVERARGS 라인은 vncviewer 를 통해서 접속했을 때 사용하고자 하는 해상도를 지정하게 된다.
물론 새로 추가하는 라인들은 앞의 # 을 제거해서 주석해제 처리 해주어야 한다.

위에서는 root 에서 만들었지만 이것을 다른 특정 유저에서 사용하게 할려면
특정 사용자 아이디로 로그인하고 나서 위의 과정을 반복해준 다음에
예를 들어 test 라는 계정이 이미 있고 그 계정으로 VNCSERVER 를 운영할려면 아래와 같이 수정해서 넣어준다.

VNCSERVERS="1:test"
VNCSERVERARGS[2]="-geometry 1024x768 -nolisten tcp -nohttpd -localhost"

5. 복수의 사용자별로 VNC 서버를 설정하는 법
만약 여러 계정에서 사용하고자 한다면 VNCSERVERS 라인에 추가를 해주어야 한다.
VNCSERVERS="1:test  2:test2  3:root"
VNCSERVERARGS[2]="-geometry 1024x768 -nolisten tcp -nohttpd -localhost"

설정이 완료되었다면 VNCSERVER 를 재시작해야 한다.

이렇게 되면 test 라는 계정과 test2 라는 계정 그리고 root 라는 계정으로 각각 따로 VNC 서버가 구동하게 되어서 각각 다른 화면으로 접속하여 다른 작업이 가능하게 된다.

즉 윈도우PC 에서 리눅스로 접속할 때에는 다음과 같은 화면처럼 3가지 접속이 가능하다.
즉 3개의 사용자별로 따로 VNC 서버가 구동되게 되는 것이다. 

아이피 뒤의 숫자는 포트번호인데  위의 /etc/sysconfig/vncservers 파일에서 계정적어준 앞의 숫자를 바꾸고 VNC 재기동을 하면 설정한 포트번호로 접속이 가능하다.






6. VNCSERVER 재시작
리눅스에서는 두가지 방법을 통해서 서비스 재시작이 가능하다.
service vncserver restart

/etc/init.d/vncserver restart

두가지 모두 결과는 같다.

만약  VNCSERVER 를 전체적으로 중단하고 싶다면 맨 뒤쪽의 restart 대신에 stop 을 넣고
시작을 원하면 start 를 넣으면 된다.

만약 특정 유저들 중에서 하나만 중지하고자 할 때에는
그 유저로 로그인 한뒤에 display 번호까지 지정해서 KILL 하면 된다.
vncserver -kill :3


6. 원격PC(윈도우) 에서 vncviewer 를 설치해서 접속
VNCVIEWER 프로그램은 프리웨어로 윈도우PC 에 설치해서 접속이 가능하다.

REALVNC 를 사용하든지 TightVNC 를 사용하든지 마찬가지 이다.
어느것을 선택해도 좋다.

아래와 같이 입력해서 접속한다.
이때 아이피의 뒤에 적어주는 것은 위의 4번 과정에서 설정했던 포트번호이다.
다른 포트번호도 설정했다면 해당 포트번호를 적어주면 설정한 유저로 접속되는 것을 확인할 수 있을 것이다.

XXX.XXX.XXX.XXX:1


참고로 display 번호가 바로 내가 말한 포트번호이다.
VNC서버는 TCP포트를  5900 부터 시작하는데 display 번호가 1 이면 5901 포트를 사용해서 리눅스는 LISTEN 상태로 대기하고 있게 된다.

이것은 CentOS 터미널 상에서 netstat -na | grep 590* 을 쳐보면 LISTEN 상태인 것을 직접 확인할 수 있다.

** 추가 : VNC 서버 접속시 해상도 조절이 되지 않을 때.

추가적으로 VNC 의 해상도 조절이 잘 안되는 경우에는 /etc/init.d/vncserver 라는 스크립트를 직접 수정해서
VNC서버 실행되는 조건을 직접 수정해 버리는 방법도 있다.

centos 기준으로 원래는 "${VNCSERVERARGS[${DISP}]}" 의 변수가 들어가 있는 부분을
아래처럼 -geometry 1280x800 로 바꿔버리니 VNC서버가 시작될 때 해상도를 아래 해상도로 지정해서 띄우게 됨.ㅋ
runuser -l ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} -geometry 1280x800"