配置 vnc server

SSH是不带界面的协议,之前在机器人远程机配置vnc4server,从本地连接到远程机,希望能在远程机直接运行rviz以进行观测,不知道失败了多少次,今天又试了试,这次得到如下结果:
vnc4server环境加载rviz失败.png
这是因为rviz是基于Qt和OpenGL的,但是vnc4server对OpenGL的支持有问题,所以报错

目前最好的就是x11vnc。这个程序不仅不收费,是开源的,而且还支持opengl程序,rviz之类的程序也可以正常打开了。

VNC经典BUG: 能连接成功,不能操作界面,SSH可以操作
  1. 安装x11vnc
1
sudo apt-get install -y x11vnc net-tools
  1. 设置访问密码
1
sudo x11vnc -storepasswd

按提示设置密码,密码一般放在/home/user/.vnc/passwd

  1. 创建服务文件

sudo vim /lib/systemd/system/x11vnc.service,文件内容如下:

1
2
3
4
5
6
7
8
9
10
[Unit] 
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5900 -shared

[Install]
WantedBy=multi-user.target

  1. 启动服务:
    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl enable x11vnc.service
    sudo systemctl start x11vnc.service

一般来说,经过上面步骤就成功了。但是可能出现下面错误
status running.png
failed for display.png

其实上面一大堆配置都是为了开机启动,在4之前可以先手动运行,直接x11vnc即可,看输出的文本是否正常,端口有可能是5901,可以用netstat命令检查

手动启动x11vnc的结果
Linux安装x11vnc server的结果
ubuntu上的x11vnc界面,可直接打开GUI程序

成功运行VNC前后的 netstat

  1. 客户端

下载vnc viewer,输入目标IP,端口5900,之后就可以正常连接了,比如192.168.0.103:5900

如果在不插显示器使用rviz时还是报错, 插上hdmi转vga的转接头(不接显示器,只是转接头) 就可以打开正常使用了。如果此时再外接一个显示器,实际就成了双屏配置,在VNC里会出现长屏幕,对于大显示器,用着更舒服了。

但是如果只插一个HDMI线,可以显示,但拖拽终端会出现重影

可以在设置里面调整分辨率和比例,如果感觉VNC速度慢,可以禁用Compiz

有的网络下,会出现经常掉线重连的情况,此时只需把画面质量改为Medium即可,当然Low更可以。

参考:
ubuntu18.04安装x11vnc


配置vino

  1. 安装
1
2
3
4
5
6
7
8
9
sudo apt update

sudo apt install vino

sudo ln -s ../vino-server.service /usr/lib/systemd/user/graphical-session.target.wants

# 配置VNC server:
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino require-encryption false

使用命令 /usr/lib/vino/vino-server开启

  1. 每连接到一个新的wifi ,都需要在设置的页面把共享的wifi打开

  2. 将网卡加入VINO服务命令

1
2
3
4
5
6
7
8
# 用于显示 NetworkManager(网络管理器)中当前配置的网络连接列表及其详细信息.
nmcli connection show

# 将指定的 UUID(Universally Unique Identifier)添加到 Vino 服务器启用的连接列表中,指定允许远程访问和控制你的计算机的特定连接.
dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['your UUID']"

# export DISPLAY作用是指定 X Window 系统的显示器,通过设置 DISPLAY 环境变量,它们可以知道要将图形显示在哪个显示器上,默认是0.
export DISPLAY=:0
  1. 设置开机自启动
1
2
3
4
5
6
7
8
9
10
11
gsettings set org.gnome.Vino enabled true
mkdir -p ~/.config/autostart
vim ~/.config/autostart/vino-server.desktop


# 将下面的内容添加到该文件中,保存并退出。
[Desktop Entry]
Type=Application
Name=Vino VNC server
Exec=/usr/lib/vino/vino-server
NoDisplay=true
  1. 安装虚拟显示器

经过以上设置,连接VNC后可能是splash screen或者说花屏,还是不正常。用虚拟显示器解决

1
sudo apt-get install  -y  xserver-xorg-core-hwe-18.04  xserver-xorg-video-dummy-hwe-18.04

sudo vim /usr/share/X11/xorg.conf.d/xorg.conf加入下面内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Section "Device"
Identifier "Configured Video Device"
Driver "dummy"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
HorizSync 31.5-48.5
VertRefresh 50-70
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1920x1080"
EndSubSection
EndSection

重启后应该就正常了。如果连接到显示器,反而会不能正常显示,那么就把配置文件删了。

参考: vino的配置