正常VNC沒法看3D圖形,而後如今想在服務器上跑東西,但要用VNC鏈接上去能夠看到相關圖形。
python
在網上找了下,使用VirtualGL能夠實現相關要求。ubuntu
1:下載相關軟件,安裝一下。bash
https://sourceforge.net/projects/virtualgl https://sourceforge.net/projects/turbovnc
建議添加相關環境變量
服務器
echo 'export PATH=/opt/TurboVNC/bin:/opt/VirtualGL/bin:$PATH' >> /etc/profile
2:按官方的說法建議安裝下面的軟件session
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:配置ssh
#若是有Nvidia顯卡,須要安裝驅動ide
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又好了。緣由不明。
vglserver_config
#另外可能要把須要3D顯示的用戶添加到vglusers組中測試
usermod -a -G vglusers ubuntu
具體文檔能夠到官方查看spa
實現3D查看有兩種方式,
.net
1:使用vglconnet 鏈接
vglconnect -s user@server #而後在要運行的程序前加上vglrun,好比 vglrun rosrun rviz rviz
2:使用SSH端口轉發(推薦)
ssh -C -N -L LocalPort:Server:ServerPort user@Server #再使用vnc鏈接 #最後在要運行的程序前加上vglrun,好比 vglrun rosrun rviz rviz
#更新,今天再測試了一上,發現不用轉發也能夠。原本是要用Xrdp來,這樣比較省事。但目前沒測試好。但服務器端仍是要用 TurboVNC
# 添加到 /etc/pam.d/common-auth; 能夠把密碼抓出來
#上面的內容原本不想用圖片,只怪博客用的阿里大SB的服務,提交不了。
# 按當前用戶密碼生成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
# VNC空閒太久再次進入會黑屏,在VNC的終端中運行以下命令(關閉屏保) gsettings set org.gnome.desktop.session idle-delay 0 gsettings set org.gnome.desktop.screensaver lock-enabled false
附: ROS安裝
#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