正常VNC无法看3D图形,然后现在想在服务器上跑东西,但要用VNC连接上去可以看到相关图形。
在网上找了下,使用VirtualGL可以实现相关要求。
1:下载相关软件,安装一下。
1
2
|
https:
//sourceforge
.net
/projects/virtualgl
https:
//sourceforge
.net
/projects/turbovnc
|
建议添加相关环境变量
1
|
echo
'export PATH=/opt/TurboVNC/bin:/opt/VirtualGL/bin:$PATH'
>>
/etc/profile
|
2:按官方的说法建议安装下面的软件
1
2
|
apt-get
install
libxv1:i386 libglu1-mesa:i386 gnome-session-fallback
#14.04
apt-get
install
libxv1:i386 libglu1-mesa:i386 gnome-session-flashback
#16.04
|
3:配置
#如果有Nvidia显卡,需要安装驱动
1
2
3
4
|
apt
install
nvidia-375
nvidia-xconfig --busid=`nvidia-xconfig --query-gpu-info |
awk
'/BusID/{print $NF}'
` --use-display-device=none
#今天在一台新服务器安装了一下,先安装的375驱动,然后 nvidia-smi 都没有相关内容,
#后来再把375删除,安装 nvidia-current,然后再把nvidia-current删除,重新安装375又好了。原因不明。
|
1
|
vglserver_config
|
#另外可能要把需要3D显示的用户添加到vglusers组中
1
|
usermod
-a -G vglusers ubuntu
|
具体文档可以到官方查看
实现3D查看有两种方式,
1:使用vglconnet 连接
1
2
3
|
vglconnect -s user@server
#然后在要运行的程序前加上vglrun,比如
vglrun rosrun rviz rviz
|
2:使用SSH端口转发(推荐)
1
2
3
4
|
ssh
-C -N -L LocalPort:Server:ServerPort user@Server
#再使用vnc连接
#最后在要运行的程序前加上vglrun,比如
vglrun rosrun rviz rviz
|
#更新,今天再测试了一上,发现不用转发也可以。本来是要用Xrdp来,这样比较省事。但目前没测试好。但服务器端还是要用 TurboVNC
1
|
# 添加到 /etc/pam.d/common-auth; 可以把密码抓出来
|
#上面的内容本来不想用图片,只怪博客用的阿里大SB的服务,提交不了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# 按当前用户密码生成VNC密码;密码由pam中获得
# cat /etc/vncpass.sh
#!/bin/bash
read
password
if
[ $PAM_USER =
"root"
];
then
exit
0
fi
HOME=
/home/
$PAM_USER
if
[ ! -d $HOME ];
then
exit
0
fi
if
[ -s $HOME/.vnc
/passwd
];
then
exit
0
fi
if
[ ! -d $HOME/.vnc ];
then
mkdir
-p $HOME/.vnc
fi
# 此vncpassword用turbovnc的vncpasswd测试不行,然后现在用的 tightvncserver 中的 vncpasswd
# 测试通过
echo
$password | vncpasswd -f > $HOME/.vnc
/passwd
chmod
0700 $HOME/.vnc
chmod
0600 $HOME/.vnc
/passwd
chown
`stat --
printf
=%u:%g $HOME` -R $HOME/.vnc
# 添加到 /etc/profile;实现当前有vncserver且有监听端口就跳过,其它则结束后,再运行
if
[ $USER !=
"root"
];
then
vncserver -list |
awk
-F
'[: ]+'
'/^:/{p=sprintf("59%02d",$2);"ss -lnt | grep :"p | getline s;if(length(s)==0){++i;system("vncserver -kill :"$2)}}END{if($0~/^[^:]/||i)exit 1}'
if
[ $? -
ne
0 ];
then
for
i
in
`
seq
10`;
do
sleep
1
vncserver >
/dev/null
2>&1
vncport=`vncserver -list |
grep
-Po
'(?<=:)\d+'
`
if
[ ! -z
"$vncport"
];
then
port=`
printf
"%02d"
$vncport`
if
[ ! -z `ss -lnt |
grep
-Po
":59$port\b"
` ];
then
break
else
vncserver -
kill
`vncserver -list |
awk
'/^:/{print $1}'
`
fi
fi
done
fi
vncserver -list
fi
|
1
2
3
|
# VNC空闲过久再次进入会黑屏,在VNC的终端中运行如下命令(关闭屏保)
gsettings
set
org.gnome.desktop.session idle-delay 0
gsettings
set
org.gnome.desktop.screensaver lock-enabled
false
|
附: ROS安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#ros install
echo
"deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main"
> /etc/apt/sources.list.d/ros-latest.list
apt-key adv --keyserver hkp:
//ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
apt install ubuntu-desktop
apt install libxv1:i386 libglu1-mesa:i386 gnome-session-flashback
apt install ros-kinetic-desktop-full
apt install xwayland weston wayland-protocols libgles2-mesa-dev mesa-utils-extra
apt install python-rosinstall
echo
"source /opt/ros/kinetic/setup.bash"
>> ~/.bashrc
source ~/.bashrc
#virtualgl install 见上面
#ros run test
roscore &
rosrun rviz rviz
#NeedVirtualGL ?
sed -i
'/^rosrun_prefix=/s/rosrun_prefix="/&vglrun/'
/opt/ros/kinetic/bin/rosrun
#wayland
weston
|
本文转自 nonono11 51CTO博客,原文链接:http://blog.51cto.com/abian/1942349,如需转载请自行联系原作者