Memasang VNC Server di CentOS 6.5

VNC adalah singkatan dari Virtual Network Computing. Singkatnya VNC adalah remote desktop system, menyediakan fasilitas untuk mengontrol (atau berbagi) desktop dari komputer lain. VNC Server adalah komputer yang menjalankan servis vncserver dan menyediakan akses bagi komputer lain untuk mengontrol desktop-nya. VNC Client adalah semua komputer lain yang mengakses servis VNC untuk mengambil alih kontrol desktop. Ini adalah catatan saya saat belajar menghidupkan VNC Server di CentOS 6.5. Beberapa hal yang perlu saya lakukan untuk memasang VNC Server antara lain seperti berikut ini :

  1. Di CentOS 6.5 vncserver disediakan oleh paket tigervnc-server. Untuk memasang paket tigervnc-server dan segala dependency-nya saya gunakan perintah berikut ini :

    root@vm01:~# yum install tigervnc-server*
    
  2. Setelah semua paket yang dibutuhkan terpasang dengan sukses, selanjutnya saya perlu memodifikasi berkas /etc/sysconfig/vncservers. Berikut ini adalah contoh berkas vncservers yang belum dimodifikasi :

    root@vm01:~# cat /etc/sysconfig/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 this URL:
    # http://kbase.redhat.com/faq/docs/DOC-7028
    
    
    # Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
    
    
    # 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 -localhost"
    root@vm01:~# 
    

    Saya perlu menambahkan 2 baris di bawah ini :

    VNCSERVERS="2:ttirtawi"
    VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
    

    Tambahan 2 baris di atas maksudnya :

    • 2:ttirtawi : maksudnya VNC Server akan LISTEN di port 5902 hanya untuk user ttirtawi. Contoh lain, 3:admin maka artinya VNC tersedia di port 5903 hanya untuk user admin.
    • -geometry : opsi ini maksudnya ukuran layar yang tersedia saat user membuka VNC session. Pada contoh ini saya memilih ukuran 800×600.
    • -nolisten tcp : sampai saat ini saya belum tahu apa gunanya opsi ini.
    • -localhost : opsi ini berguna untuk membatasi akses VNC hanya dari localhost saja atau dari dalam mesin yang sama.
  3. Setelah konfigurasi sudah selesai saya coba untuk mengaktifkan vncserver dengan perintah seperti berikut ini :

    root@vm01:~# service vncserver start
    Starting VNC server: 2:ttirtawi
    VNC password for user ttirtawi is not configured
                                                               [FAILED]
    root@vm01:~# 
    

    Servis VNC tidak bisa diaktifkan bila user yang bersangkutan belum memiliki password VNC.

  4. Untuk mengatur VNC password untuk user tertentu saya perlu menggunakan perintah vncpasswd seperti contoh berikut ini :

    root@vm01:~# su - ttirtawi
    ttirtawi@vm01:~$ vncpasswd
    Password:
    Password must be at least 6 characters - try again
    Password:
    Verify:
    ttirtawi@vm01:~$ 
    

    Perintah vncpasswd harus dijalankan oleh user yang bersangkutan, dalam contoh ini harus dijalankan oleh user ttirtawi.

  5. Setelah user ttirtawi memiliki VNC password, saya bisa mengaktifkan servis vncserver :

    root@vm01:~# service vncserver start
    Starting VNC server: 2:ttirtawi xauth:  creating new authority file /home/ttirtawi/.Xauthority
    xauth: (stdin):1:  bad display name "vm01.gbt733.net:2" in "add" command
    
    
    New 'vm01.gbt733.net:2 (ttirtawi)' desktop is vm01.gbt733.net:2
    
    
    Creating default startup script /home/ttirtawi/.vnc/xstartup
    Starting applications specified in /home/ttirtawi/.vnc/xstartup
    Log file is /home/ttirtawi/.vnc/vm01.gbt733.net:2.log
    
    
                                                               [  OK  ]
    root@vm01:~# 
    
  6. Pada contoh di atas saya mendapati error :

    xauth: (stdin):1:  bad display name "vm01.gbt733.net:2" in "add" command
    

    Error semacam itu karena nama hostname mesin tidak ditemukan dalam berkas /etc/hosts. Untuk memperbaiki error tersebut yang perlu saya lakukan adalah menambahkan hostname & IP address mesin vm01 seperti contoh berikut ini :

    root@vm01:~# vi /etc/hosts
    
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    
    192.168.10.41     vm01     vm01.gbt733.net
    root@vm01:~#  
    

    Setelah modifikasi /etc/hosts, saya tidak mendapati error yang sama lagi :

    root@vm01:~# service vncserver restart
    Shutting down VNC server: 2:ttirtawi                       [  OK  ]
    Starting VNC server: 2:ttirtawi
    New 'vm01.gbt733.net:2 (ttirtawi)' desktop is vm01.gbt733.net:2
    
    
    Starting applications specified in /home/ttirtawi/.vnc/xstartup
    Log file is /home/ttirtawi/.vnc/vm01.gbt733.net:2.log
    
    
                                                               [  OK  ]
    root@vm01:~#
    

Seperti sudah disebut pada langkah nomor 2, vncserver akan listen di port 5902. Untuk memastikan servis vncserver sudah aktif di port 5902, saya bisa cek dengan menggunakan perintah netstat seperti contoh di bawah ini :

root@vm01:~# netstat -an | grep 5902
tcp        0      0 127.0.0.1:5902              0.0.0.0:*                   LISTEN     
root@vm01:~# 

Di Mac saya gunakan aplikasi Screen Sharing, aplikasi Screen Sharing diakses dari Terminal dengan perintah :

open vnc://<IP>:5902

Meskipun sudah benar aktif di port 5902, saya masih belum bisa mengakses VNC dari Mac.

Ada 2 hal yang membuat saya belum bisa mengakses VNC pada port 5902 tadi :

  1. Saya belum mengatur firewall pada mesin vm01 untuk mengijinkan akses ke port 5902. Berikut ini adalah cara menambahkan rule iptables yang saya gunakan :

    root@vm01:~# iptables -I INPUT -p tcp -s 192.168.10.0/24 --dport=5902 -j ACCEPT
    

    Untuk memeriksa status firewall setelah penambahan rule baru tadi saya gunakan perintah seperti berikut ini :

    root@vm01:~# service iptables status
    Table: filter
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination        
    1    ACCEPT     tcp  --  192.168.10.0/24      0.0.0.0/0           tcp dpt:5902
    2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0          
    4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          
    5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
    6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    
    
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination        
    1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination        
    
    
    root@vm01:~# 
    

    Supaya rule tadi tidak hilang saat mesin vm01 reboot, saya harus menyimpannya secara permanen dengan menggunakan perintah berikut ini :

    root@vm01:~# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
    root@vm01:~#
    
  2. Hal kedua yang menghambat akses VNC adalah adanya opsi -localhost pada berkas /etc/sysconfig/vncservers (lihat poin nomor 2 pada langkah-langkah di atas). Opsi -localhost membuat vncserver hanya tersedia pada IP loopback mesin vm01 & tidak tersedia pada IP publiknya (dalam contoh ini vm01 memiliki IP 192.168.10.41). Alternatif solusinya ada 2 :

    1. Menghapus opsi -localhost dari dalam berkas /etc/sysconfig/vncservers & merestart servis vncserver. Begitu opsi -locahost dihapus, saya langsung bisa mengakses VNCnya terlihat dari munculnya jendela VNC password seperti contoh di bawah ini :

    2. Tetap menggunakan opsi -localhost & menggunakan SSH tunnel untuk mengakses VNC. Silakan lihat contohnya di bawah ini :

      Pada contoh di atas SSH dengan menggunakan opsi -L maksudnya, semua request ke port 5902 di Mac akan di-forward ke port 5902 milik vm01. Lalu saya tinggal buka Screen Sharing ke IP localhost (127.0.0.1) port 5902 saja.

Karena dalam contoh ini, mesin vm01 belum memiliki desktop environment maka VNC hanya menampilkan layar hitam seperti ini :

Alternatifnya saya bisa memasang desktop environment dengan menggunakan perintah seperti ini :

        root@vm01:~# yum groupinstall "Desktop"

Perintah di atas akan memasang GNOME Desktop Environment, GNOME adalah default desktop environment yang digunakan di CentOS & RedHat. Bisa saja kita memasang desktop environment lain seperti KDE atau XFCE, masalah selera saja.

Setelah memasang desktop environment, kita perlu me-restart servis vncserver sekali lagi

root@vm01:~# service vncserver restart
Shutting down VNC server: 2:ttirtawi                       [  OK  ]
Starting VNC server: 2:ttirtawi
New 'vm01.gbt733.net:2 (ttirtawi)' desktop is vm01.gbt733.net:2


Starting applications specified in /home/ttirtawi/.vnc/xstartup
Log file is /home/ttirtawi/.vnc/vm01.gbt733.net:2.log


                                                           [  OK  ]
root@vm01:~#

Nah sekarang bila saya mengulang akses VNC dari Mac, saya akan disuguhi tampilan standar GNOME seperti berikut ini :