Linux

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?

原文地址:https://www.cnblogs.com/firestar277/p/14672432.html