Linux - TigerVNC Configure


VNC

Virtual Network Computing (VNC) 是一個圖形化桌面共享系統, 可以遠程連接計算機, 使用鍵盤和鼠標.

本文包含 在RHEL8上,安裝和配置 VNC server 的步驟  . 我們還會展示如何通過SSH通道安全的連接.

 

環境

  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 8.0
  • Red Hat Enterprise Linux 8.1
  • Red Hat Enterprise Linux 8.2
  • tigervnc-server

 

問題

  • 如何通過 VNC 遠程使用用戶圖形界面?
  • 如何在RHEL8.0到8.2中配置VNC?
  • 升級到RHEL 8.3后,VNC服務器無法啟動。
  • 安裝tigervnc-server-1.10.1-7.el8后,VNC服務器無法啟動。
  • 使用vncserver命令無法啟動Xvnc進程。
  • 如何在RHEL 8.3中配置VNC服務器?
  • 如何在Red Hat Enterprise Linux 7/8 - 8.2中配置虛擬網絡計算(VNC)中提到的Xvnc配置步驟在RHEL 8.3中不起作用。

 

決議

對於RHEL8.3 + (tigervnc-server-1.10.1-7.el8),請查看 Are there any changes to the default vncserver configuration in RHEL8.3.0?

 

自動配置

Red Hat Access Labs提供了一個VNC配置器工具,用於根據您的環境和部署目標自動生成VNC配置。VNC配置器合並了本文檔中包含的信息,但使生成有效的和支持推薦的配置變得更容易。

 

注意:此工具不能用於RHEL8。

 

前提

跟隨教程, 您需要以具有 sudo權限 的用戶身份登錄到遠程RHEL8機器上。

 

安裝桌面環境

通常, 服務器沒有安裝桌面環境. 如果你想連接的機器沒有 GUI , 則安裝桌面環境. 否則, 跳過.

運行一下命令 安裝 Gnome 圖形界面, 默認的桌面環境 

# yum group install GNOME base-x

or 

# yum groupinstall "Server with GUI"

依賴你的系統, 下載 安裝 Gnome 包和一些依賴需要一些時間.


安裝 VNC Server

TigerVNC 是 一直被維護的高性能開源 VNC server.  在 RHEL 默認倉庫中可用. 安裝:

# yum -y install tigervnc-server

 

注意:

 

配置 VNC Server

在最新版本的tigervnc-server中,vncserver配置文件的位置已經改變。現在默認的配置文件在/etc/tigervnc/目錄下。這個目錄中有三個主要文件。

  • vncserver.users
  • vncserver-config-defaults(默認值)
  • vncserver-config-mandatory

 在 /etc/tigervnc/vncserver.users 中添加一個用戶映射。

通過這個選項,管理員可以將用戶映射到一個特定的端口上,映射應該在 /etc/tigervnc/vncserver.users 配置文件中完成。這種映射應該在 /etc/tigervnc/vncserver.users 配置文件中完成。

:x=user    

例如:

:1=vncuser1
:2=vncuser2

注意: 

Red Hat Enterprise Linux 只支持每個系統的每個 GUI 會話有一個唯一的用戶,因此,每個用戶使用一個 vnc 會話。因此,每個用戶使用一個 vnc session。不要為單個用戶配置多個 vnc session。詳情請參考: How many GUI sessions can I log a user into?

 

在RHEL8中, TigerVNC 是使用 systemd 守護進程配置

這個栗子, 我們將告訴你如何配置 TigerVNC  一個或多個VNC用戶 

  • 創建一個 專門使用VNC使用系統的 VNC用戶賬戶(如果不存在).
# useradd <username>
# passwd <username> 

e.g:

# useradd testuser1
# passwd testuser1
  • 之后以用戶身份登錄,使用  vncpasswd 命令 創建 密碼 . 以將要訪問VNC服務器的用戶運行該命令, 不要使用 sudo 命令:
$ vncpasswd    

系統將提示您輸入並確認密碼,以及是否將其設置為只讀密碼。 如果選擇設置僅查看密碼,則用戶將無法使用鼠標和鍵盤與VNC實例進行交互。

第一次運行vncpasswd命令時,會在用戶的~/.vnc目錄下創建並存儲密碼文件。

Password:
Verify:
Would you like to enter a view-only password (y/n)? n A view-only password is not used

如果你添加第二個用戶,  切換用戶 並且 使用 vncpasswd 設置密碼.

  • 為用戶創建VNC server 配置文件, 復制原型VNC配置文件並為用戶編輯.

e.g:

# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
  • 用文本編譯器 編輯 /etc/systemd/system/vncserver@:1.service 文件, 並將 "USER" 字符串 替換 合適的 vncuser 的用戶名.在這個例子中,用戶將是 "testuser1".
  • 為每一個實例修改 vncserver@:<num>.service. 你應該為每個用戶創建一個單元文件。

注意:

    • 如果用戶是root,請將PIDFile行的路徑改為/root/.vnc/%H%i.pid。不適用於RHEL7.8(及以上)和RHEL8.2.0。
    • 從RHEL7.8和RHEL8.2.0開始,單元文件的外觀與上面的不同。除了替換<USER>之外,不要替換單元文本的其他部分。             
  • 要添加更多的用戶,如上所述,創建一個新的 "vncserver@:#.service "文件,並將 "USER "字符串改為其他用戶。
  • 要向VNC服務器傳遞選項,如分辨率、顏色深度等,請按照下面的例子將這些選項添加到ExecStart=中。
ExecStart=/sbin/runuser -l testuser1 -c "/usr/bin/vncserver %i -geometry 1024x768 -depth 24"

2. 下一步, 配置 TigerVNC 使用 Gnome 桌面. VNC 從 ~/.vnc/config 讀取用戶配置設置. 

打開文件 並 添加以下內容:

vim ~/.vnc/config
session=gnome geometry=1920x1200 localhost alwaysshared

  session選項指定要啟動的會話,geometry選項指定VNC桌面的大小。

  保存並關閉文件. 如果您要添加多個用戶,請重復相同的步驟。

注意:

  • 從RHEL7.4開始,支持的服務器選項已經被移到了~/.vnc/目錄下的一個名為'config'的新文件中。所以不需要在上面提到的行中添加這些選項。

  3. TigerVNC提供了一個文件,允許你將用戶映射到一個特定的端口。該映射在 /etc/tigervnc/vncserver.users 文件中配置。

sudo vim /etc/tigervnc/vncserver.users

  這個文件 使用  <display_port>=<username>  語法. 在下面的例子中,我們將顯示端口:1映射到用戶linuxize。使用同樣的格式來添加更多的用戶。

# TigerVNC User assignment
#
# This file assigns users to specific VNC display numbers.
# The syntax is <display>=<username>. E.g.:
#
# :2=andrew
# :3=lisa
:1=linuxize

:1是VNC服務器運行的顯示端口號。在我們的例子中,服務器運行在TCP端口5901(5900+1)上。例如,如果將另一個用戶映射到顯示端口:2,服務器也將在5902端口(5900+2)上監聽。

需要理解的是,在使用VNC服務器時,:X是指5900+X的顯示端口。

 

配置 防火牆

  • 接下來配置防火牆接受VNC的傳入連接。執行此命令,在防火牆中打開與VNC相關的端口。
# firewall-cmd --permanent --zone=public --add-port 5901/tcp
  • 該命令只為傳入的連接打開TCP端口5901。當需要時,同樣的命令也可以用來打開其他端口。
  • 重新加載防火牆,使防火牆規則生效。
# firewall-cmd  --reload
  • 重載配置文件

#  systemctl daemon-reload

 

 

啟動 TigerVNC Server

啟動並開機啟動 vnc service:

  • 要確保服務在系統啟動時啟動。
# systemctl enable vncserver@:1.service  
  • 為映射的 顯示端口:1 的用戶 啟動 和 允許開機啟動 VNC service , 輸入:
sudo systemctl enable vncserver@:1 --now

VNC Server 將 監聽 端口 5901

  • 配置完成后, 最后一步 啟動 VNC Server.
# systemctl start vncserver@:1.service 

你可以通過以下方式 驗證 service 是否 成功 啟動:

sudo systemctl status vncserver@:1
vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-12-17 21:49:41 UTC; 8s ago
  ...

要為其他用戶啟用VNC,只需將1替換為映射到用戶的顯示端口。

 

連接 VNC Server

VNC不是加密協議,可能會受到數據包嗅探。推薦的方法是創建一個SSH隧道,將本地機器上5901端口的流量安全地轉發到同一端口的遠程服務器上。

 

在Linux和macOS上設置SSH隧道。

如果你的機器上運行的是 Linux、macOS 或任何其他基於 Unix 的操作系統,你可以使用下面的 ssh 命令輕松創建一個隧道。

ssh -L 5901:127.0.0.1:5901 -N -f -l username remote_server_ip

提示你輸入用戶密碼. 

不要忘記 將 username 和 server_ip-address 替換為 你的 username 和 IP address.

 

在 Windows 上設置 SSH 通道

Windows用戶 可以用 PuTTY 設置 SSH 通道

 

 
VNC Putty

在 Connection 菜單里, 展開 SSH, 選擇 Tunnels. 在 Source Port 字段輸入 VNC Server port (5901) . 在 Destination 字段 輸入 server_ip_address:5901, 並點擊 Add 按鈕, 如下圖所示: 

 

 
VNC SSH Tunnel Putty

回到會話頁面保存設置,這樣你就不需要每次都輸入。要登錄到遠程服務器,選擇已保存的會話並點擊打開按鈕。

 

 

使用 Vncviewer 連接 

要連接到遠程服務器,打開VNC查看器,輸入localhost:5901。

你可以使用任何VNC查看器,如TigerVNC、TightVNC、RealVNC、UltraVNC、Vinagre和VNC Viewer for Google Chrome。

我們使用的是TigerVNC。

 
VNC Viewer

當提示輸入密碼時,你應該看到默認的Gnome桌面。它應該看起來像這樣。

 

 
VNC Desktop

就是這樣!你現在可以從本地機器使用鍵盤和鼠標在遠程桌面上工作了。現在,您可以使用鍵盤和鼠標從您的本地機器開始在遠程桌面上工作。

 

結論

我們已經向大家展示了如何設置VNC服務器並連接到遠程 RHEL8。

 

 

 

 

 

配置 桌面 環境:

  • vnc的用戶特定配置文件位於用戶主目錄下的'.vnc'目錄中,(例如:/home/username/.vnc/)。(例如:/home/username/.vnc/)。在你喜歡的編輯器中打開.vnc/xstartup,並按以下方式編輯。

  • 在對配置文件進行任何修改后,重新啟動vnc服務器服務。

對於Gnome
  • xstartup "文件應該是這樣的
#  cat ~/.vnc/xstartup

 #!/bin/sh
 [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
 vncconfig -iconic &
 dbus-launch --exit-with-session gnome-session &

 

對於 KDE
  • xstartup "文件應該是這樣的
#  cat ~/.vnc/xstartup

 #!/bin/sh
 [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
 [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
 #vncconfig -iconic &
 #dbus-launch --exit-with-session gnome-session &
 startkde &

 

VNC 客戶端 連接:

  • vncviewer 命令可以用來從遠程Linux機器連接到適當的基於VNC的X會話。如果遠程系統正在運行Windows,可以從網站http://www.tigervnc.org/ 免費下載基於Windows的VNC查看器程序。
# vncviewer vncserver-ipaddress:N

  • 要使用vncviewer客戶端連接到用戶顯示,請將N替換為所需用戶的基於VNC的X會話的編號。

  • 如果使用端口號而不是顯示號進行連接,大多數vnc客戶端需要使用vncserver-ipaddress::portnumber的語法。
# vncviewer vncserver-ipaddress::59XX

e.g:

# vncviewer vncserver-ipaddress::5901

SOLUTION 已驗證 - 已更新 2020年十二月25日12:16 - 

配置Xvnc選項:

要配置Xvnc參數,打開vncserver-config-defaults配置文件。這個文件是默認的Xvnc配置,將應用於每個用戶,除非有以下情況。

  • 用戶在$HOME/.vnc/config中有自己的配置。
  • 同樣的選項,在vncserver-config-mandatory配置文件中配置了不同的值,它取代了默認的配置,其優先級甚至高於按用戶配置。這個選項是為系統管理員想要強制執行特定的Xvnc選項時准備的。

配置文件的格式也很簡單,配置如下。

option=value

例如: 

session=gnome
#securitytypes=vncauth,tlsvnc 
#desktop=sandbox
#geometry=2000x1200
#localhost
#alwaysshared

注意:

這里唯一需要的參數是session=,它應該與/usr/share/xsessions目錄下的會話桌面文件名相匹配。對於支持的部署,這里的默認選項是 session=gnome。對於廠商/社區提供的任何第三方/上游GUI,請查看相關文檔。

設置vnc密碼

為了能夠啟動Tigervnc服務器,請為每個用戶設置一個密碼。為了創建密碼,請以您要啟動服務器的用戶身份運行以下命令。

$ vncpasswd

 注意:-必須在以用戶身份登錄時進行設置,不能以root/其他管理員身份使用RHEL 8中的vncpasswd用戶名命令進行設置。在RHEL 8中不能以root/其他管理員身份使用vncpasswd用戶名命令進行設置。

如果系統中以前使用過vncserver,請確保vncpasswd創建的$HOME/.vnc文件夾具有正確的SELinux上下文。有兩種可能的選擇來確保這一點。

  • 刪除 $HOME/.vnc 文件夾,然后通過再創建一次密碼來重新創建。
  • 或者運行該命令。$ restorecon -RFv /home/<USER>/.vnc。

啟動Tigervnc服務器

最后用systemd服務啟動服務器。要做到這一點,只要運行。

As root user:
# systemctl start vncserver@\:$x.service

As non-root user:
$ sudo systemctl start vncserver@\:$x.service

用/etc/tigervnc/vncserver.users中配置的實際數字代替$x。

$ sudo systemctl start vncserver@\:1.service

它將以 GNOME 會話為用戶 vncuser1 啟動一個 Tigervnc 服務器。

注意:- 如果你正在使用vino(屏幕共享),請注意它與VNC共享端口。不要使用任何可能導致沖突的端口。要確定某個用戶可能使用的vino端口,讓該用戶在登錄到本地圖形控制台時運行 "gsettings get org.gnome.desktop.remote-access alternative-port"。

配置防火牆以接受傳入的連接。

執行以下命令在防火牆中打開VNC端口。

# firewall-cmd --permanent --zone=public --add-port 5901/tcp

該命令只為傳入的連接打開TCP端口5901。當需要時,同樣的命令也可以用來打開其他端口。你可能需要考慮針對你的用例制定豐富的規則。以上只是一個通用規則,它將開放對端口5901的全面訪問,或指定的任何端口。

重新加載防火牆以使防火牆規則生效。

# firewall-cmd  --reload

注意:-

限制:-

  • 用戶將無法為已經登錄到圖形會話的用戶啟動Tigervnc服務器。
  • 避免以root用戶的身份運行服務器,因為這不是一件安全的事情。雖然以root用戶的身份運行服務器在一般情況下應該是可行的,但不建議這樣做,可能會有一些事情不能正常運行。參考:  Is logging in to the GUI as the root user supported in Red Hat Enterprise Linux?

 

根源

以前的Tigervnc版本有一個名為vncserver的包裝腳本,可以作為用戶手動運行來啟動Xvnc進程。使用方法很簡單,可以通過執行以下命令來啟動。

$ vncserver :x [vncserver options] [Xvnc options]

雖然這樣做還不錯,但當用戶想用systemd啟動Tigervnc服務器時,就會出現一些問題。由於這些原因,事情被徹底改變了,現在有了一種新的工作方式。

SELinux策略有額外的更新,要求策略也要更新,否則VNC服務器將無法在舊點版本上啟動。將SELinux策略包從較新的點版本混合到較舊的點版本上,會引起額外的問題。如果要使用上述tigervnc版本,最佳做法是完全更新。

 

參考:

[1]  How to Install and Configure VNC on CentOS 8

[2]  How to configure Virtual Network Computing (VNC) in Red Hat Enterprise Linux 7/8 - 8.2?

[3]  Are there any changes to the default vncserver configuration in RHEL8.3?

[4]  How to install a graphical user interface (GUI) for Red Hat Enterprise Linux?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM