Linux常使用VNC协议进行远程桌面连接,但是VNC无法充分利用服务器上的显卡资源,因为VNC的画面是由CPU模拟的显卡提供的,所以VNC的3D性能较弱,在使用blender等3D软件时画面卡顿。VirtualGL就是为解决这个问题而开发的,它将远程Linux主机的显卡渲染好的画面通过网络传输到客户端,可以充分利用远程主机的显卡资源。本文将介绍TurboVNC+VirtualGL这两个软件的配置过程。
1.下载与安装
通过VirtualGL官网与TurboVNC官网跳转到SourceForge网站下载rpm包,直接下载对应的rpm包即可。
?安装之前需要先安装一个依赖包
[root@coco ~]# dnf install mesa-libGLU-9.0.0-15.el8.x86_64
之后通过包管理器安装
[root@coco ~]# rpm -ivh VirtualGL-2.6.5.x86_64.rpm turbovnc-2.2.6.x86_64.rpm
warning: VirtualGL-2.6.5.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6e7fe9a1: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:turbovnc-2.2.6-20210221 ################################# [ 50%]
2:VirtualGL-2.6.5-20201117 ################################# [100%]
VirtualGL安装目录在/opt/VirtualGL/,TurboVNC的安装目录在/opt/TurboVNC/
2.配置VirtualGL
在配置之前先检查Linux主机的桌面环境和显卡驱动程序是否安装正常。
执行如下命令:
[root@coco ~]# lspci | grep -i vga
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
?在虚拟机环境下显示为VMware,实体机应显示为对应的显卡型号。
配置VirtualGL需要关闭桌面环境。
1). 关闭桌面环境
在终端输入
[root@dell ~]# init 3
或者按下Ctrl+Alt+F3进入命令行模式,使用命令终止服务
[root@dell ~]# systemctl stop gdm.service
?2). 配置
[root@coco ~]# /opt/VirtualGL/bin/vglserver_config
1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit
Choose:
1
WARNING: Configuring this server for use with VirtualGL will disable the
ability to log in locally with a Wayland session.
Continue?
[Y/n]
Y
Restrict 3D X server access to vglusers group (recommended)?
[Y/n]
Y
Restrict framebuffer device access to vglusers group (recommended)?
[Y/n]
Y
Disable XTEST extension (recommended)?
[Y/n]
Y
本配置创建了一个新的用户组vglusers,在这个组里的成员才可使用VirtualGL,编辑/etc/group文件添加用户
[root@coco ~]$ tail -1 /etc/group
vglusers:x:1003:root,coco
3). 重启桌面环境
[root@coco ~]$ init 5
此步骤也可重启实现
?4). 完整性检查
依次输入以下三个命令
[root@coco ~]$ xauth merge /etc/opt/VirtualGL/vgl_xauth_key
[root@coco ~]$ xdpyinfo -display :0
[root@coco ~]$ /opt/VirtualGL/bin/glxinfo -display :0 -c
其中第三步命令检查OpenGL渲染器,在这里看到是VMware?
[root@coco ~]$ /opt/VirtualGL/bin/glxinfo -display :0 -c | grep OpenGL
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: SVGA3D; build: RELEASE; LLVM;
OpenGL core profile version string: 4.1 (Core Profile) Mesa 21.1.5
OpenGL core profile shading language version string: 4.10
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.1 (Compatibility Profile) Mesa 21.1.5
OpenGL shading language version string: 4.10
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.1.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16
OpenGL ES profile extensions:
检查图形性能,运行这个命令会出现一个收缩的球,通过帧数判断配置是否正确,如果只有20几帧或者 CPU使用率明显提高 或者 显示OpenGL Renderer: llvmpipe之类的信息则配置不正确。
[root@coco ~]# /opt/VirtualGL/bin/vglrun -d :0 /opt/VirtualGL/bin/glxspheres64
Polygons in scene: 62464 (61 spheres * 1024 polys/spheres)
GLX FB config ID of window: 0xc7 (8/8/8/0)
Visual ID of window: 0x21
Context is Direct
OpenGL Renderer: SVGA3D; build: RELEASE; LLVM;
154.391926 frames/sec - 172.301390 Mpixels/sec
173.700126 frames/sec - 193.849341 Mpixels/sec
181.486453 frames/sec - 202.538882 Mpixels/sec
3. 配置TurboVNC
TurboVNC的配置与一般的VNC软件相似,配置文件所在路径为/etc/turbovncserver.conf?,修改$useVGL的值为1,并取消注释
$wm = startxfce4;
$useVGL = 1;
$autokill = 1;
其他位置根据需要修改。与其他VNC软件一样,需要开放防火墙端口或者添加通行规则。
[root@coco ~]# firewall-cmd --permanent --zone=public --add-service=vnc-server
[root@coco ~]# firewall-cmd --reload
4.启动TurboVNC
使用普通账户创建密码并启动一个桌面实例
1). 设置密码
[coco@coco ~]$ mkdir .vnc
[coco@coco ~]$ /opt/TurboVNC/bin/vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
2) .启动实例
[coco@coco ~]$ /opt/TurboVNC/bin/vncserver :1
启动后会在家目录的.vnc目录下创建一个xstartup.turbovnc的文件,修改此文件的内容后重新启动vnc实例
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
#export VGL_DISPLAY=:1
#export DISPLAY=:1
/opt/VirtualGL/bin/vglrun -d :0 /usr/bin/startxfce4
此时在VNC中运行3D程序即可正常显示。?
|