VNC를 이용해 X11의 응답속도 개선 방법 (X11 속도 빨리(빠르게) 하다)

X11

image: https://lifetrg.files.wordpress.com/2017/11/0_users_jbkim_dropbox_hobby_blog_x11withvnc_x113.png
X11은 X Window System이다. Linux OS에 그림을 표시할때 사용이 된다. 또한 원격 서버 프로그램의 GUI를 볼때 사용이 된다.
image: https://lifetrg.files.wordpress.com/2017/11/1_users_jbkim_dropbox_hobby_blog_x11withvnc_rootlogo1.gifimage: https://lifetrg.files.wordpress.com/2017/11/2_users_jbkim_dropbox_hobby_blog_x11withvnc_higgs1.jpg
고에너지 실험 물리학 분야에는 ROOT (CERN이 개발했으며, 데이터 분석에 사용이 된다) 이 성능이 좋은 리눅스 서버에 설치 되어있다. 데이터 분석가는 SSH을 통해 서버에 접속해서 데이터 분석을 하고 X11을 이용해 데이터 분석의 히스토그램을 본다.
image: https://lifetrg.files.wordpress.com/2017/11/8_users_jbkim_dropbox_hobby_blog_x11withvnc_farawayserver_kr.png
하지만 서버가 멀리 있는 나라에 위치해 있을때 문제가 생긴다. 네트워크 지연 (latency)이 높아서 X11 사용이 매우 어렵다. (X11의 통신 프로토콜은 “수다”스러워서 네트워크 지연에 취약하다. 따라서 히스토그램을 볼때 몇분이 걸릴수도 있다.) 보통은 이 문제를 아래처럼 해결한다.

 

  • ROOT을 개인 컴퓨터에 설치해 사용한다.
    • 고성능 서버를 사용할수 없다.
  • 서버에 히스토그램을 파일로 저장해서 개인 컴퓨터에 복사한다.

    • 추가적인 단계 때문에 데이터분석이 느려진다.
  • 서버가 위치하는 나라로 여행간다.

    • 돈과 시간이 소모 된다.
image: https://lifetrg.files.wordpress.com/2017/11/9_users_jbkim_dropbox_hobby_blog_x11withvnc_vncsolution_kr.png
이 문제를 다른 방식으로 해결하는 방법이 있다. VNC과 X11을 같이 사용하면 된다. X11만 사용했을때보다 훨씬 빠르다. 히스토그램을 보는데 1분 걸리던 것이 1초로 줄어들때도 있다. 이 방법을 사용하면 고성능의 서버를 사용할수 있고, 파일을 복사 안해도 되며, 해외로 가지 않아도 된다.
이 해결방법이 사용되기 위해서는 SSH tunneling이 필요하다. 서버가 SSH tunneling을 지원하는지를 확인 하기 위해서 아래의 명렁어를 통해 확인할수 있다.
ssh -L 9999:localhost:22 user_name@name_of_server
만약 성공적으로 접속한다면, SSH tunneling을 사용할수 있다.

VNC

image: https://lifetrg.files.wordpress.com/2017/11/5_users_jbkim_dropbox_hobby_blog_x11withvnc_vnc1.png
VNC는 Virtual Network Computing의 약자이다. 원격으로 컴퓨터를 조정할때 사용이 된다. VNC 프로토콜은 픽셀 단위로 통신을 하며, X11 프로토콜보다 응답속도면에서 훨씬 효율적이다. VNC을 이용하기 위해서는 VNC server 프로그램이 서버에 설치 되어 있어야하고 VNC client이 개인 컴퓨터에 설치 되어 있어야한다.
대부분 리눅스 서버에는 VNC server 프로그램이 기본적으로 설치되어 있다. Google에 “VNC client”을 검색하면 RealVNC가 첫번째로 검색 된다. RealVNC의 경우에는 VNC viewer을 설치하라. (VNC connect을 설치 하지 마라.) 이 VNC viewer은 윈도우, 리눅스, 맥OS에 설치가 된다. (하지만 맥OS의 경우에는 맥OS에 기본적으로 설치 되어있는 VNC viewer을 사용할수 있다.)
VNC server 프로그램은 서버의 포트 하나를 사용한다. VNC client은 그 포트를 통해 서버에 접속한다. 하지만 일반적으로는 서버의 포트들은 보안 이유 때문에 닫혀있기 때문에 VNC를 사용할 수 없다. 이를 극복하기 위해 SSH 터널링이 사용된다.

SSH 터널링

image: https://lifetrg.files.wordpress.com/2017/11/10_users_jbkim_dropbox_hobby_blog_x11withvnc_sshtunnel_kr.png
SSH 터널링은 사용자가 접속 할수 없는 서버 포트에 접속 할 수 있게 한다. 이것을 사용하면 통신이 암호화된다. 본인 컴퓨터의 포트와 서버의 포트를 연결할수 있다. 이를 통해 사용자는 서버의 어떠한 포트 이라도 접속할 수 있게 된다.

응답 속도 개선 방법

image: https://lifetrg.files.wordpress.com/2017/11/11_users_jbkim_dropbox_hobby_blog_x11withvnc_vncsolution2_kr.png
X11을 VNC와 이용하려면 여러 단계가 필요하다. VNC server 프로그램이 서버에 실행이 되어야한다. SSH 터널링을 통해 자신의 컴퓨터와 서버의 특정포트와 연결 해야한다. VNC client을 본인의 컴퓨터에 실행해 VNC server 프로그램에 접속 해야한다. 서버에는 X11을 VNC server 프로그램으로 연결해야한다. 아래에 구체적인 명령어들이 적혀있다.
0. 새로운 터미털에 SSH을 통해 서버에 접속한다.
localhost$ ssh user_name@name_of_server
localhost$ 은 자신의 컴퓨터를 의미한다. ($ 이전에 있는 글자들은 명령어들이 아니고 명렁어들이 실행되어야하는 위치를 표시이다. 이전에 있는 글자들을 치지 마라.)
1. 같은 터미널에 (서버에) VNC server 프로그램을 실행하라.
server$ vncserver
이 명렁어를 처음으로 실행하면 VNC server 프로그램에 접속할때 사용되는 비밀번호를 입력 해야한다. 위 명령어를 입력하면 아래처럼 여러줄이 출력된다.
New 'name_of_server:1 (user_name)' desktop is name_of_server:1

Starting applications specified in /home/user_name/.vnc/xstartup 
Log file is /home/user_name/.vnc/name_of_server:1.log
콜론 ‘:’ 이후의 숫자는 이후 단계에 사용된다. 위의 경우에는 name_of_server:1 을 볼수 있는데 숫자 1이 다음 단계들에 사용이 된다. 이 숫자는 이후 단계에는 display_number 칭하게 된다.
2. 본인 컴퓨터의 새로운 터미널을 통해 본인 컴퓨터와 서버의 포트을 SSH 터널링을 통해 연결해라.
localhost$ ssh -L vnc_client_port:localhost:vnc_server_port user_name@name_of_server
vnc_server_port은 서버의 포트이다. 일반적으로 5900 + display_number 인 숫자로 정해진다. VNC server이 그 포트를 사용하기 때문인다. vnc_client_port은 본인 컴퓨터의 포트이다. 이 포트는 서버의 vnc_server_port 포트와 연결이 된다.
아래는 숫자가 포함된 예이다.
localhost$ ssh -L 6666:localhost:5901 user_name@name_of_server
3. 본인의 컴퓨터에 VNC client을 열고 “localhost:vnc_client_port”에 접속하라 (큰따음표 없이 입력하라). 위 경우에는 “localhost:6666”이 된다. 많은 경우에는 아래 명령어를 통해 이를 할수 있다.
localhost$ /path_to_VNC_client/vncviewer localhost:vnc_client_port
만약 2 단계에서 다른 vnc_client_port 포트를 사용하면 그 숫자가 입력 되어야한다. 맥OS의 경우에는 VNC client의 경로는“/Applications/VNC\ Viewer.app/Contents/MacOS/vncviewer” 이다.
아래는 숫자가 포함된 예이다.
localhost$ /path_to_VNC_client/vncviewer localhost:6666
접속할때 1단계에서 입력한 비밀번호를 입력해야한다. 또한 통신 보안 경고가 있지만 SSH tunnel을 이용하기 때문에 보안적인 걱정은 안해도 된다.
4. (마지막 단계) 서버에 접속된 터미널(X11이 사용될 터미널)에, 환경 변수를 설정해 X11이 VNC server 프로그램으로 포워딩 할수 있게 하라.
server$ export DISPLAY=:display_number
아래는 숫자가 포함된 예이다.
server$ export DISPLAY=:1
위 명령어는 bash 명령어이다. 만약 다른 shell을 이용하면, DISPLAY 환경변수를 :display_number 으로 설정하라.
이제 이 터미털에, X11 프로그램을 실행하면, VNC client에 그림이 나타나야한다. 시계를 보여주는 “oclock” 명령어로 테스트 할수 있다.
5. (마무리) 만약 모든 X11 작업을 다 끝냈다면, VNC server을 꺼야한다. 아래 명렁어를 통해 끌수 있다.
server$ vncserver -kill :display_number
아래는 숫자가 포함된 예이다.
server$ vncserver -kill :1
Advertisements