Ubuntu22.04 安装配置VNC Server
Ubuntu22.04下VNC和远程桌面的区别
这里介绍的是Ubuntu22.04 Desktop版安装配置VNC, 如果是Ubuntu22.04 Server, 因为自身不带桌面环境安装的问题会少一些
使用远程桌面时, 用户必须在host上登入桌面环境. 可以是锁屏或非锁屏, 但是必须要有一个用户桌面会话存在, 如果用户logout了, 远程桌面就无法连接了
使用VNC时, host上需要启动vncserver. 但是vncserver与用户在host上的桌面会话是不一样的, vncserver会给连接后的用户启动桌面会话
启动vncserver失败的问题
在Ubuntu22.04下, 用户在启动vncserver之前必须退出所有桌面会话, 否则会报错.
安装步骤
安装并启用 SSH 服务
如果host上还没有ssh服务, 安装一下, 方便后面的安装步骤, 远程通过ssh进行. 如果不安装, 本机关闭桌面在命令行下也可以, 就是调试起来不方便
sudo apt install openssh-server
初始安装
(可选)安装XFCE桌面. 如果想使用自带的 Ubuntu桌面, 也可以不安装
sudo apt install xfce4 xfce4-goodies
安装vncserver
sudo apt install tigervnc-standalone-server
上面的安装完之后, 用普通用户在ssh连接(或者命令行终端)中启动一次
vncserver
过程中会让你设置密码和只读密码, 会自动分配端口号. 查看启动后的实例
$ vncserver -list
TigerVNC server sessions:
X DISPLAY # RFB PORT # RFB UNIX PATH PROCESS ID # SERVER
2 5902 11368 Xtigervnc
如果-list看不到实例, 说明启动失败, 需要journalctl -fe
看一下具体原因
如果事后想再修改密码, 可以用vncpasswd
命令
上面启动的服务, 默认是只监听本地127.0.0.1, 所以从其它机器是无法连接的, 如果需要连接, 可以用这个命令启动
vncserver -localhost no
配置和添加到系统服务
关闭刚才的实例, :2
根据自己的实例修改
vncserver -kill :2
将 tigervncservice 服务添加到启动, :2
根据自己的实例修改
sudo systemctl start tigervncserver@:2.service
sudo systemctl enable tigervncserver@:2.service
服务配置文件在 /lib/systemd/system/[email protected] , 因为服务使用的是 /usr/libexec/tigervncsession-start 这个脚本, 脚本里面调用的是 /usr/sbin/tigervncsession , 参考 https://manpages.ubuntu.com/manpages/impish/man8/tigervncsession.8.html, 需要在 ~/.vnc/ 下创建文件 config, 输入内容
session=xfce
geometry=1366x768
securitytypes=vncauth,tlsvnc
session=xfce
如果前面安装了xfce, 这里可以用xfce
, 否则需要改成ubuntu
(Desktop版自带桌面)
能用哪些值, 取决于 /usr/share/xsessions 目录下包含哪些 desktop. 例如使用自带的 Ubuntu桌面, 可以改成
session=ubuntu
geometry=1366x768 是开启时的默认分辨率
如果要只允许本地连接, 可以加一行
localhost
修改完重启服务生效
sudo systemctl restart tigervncserver@:2.service
VNC客户端
Win10
TigerVNC
如果使用Win10 64bit, 下载其中的vncviewer64-x.xx.x.exe
, 不需要安装, 直接运行, 地址填host地址加vnc编号, 例如 112.12.12.12:2
, 或者112.12.12.12:5902
也可以
Ubuntu
Ubuntu Desktop 自带支持VNC的远程桌面客户端 Vinagre, 选择协议VNC, 输入服务端地址 例如 112.12.12.12:2
就可以连接. Vinagre 有一个优点是可以拦截 Alt+Tab键, Win键等功能, 在远程桌面上工作时不容易与宿主桌面混淆.
连接安全
上面的配置, 仅适合在内网使用, 因为连接是不加密的. 如果需要加密, 一般将vnc服务启动为监听本地, 再使用ssh建立隧道对外提供服务. 具体可以参考下面的链接
遇到的问题
启动服务产生错误 No user configured for display :2
如果遇到这类错误
tigervncsession-start[6996]: No user configured for display :3
查看一下 tigervncserver 服务中的提示
more /lib/systemd/system/[email protected]
# The tigervncserver service unit file
#
# Quick HowTo:
# 1. Add a user mapping to /etc/tigervnc/vncserver.users.
# 2. Adjust the global or user configuration. See the
# tigervncsession(8) manpage for details. (OPTIONAL)
# 3. Run `systemctl enable tigervncserver@:<display>.service`
# 4. Run `systemctl start tigervncserver@:<display>.service`
是否未在 /etc/tigervnc/vncserver.users 中添加对应用户?
开启VNC服务后本机无法登入桌面
上面配置完之后, 如果在host上想直接登录桌面, 界面会卡住失去响应很长时间, 然后再次回到登录界面. 猜测是因为VNC启动的桌面与Ubuntu系统桌面冲突引起的. 如果想在host上操作, 可以按Ctrl
+Alt
+(F1
~F6
)进入命令行进行操作
XFCE桌面无法挂载移动硬盘
在XFCE桌面下, 如果host插上移动硬盘, 要挂载时会提示Not Authorized, "not authorized to perform operation". 在Ubuntu桌面下, 同样的操作会弹出授权对话框让输入口令, 输入之后可以挂载. 猜测是XFCE界面适配上的bug, 未处理需要授权的情况.
参考
https://www.howtoforge.com/how-to-install-vnc-server-ubuntu-22-04/
https://www.linuxbuzz.com/install-configure-vnc-ubuntu-server/
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04