文章目錄
前言
1. 圖形化桌面配置 VNC 遠端連線
1.1. 安裝 VNC 服務
1.2. 臨時啟用 VNC 遠端連線
1.2.1. 單終端啟用 VNC 遠端連線
1.2.2. 多終端啟用 VNC 遠端連線
1.3. 開機自啟動 VNC 服務實現遠端連線
1.3.1. 設定以 root 使用者身份遠端連線
1.3.2. 設定以普通使用者身份遠端連線
2. 最小化安裝配置 VNC 遠端連線
3. 關於 VNC 的其它說明
3.1. 幾條簡單的 vnc 維護命令
3.2. 關於遠端桌面模糊的處理方法
總結
前言
前段時間因為一個專案我需要遠端訪問 linux 伺服器的桌面,雖然 Xmanager 提供的 Xstart 可以實現遠端呼叫圖形化,但是使用體驗沒有 VNC 好,所以針對如何配置 VNC 遠端連線,心血來潮寫了這樣一篇部落格。
需要說明的是,本文所述的全部操作都是基於系統(CentOS 7.6)已經完成了如下的配置:
設定好主機名;
關閉系統防火牆;
禁用 selinux 模組;
配置好本地 yum 源。
1. 圖形化桌面配置 VNC 遠端連線
1.1. 安裝 VNC 服務
在已經安裝了桌面圖形化的作業系統中配置 VNC 遠端連線還是比較簡單的,只需要配置好本地 yum 源,然後安裝上 tigervnc 和 tigervnc-server 安裝包即可,下面以我的一臺 Nginx 伺服器進行操作展示。
首先,Nginx 伺服器並沒有預先安裝 vnc 服務:
[root@nginx ~]# which vncserver
/usr/bin/which: no vncserver in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
1
2
接下來,我們來安裝 vnc 服務:
[root@nginx ~]# yum search tigervnc --showduplicates //可以看到本地 yum 源提供的 vnc 版本。
[root@nginx ~]# yum -y install tigervnc*
1
2
是不是很意外?安裝 vnc 服務確實只需要這麼簡單的一步即可 ~~
1.2. 臨時啟用 VNC 遠端連線
所謂臨時啟用 VNC 遠端連線,顧名思義就是因為一些特殊要求,使用者需要臨時使用 VNC 遠端連線到桌面進行一些操作,當操作完成後,至於 VNC 服務還要不要啟動,對使用者來說根本不在意。並且,如果沒有配置 VNC 自啟動服務,實際上當系統發生重啟後,VNC 服務是不會隨機自啟動的。
臨時啟用 VNC 遠端連線又可以簡單分為以下兩種情況:
【單終端】只需要一個遠端視窗供使用者進行操作即可;
【多終端】需要多個遠端視窗供多個使用者進行操作(比如多個使用者都需要圖形化介面來配置多個不同的應用服務)。
注意事項:以上兩種情況,使用者在遠端連線桌面時都是以 root 超級管理員身份登入的,所以許可權是最大的;因此,授權給使用者連線的時候需要格外注意下。如果希望給使用者分配一個普通的遠端賬號,請參考 1.3.2 章節的內容。
1.2.1. 單終端啟用 VNC 遠端連線
伺服器端配置:
[root@nginx ~]# vncserver
[root@nginx ~]# vncserver -list
1
2
客戶端配置遠端連線:
首選需要下載 VNC® Viewer 客戶端。
安裝並開啟 VNC Viewer 客戶端,按照下圖所示進行配置:
輸入在伺服器端啟動 vnc 服務時所設定的密碼:
此時,我們就可以遠端訪問伺服器的圖形化桌面啦:
1.2.2. 多終端啟用 VNC 遠端連線
其實多終端也很好理解,就是啟用多個 vnc 服務,如下圖所示:
此時,在客戶端我們就可以使用3個視窗進行連線,如下圖所示:
1.3. 開機自啟動 VNC 服務實現遠端連線
在配置自啟動服務之前,我們可以先把前面啟動的 vncserver 全部 kill 掉,方法如下:
[root@nginx ~]# vncserver -kill :1
[root@nginx ~]# vncserver -kill :2
[root@nginx ~]# vncserver -kill :3
1
2
3
1.3.1. 設定以 root 使用者身份遠端連線
開機自啟動 VNC 服務,並設定以 root 使用者身份遠端連線後,使用者可以隨時遠端使用伺服器的圖形化桌面,即使系統發生重啟 vnc 也會自己把服務啟動起來,並且使用者每次都是以 root 超級管理員的身份連線到桌面。
首先我們要製作系統服務檔案:
其實 /lib/systemd/system/vncserver@.service 檔案中預設的註釋資訊裡已經交代了配置服務的方法,下面就是按照註釋裡面的內容來進行操作:
[root@nginx ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
[root@nginx ~]# vim /etc/systemd/system/vncserver@:1.service //服務檔案配置資訊如下。
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
透過對比原始檔不難發現,其實就是將原始檔中的 <USER> 替換成了 root,只不過 root 使用者不在 /home 目錄下,所以在配置以 root 使用者身份遠端連線時,需要將服務檔案前面的 /home 刪除掉:
重新載入服務配置檔案,並將服務設定為開機自啟動:
[root@nginx ~]# systemctl daemon-reload
[root@nginx ~]# systemctl enable vncserver@:1.service
1
2
透過下面的命令來設定 vncserver 的密碼:
[root@nginx ~]# vncpasswd
Password: //輸入密碼。
Verify: //確認密碼。
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
1
2
3
4
5
啟動 vnc 服務並檢視服務狀態:
[root@nginx ~]# systemctl start vncserver@:1.service
[root@nginx ~]# systemctl status vncserver@:1.service
1
2
OK,此時我們就可以在客戶端進行連線測試,甚至可以直接將伺服器進行重啟然後在進行連線測試。
1.3.2. 設定以普通使用者身份遠端連線
開機自啟動 VNC 服務,並設定以普通使用者身份遠端連線後,使用者可以隨時遠端使用伺服器的圖形化桌面,即使系統發生重啟 vnc 也會自己把服務啟動起來,但是使用者每次都是以普通使用者的身份連線到桌面。
首先,我們需要先建立一個普通使用者:
[root@nginx ~]# useradd vncuser1 //新建一個名為 vncuser1 的普通使用者。
[root@nginx ~]# passwd vncuser1
Changing password for user vncuser1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
1
2
3
4
5
6
同樣,我們也需要先製作系統服務檔案:
[root@nginx ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service
[root@nginx ~]# vim /etc/systemd/system/vncserver@:2.service //服務檔案配置資訊如下。
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l vncuser1 -c "/usr/bin/vncserver %i"
PIDFile=/home/vncuser1/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
透過對比原始檔不難發現,只需要將原始檔中的 <USER> 替換成 vncuser1 即可:
重新載入服務配置檔案,並將服務設定為開機自啟動:
[root@nginx ~]# systemctl daemon-reload
[root@nginx ~]# systemctl enable vncserver@:2.service
1
2
透過下面的命令來設定 vncserver 的密碼(注意:此時需要在 vncuser1 使用者下設定密碼而非在 root 使用者下哦):
[root@nginx ~]# su - vncuser1
[vncuser1@nginx ~]$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
1
2
3
4
5
6
啟動 vnc 服務並檢視服務狀態(啟動服務還是在 root 使用者下執行):
[root@nginx ~]# systemctl start vncserver@:2.service
[root@nginx ~]# systemctl status vncserver@:2.service
1
2
OK,此時我們就可以在客戶端進行連線測試,甚至可以直接將伺服器進行重啟然後在進行連線測試。
其實到這裡該配置的都已經配置好了,不過有個有意思的現象大家可以注意下。當我們既啟動了 root 使用者的 vnc 服務,又啟動了 vncuser1 使用者的 vnc 服務,此時在 root 使用者下我們只能透過埠號來判斷啟動了幾個 vnc 服務,而不能單純的以 vncserver -list 來進行判斷。
透過埠號我們就可以看出確實啟動了兩個 vnc 服務(預設從 5900 往後面順延):
[root@nginx ~]# netstat -antp |grep 590
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 10147/Xvnc //root 使用者的 vnc 服務。
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 10146/Xvnc //vncuser1 使用者的 vnc 服務。
tcp6 0 0 :::5901 :::* LISTEN 10147/Xvnc
tcp6 0 0 :::5902 :::* LISTEN 10146/Xvnc
1
2
3
4
5
2. 最小化安裝配置 VNC 遠端連線
當系統預設使用最小化安裝,後期想要啟用圖形化桌面並配置 vnc 遠端連線,其實也很簡單,主要需要下面兩個步驟。
第一步:將最小化安裝升級為圖形化桌面。
配置圖形化介面請參考 《CentOS 7 最小化系統安裝圖形化桌面》 這篇部落格。
第二步:按照本文上面所述配置 vnc 服務即可。
3. 關於 VNC 的其它說明
3.1. 幾條簡單的 vnc 維護命令
啟動 vnc 服務:
# vncserver
1
關閉 vnc 服務:
# vncserver -kill <X DISPLAY>
1
檢視當前 vnc 服務執行列表:
# vncserver -list
1
修改 vnc 連線密碼:
# vncpasswd
1
修改桌面解析度:
# vncserver -geometry 1920x1080 //其實就是新啟動一個解析度為 1080p 的 vnc 服務視窗。
1
3.2. 關於遠端桌面模糊的處理方法
有的朋友可能發現了使用 VNC Viewer 去連線遠端桌面的時候,桌面背景糊的跟馬賽克一樣 ~~ 雖說這種狀態下並不影響我們使用 Terminal 以及其它類似於火狐瀏覽器這樣的圖形化工具,但是終究還是覺得醜哇 …… 下圖就是這個醜樣的展示,它和解析度無關,主要是 VNC Viewer 獲取圖片質量的設定問題。
OK,開啟我們的 VNC Viewer 軟體,找到目標 Connection 編輯其屬性,在 Options 選項中我們可以看到 Picture quality 預設設定為 Automatic,我們只需要將其改為 High 就可以完美解決這個問題啦。
設定好以後重新連線桌面,此時的體驗就很 nice 啦。
總結
其實日常 linux 運維工作中,很少會去用到伺服器的桌面,至少對我而言是這樣的。因為 linux 本身就需要運維人員掌握大量的命令列工具去配置各種各樣的系統服務和應用服務,如果一些簡單的操作還需要依賴於桌面去點點點,那就失去了 linux 系統本身的優越性。當然嘍,有些服務還是透過圖形化配置會更加方便、簡單一些,如配置 Oracle RAC 資料庫啥的。
個人感覺這篇部落格寫的已經很詳細了,以後再次面臨訪問遠端桌面的需求,就可以直接拿來用了。以上,若有不當之處,歡迎朋友們及時指正!
————————————————
版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。
原文連結:https://blog.csdn.net/hffwj/article/details/124450231