Ubuntu 20.04 上安装和配置 VNC
[TOC]
Linux 云服务器默认是命令行交互的, 既没有安装桌面程序, 不支持通过远程桌面的方式访问图形化桌面环境. 为了方便从 Windows 端远程访问云服务器, 本文整理了在 Ubuntu 20.04 系统上安装和配置 VNC 服务器所需的步骤. 实现在 Windows 上通过远程桌面管理和控制 Ubuntu 云服务器, 支持图形界面操作.
Ubuntu 云端服务器
安装桌面环境
Ubuntu 支持 Gnome, KDE, Xfce, Unity 等多种桌面环境, 这里选择 Ubuntu 默认的 Gnome.
1 | sudo apt update |
安装与初次使用 VNC 服务器
有很多 VNC server 的实现软件, 如 TigerVNC 和 x11vnc 等. 本文选择 TigerVNC , 它是开源的高性能 VNC 服务器, 并被积积极维护.
1 | sudo apt install tigervnc-standalone-server tigervnc-common |
创建初始配置并设置密码:
1 | vncserver |
运行时不要使用 sudo
.
系统将提示输入并确认密码(最少 6 位), 以及是否将其设置为仅查看密码. 如果您选择设置仅查看密码, 则用户将无法使用鼠标和键盘与 VNC 实例进行交互.
1 | You will require a password to access your desktops. |
第一次 vncserver 运行命令时, 它将创建密码文件并将其存储在 ~/.vnc 目录中, 如果不存在, 将创建该目录.
一些基础命令:
1 | vncserver #在当前已经存在的显示端口的基础上再增加一个端口 |
重要的是要记住, 当使用 VNC 服务器时, :i
是一个引用的显示端口 5900+i
. 例如, vncserver :2
创建的端口为 5902
.
注: 如果启动时出现 VNC 启动异常: is taken because of /tmp/.X11-unix/X1
.
此时只需要将提示的文件删除即可. 再次输入 vncserver
.
配置 VNC 服务器
VNC 启动脚本 ~/.vnc/xstartup
, 无论何时启动或重启 TigerVNC 服务器, 都将自动执行上述命令.
1 |
|
添加权限:
1 | sudo chmod u+x ~/.vnc/xstartup |
VNC 服务器的配置文件 ~/.vnc/config
:
1 | $geometry = "1900x1200"; |
更多配置选项内容可参考: vnc.conf.
添加 VNC 服务
如果想要在每次服务器开机都会自动运行 VNC server, 并且方便管理它, 可以考虑将其添加为一个服务.
方法1 创建 Systemd 单元文件
1 | sudo vim /etc/systemd/system/vncserver@.service |
内容如下:
1 | [Unit] |
这里解释一下条目的意义:
[Unit]
: 启动顺序与依赖关系区块[Service]
: 启动行为区块.[Install]
: 定义如何安装这个配置文件.Description
: 该服务的描述.After
: 需要在哪些服务之后启动, 这里是在系统日志以及网络服务启动后启动.Type
:simple
足够了.User
: 远端服务器登陆用户名.PAMName
: 可拆卸式认证模块(Pluggable Authentication Modules) for Linux 用来管理授权信息.PIDFile
: 服务进程 PID.ExecStartPre
: 启动前的准备工作. 注意此处的输入参数无法识别>
,|
等字符, 因此需要通过/bin/sh -c ' '
的形式将整个命令/脚本传进去.ExecStart
: 启动时的命令/脚本.ExecStop
: 停止服务后需要执行的命令/脚本.WantedBy
: 该服务是哪些服务可能依赖的, 一般都是multi-user.target
.
注意命令中的 %i
即是启动端口对象的序号(后面作为参数传进来).
通知 systemd 我们创建了一个新的单元文件:
1 | sudo systemctl daemon-reload |
告诉系统每次开机启动 VNC 服务:
1 | sudo systemctl enable vncserver@1.service |
注意 @1
中的 1 即是端口对象的序号. 相当于 vncserver :1
.
执行以下命令启动 VNC 服务:
1 | sudo systemctl start vncserver@1.service |
验证服务是否已成功启动:
1 | sudo systemctl status vncserver@1.service |
输入的前一部分如下:
1 | vncserver@1.service - Remote desktop service (VNC) |
可以看到 VNC 服务的状态是 Active: active (running)
运行正常的.
Windows 本地
VNC viewer
Windows 端有很多可以接收 VNC server 的软件, 这里使用 VNC viewer, 下载安装后不需要注册也可以使用: 只需要在对话框中输入 IP:port
, 例如 1.19.2.33:5901
后输入约定的密码即可通过图形界面访问云端服务器.
相关联的问题
Ubuntu 18.04 残余的影响
我在跑 ros2 的一些图形界面的工具时报错, 例如:
1 | ros2 run rviz2 rviz2 |
报错内容:
1 | Qt: XKEYBOARD extension not present on the X server |
导致这个错误的原因有很多, 但从原理上分析来看, 应该是 X -> X server -> Gnome -> VNC server -> VNC viewer
这个链接中的某个环节出错了导致了我在 VNC viewer 上运行 rviz2 识别.
看到此回答, 我发现我的问题与他一样.
我是通过系统升级从 Ubuntu 18.04 升级到 20.04 的, 之前的 VNC – tightVNC 没有起作用, 我默认 tightVNC 被删除了, 其实并没有.
1 | prompt> whereis vncserver |
发现 vncserver
默认还是 tightvnc
. 卸载 tightVNC 后, 安装 tigerVNC, 问题解决了.
参考链接: https://xie.infoq.cn/article/cf473dc0dea917b0b2a546ecd
https://help.aliyun.com/document_detail/332898.html
https://blog.csdn.net/weixin_39278265/article/details/120546447
Ubuntu 20.04 上安装和配置 VNC