SSH是不带界面的协议,之前在机器人远程机配置vnc4server,从本地连接到远程机,希望能在远程机直接运行rviz以进行观测,不知道失败了多少次,今天又试了试,这次得到如下结果:
这是因为rviz是基于Qt和OpenGL的,但是vnc4server对OpenGL的支持有问题,所以报错
目前最好的就是x11vnc。这个程序不仅不收费,是开源的,而且还支持opengl程序,rviz之类的程序也可以正常打开了。
VNC经典BUG: 能连接成功,不能操作界面,SSH可以操作- 安装x11vnc
1 | sudo apt-get install -y x11vnc net-tools |
- 设置访问密码
1 | sudo x11vnc -storepasswd |
按提示设置密码,密码一般放在/home/user/.vnc/passwd
- 创建服务文件
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
2
3sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service
一般来说,经过上面步骤就成功了。但是可能出现下面错误
其实上面一大堆配置都是为了开机启动,在4
之前可以先手动运行,直接x11vnc
即可,看输出的文本是否正常,端口有可能是5901,可以用netstat
命令检查
- 客户端
下载vnc viewer,输入目标IP,端口5900,之后就可以正常连接了,比如192.168.0.103:5900
如果在不插显示器使用rviz时还是报错, 插上hdmi转vga的转接头(不接显示器,只是转接头) 就可以打开正常使用了。如果此时再外接一个显示器,实际就成了双屏配置,在VNC里会出现长屏幕,对于大显示器,用着更舒服了。
但是如果只插一个HDMI线,可以显示,但拖拽终端会出现重影
可以在设置里面调整分辨率和比例,如果感觉VNC速度慢,可以禁用Compiz
有的网络下,会出现经常掉线重连的情况,此时只需把画面质量改为Medium
即可,当然Low
更可以。
配置vino
- 安装
1 | sudo apt update |
使用命令 /usr/lib/vino/vino-server
开启
每连接到一个新的wifi ,都需要在设置的页面把共享的wifi打开
将网卡加入VINO服务命令
1 | # 用于显示 NetworkManager(网络管理器)中当前配置的网络连接列表及其详细信息. |
- 设置开机自启动
1 | gsettings set org.gnome.Vino enabled true |
- 安装虚拟显示器
经过以上设置,连接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
21Section "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的配置