• 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?

  • 相关阅读:
    设计模式-观察者模式
    idea 生成 protobuf
    springboot @Autowride 注入空 调用时报Null空指针
    Netty 服务端创建过程
    git failed to push some refs to
    SPI simp
    Controller之statefulset
    Service
    Controller之deployment
    rabbitmq“ Login was refused using authentication mechanism PLAIN”
  • 原文地址:https://www.cnblogs.com/firestar277/p/14672432.html
Copyright © 2020-2023  润新知