Centos VNC server 配置

环境信息

  • Centos 7

VNC 是一个图形桌面共享系统,可以通过远程连接的方式连接到服务器的图形系统以控制操作系统
VNC 包括以下四个部分 : vncservervncviewervncpasswordvncconnect
VNC client 端通过 VNC 协议远程连接到 vnc server 端,进行桌面共享及交互;

安装 tigervnc

安装之前首先要确保系统已安装图形系统,本文以 GNOME Desktop 为图形桌面系统,执行以下命令检查是否已安装 GNOME Desktop,如果未安装,使用命令 yum groupinstall "GNOME Desktop" 安装

$ yum grouplist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Environment Groups:
GNOME Desktop
Available Environment Groups:
Minimal Install
Compute Node
...

桌面系统安装后,使用以下命令,安装 tigervnc

yum install -y tigervnc-server

可以参考 /lib/systemd/system/[email protected] 中的指示,生成服务配置文件:

cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
vim /etc/systemd/system/vncserver@\:1.service

修改以下行,将其中的 <USER> 改为要远程登录的用户名,例如 root

/etc/systemd/system/vncserver@\:1.service
ExecStart=/usr/bin/vncserver_wrapper root %i

如果有多个用户需要远程连接,可以重复以上步骤,建立多个配置文件,如 /etc/systemd/system/vncserver@:2.service,各个服务之间互不影响,关闭一个服务,不影响其他的 vnc 服务 (如关闭: vncserver@:2.servicevncserver@:1.servicevnc 远程依旧可以使用)

修改服务文件后,使用以下命令重新加载服务启动脚本:

systemctl daemon-reload

启动服务:

systemctl start vncserver@:1.service

服务启动后,会监听 5901 端口,如果有第二个服务,会监听在 5902 端口,以此类推,防火墙需要放通此端口

切换到需要 vnc 远程登录的用户,使用以下命令配置 vnc 远程登录用户的密码(只是 vnc 登录时使用的密码,非系统用户密码)

[root@localhost ~]# su - USER
[USER@localhost ~]$ vncpasswd

设置 vncpasswd 密码后,在账号的家目录里就会自动建立 .vnc 文件,其中包括对应用户的 vnc 相关的日志

配置完成后,下载客户端 进行远程登录

常见错误

getpassword error: Inappropriate ioctl for device

vncserver@:1.service 服务启动失败,端口未监听

$ netstat -anutp | grep LIST
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 735/rpcbind
tcp6 0 0 :::30000 :::* LISTEN 1251/sshd
tcp6 0 0 :::80 :::* LISTEN 17064/nginx: master
tcp6 0 0 :::8181 :::* LISTEN 17064/nginx: master
tcp6 0 0 :::8443 :::* LISTEN 14032/nginx-ingress
tcp6 0 0 :::443 :::* LISTEN 17064/nginx: master
tcp6 0 0 :::10254 :::* LISTEN 14032/nginx-ingress
tcp6 0 0 :::111 :::* LISTEN 735/rpcbind

$ systemctl status vncserver@:1.service
● vncserver@:1.service - Remote desktop service (VNC)
Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2023-05-02 13:29:44 CST; 14s ago
Process: 28040 ExecStart=/usr/bin/vncserver_wrapper root %i (code=exited, status=2)
Process: 28037 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Main PID: 28040 (code=exited, status=2)

May 02 13:29:44 test systemd[1]: Starting Remote desktop service (VNC)...
May 02 13:29:44 test systemd[1]: Started Remote desktop service (VNC).
May 02 13:29:44 test vncserver_wrapper[28040]: You will require a password to access your desktops.
May 02 13:29:44 test vncserver_wrapper[28040]: getpassword error: Inappropriate ioctl for device
May 02 13:29:44 test vncserver_wrapper[28040]: Password:FATAL: 'runuser -l root' failed!
May 02 13:29:44 test systemd[1]: vncserver@:1.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 02 13:29:44 test systemd[1]: Unit vncserver@:1.service entered failed state.
May 02 13:29:44 test systemd[1]: vncserver@:1.service failed.

解决方法 配置登陆用的 VNC 密码,重启服务

su - root
vncpasswd

systemctl start vncserver@:1.service