VNC – tigervnc

測試環境為 CentOS 7 / CentOS 8 .測試環境建議可以先關閉 firewall 與 selinux http://benjr.tw/95368

先來討論一下 Minimal Install 可以使用 VNC 嗎?

我們得先了解 X-Window 的運作方式, X Server 負責顯示介面與繪圖,並將使用者的輸入行為告知 X Client,而 X client application 則是負責產生繪圖的數據並回傳給 X Server,通常我們的 dispaly server 和 client application 都是在同一台電腦上面.

如果是使用最小安裝 (Minimal Install) 第一步需要幫 CentOS 安裝 GNOME 桌面系統 (GNOME Desktop),不可能一個一個套件安裝,可以直接透過 group install 即可.關於 group install 可以參考 http://benjr.tw/96155

[root@localhost ~]# yum groups install "GNOME Desktop"
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: centos.cs.nctu.edu.tw
 * extras: centos.cs.nctu.edu.tw
 * updates: centos.cs.nctu.edu.tw
Resolving Dependencies
--> Running transaction check
---> Package ModemManager.x86_64 0:1.1.0-8.git20130913.el7 will be installed
--> Processing Dependency: ModemManager-glib(x86-64) = 1.1.0-8.git20130913.el7 for package: ModemManager-1.1.0-
....
[root@localhost ~]# reboot

再來安裝 CentOS 7 /8 所使用的 TigerVNC.這跟之前使用的 VNC http://benjr.tw/715 不太一樣.

[root@localhost ~]# yum install tigervnc-server tigervnc-server-module -y

與遠端程式 vncviewer

[root@localhost ~]# yum install tigervnc -y

設定 VNC 的使用者可以登入(帳號同系統使用者,但密碼需額外設定),並啟動服務.

[root@localhost ~]# sudo su - ben
Last login: Thu Dec 12 23:13:42 CST 2019 on pts/1
[ben@localhost ~]$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
[ben@localhost ~]$ vncserver 

New 'localhost.localdomain:1 (ben)' desktop is localhost.localdomain:1

Starting applications specified in /home/ben/.vnc/xstartup
Log file is /home/ben/.vnc/localhost.localdomain:1.log

透過 netstat , ss 來觀察一下 VNC 的狀態.

[ben@localhost ~]$ netstat -tlnp |grep -i 59
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      3320/Xvnc           
tcp6       0      0 :::5901                 :::*                    LISTEN      3320/Xvnc           
[ben@localhost ~]$ ss -tlnp |grep -i 59
LISTEN     0      5            *:5901                     *:*                   users:(("Xvnc",pid=3320,fd=9))
LISTEN     0      5         [::]:5901                  [::]:*                   users:(("Xvnc",pid=3320,fd=10))

的確在 0.0.0.0:5901 (VNC port 5900+1 即 5901 ) 已經開啟 VNC ,這時候就可以透過 vncviewer 去與遠端連線了.

[root@localhost ~]# vncviewer


與剛剛 ben 使用者的密碼.

停用直接 kill 掉即可.

[ben@localhost ~]$ exit
logout
[root@localhost ~]# ps -aux | grep -i vnc
ben        4944  0.0  0.9 208512 37492 pts/1    Sl   23:31   0:00 /bin/Xvnc :1 -auth /home/ben/.Xauthority -desktop localhost.localdomain:1 (ben) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/ben/.vn/passwd -rfbport 5901 -rfbwait 30000
ben        4951  0.0  0.0 113184  1188 pts/1    S    23:31   0:00 /bin/sh /home/ben/.vnc/xstartup
root       5885  0.0  0.0   9092   664 pts/1    R+   23:38   0:00 grep --color=auto -i vnc
[root@localhost ~]# kill 4944
[root@localhost ~]# ps -aux | grep -i vnc
root       5904  0.0  0.0   9092   668 pts/1    S+   23:38   0:00 grep --color=auto -i vnc
[root@localhost ~]# netstat -tlnp |grep -i 59

SystemD

如果要讓 VNC 在開機的時候就啟動可以透過

  • 編輯 SystemD 服務所需檔案 /etc/systemd/system/vncserver@.service
    這邊我一樣使用 ben 這個使用者 ,WorkingDirectory , User , Group 參數需修改.

    [root@localhost ~]# vim /etc/systemd/system/vncserver@.service
    [Unit]
    Description=Remote Desktop VNC Service
    After=syslog.target network.target
    
    [Service]
    Type=forking
    WorkingDirectory=/home/ben
    User=ben
    Group=ben
    
    ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
    ExecStart=/usr/bin/vncserver -autokill %i
    ExecStop=/usr/bin/vncserver -kill %i
    
    [Install]
    WantedBy=multi-user.target
    
  • 每個設定會開啟一個 VNC port 5900+N (N 從 1 開始,即 5901) ,如果要提供多個 VNC 連線,需複製剛剛的設定檔.
    [root@localhost ~]# cp /etc/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
    [root@localhost ~]# cp /etc/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
    
  • Enable (開機後起動服務) 與 start (立即起動服務)
    [root@localhost ~]# systemctl daemon-reload
    [root@localhost ~]# systemctl enable vncserver@:1.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:1.service to /etc/systemd/system/vncserver@:1.service.
    [root@localhost ~]# systemctl enable vncserver@:2.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/vncserver@:2.service to /etc/systemd/system/vncserver@:2.service.
    [root@localhost ~]# systemctl start vncserver@:1.service
    [root@localhost ~]# systemctl start vncserver@:2.service
    [root@localhost ~]# ss -tlnp |grep -i 59
    LISTEN     0      5            *:5901                     *:*                   users:(("Xvnc",pid=2404,fd=9))
    LISTEN     0      5            *:5902                     *:*                   users:(("Xvnc",pid=2775,fd=9))
    LISTEN     0      5         [::]:5901                  [::]:*                   users:(("Xvnc",pid=2404,fd=10))
    LISTEN     0      5         [::]:5902                  [::]:*                   users:(("Xvnc",pid=2775,fd=10))
    

如果只是想要單純把 Linux X-window 的程式執行畫面傳過來,其實透過 SSH + X11 forwarding – http://benjr.tw/3285 就可以了.

沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料