(base) :~/Document/gstreamer$ glxinfo | grep OpenGL version
grep: version: 没有那个文件或目录
Command 'glxinfo' not found, but can be installed with:
sudo apt install mesa-utils

安装工具

mesa-utils 包含了一些与 Mesa 3D 图形库相关的实用程序,例如 glxinfo 和 mesainfo,这些工具可以用来查询和诊断图形硬件和驱动程序的信息。

(base) ~/Document/gstreamer$ sudo apt install -y mesa-utils
[sudo] vagrant 的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列【新】软件包将被安装:
  mesa-utils
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 63 个软件包未被升级。
需要下载 34.2 kB 的归档。
解压缩后会消耗 150 kB 的额外空间。
获取:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe amd64 mesa-utils amd64 8.4.0-1build1 [34.2 kB]
已下载 34.2 kB,耗时 0(112 kB/s)   
正在选中未选择的软件包 mesa-utils。
(正在读取数据库 ... 系统当前共安装有 232549 个文件和目录。)
准备解压 .../mesa-utils_8.4.0-1build1_amd64.deb  ...
正在解压 mesa-utils (8.4.0-1build1) ...
正在设置 mesa-utils (8.4.0-1build1) ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...

查看 OpenGL 的版本信息

可以作为驱动程序是否正确安装的一个指标

(base) :~/Document/gstreamer$ glxinfo | grep "OpenGL version"
OpenGL version string: 3.1 Mesa 21.2.6

glxinfo | grep "version"这个命令会列出所有包含 “version” 字样的行,通常包括以下几个部分:

OpenGL 版本:显示当前系统支持的 OpenGL 版本。
GLX 版本:显示 GLX 版本的信息,GLX 是用于在 X Window System 上实现 OpenGL 的扩展。
GLSL 版本:显示 OpenGL Shading Language(GLSL)的版本,这是用于编写 OpenGL 着色器的编程语言。

(base) :~/Document/gstreamer$ glxinfo | grep "version"
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
    Max core profile version: 4.5
    Max compat profile version: 3.1
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL core profile version string: 4.5 (Core Profile) Mesa 21.2.6
OpenGL core profile shading language version string: 4.50
OpenGL version string: 3.1 Mesa 21.2.6
OpenGL shading language version string: 1.40
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 21.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
    GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix, 

查图形驱动是否已经正确安装和配置:

安装了 mesa-utils 之后,通过以下方法来检查图形驱动是否已经正确安装和配置:

检查显卡驱动和硬件加速是否正常工作

使用 glxinfo 命令:这个命令提供了关于 OpenGL 和 X Window System 的信息,可以用来检查显卡驱动和硬件加速是否正常工作。在终端中输入以下命令:

glxinfo | grep "direct rendering"
# direct rendering: Yes

如果输出显示 “direct rendering: Yes”,则表示硬件加速正在工作,并且图形驱动已经正确安装和配置。

检查 OpenGL 版本

通过 glxinfo 命令来查看 OpenGL 的版本信息,这也可以作为驱动程序是否正确安装的一个指标。输入以下命令:

glxinfo | grep OpenGL

如果能够显示 OpenGL 版本信息,并且版本与你的显卡兼容,这通常意味着驱动程序已经正确安装。

OpenGL vendor string: Mesa/X.org
OpenGL renderer string: llvmpipe (LLVM 12.0.0, 256 bits)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 21.2.6
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.1 Mesa 21.2.6
OpenGL shading language version string: 1.40
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 21.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

根据glxinfo 命令输出,这里是一些关键的 OpenGL 和显卡相关信息:

  1. OpenGL 供应商字符串

    • OpenGL vendor string: Mesa/X.org
    • 这表明你的 OpenGL 功能是由 Mesa 3D 图形库提供的,它是 X.org 项目的一部分。
  2. OpenGL 渲染器字符串

    • OpenGL renderer string: llvmpipe (LLVM 12.0.0, 256 bits)
    • 这表明你正在使用 llvmpipe,这是一个纯软件的 OpenGL 渲染器,它是 Mesa 的一部分。它不依赖于任何特定的硬件,而是在 CPU 上执行所有渲染工作。这意味着你的系统可能没有使用专用的图形处理单元(GPU)来渲染 OpenGL 内容。
  3. OpenGL 核心配置文件版本

    • OpenGL core profile version string: 4.5 (Core Profile) Mesa 21.2.6
    • 这表明你的系统支持 OpenGL 4.5 核心配置文件。
  4. OpenGL 核心配置文件着色语言版本

    • OpenGL core profile shading language version string: 4.50
    • 这表明你的系统支持 OpenGL 着色语言 4.50 版本。
  5. OpenGL 版本字符串

    • OpenGL version string: 3.1 Mesa 21.2.6
    • 这表明你的系统支持 OpenGL 3.1 版本。
  6. OpenGL 着色语言版本

    • OpenGL shading language version string: 1.40
    • 这表明你的系统支持 OpenGL 着色语言 1.40 版本。
  7. OpenGL ES 配置文件版本

    • OpenGL ES profile version string: OpenGL ES 3.2 Mesa 21.2.6
    • 这表明你的系统支持 OpenGL ES 3.2 版本。
  8. OpenGL ES 着色语言版本

    • OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
    • 这表明你的系统支持 OpenGL ES GLSL ES 3.20 版本。

这些信息表明系统配置了 Mesa 的软件渲染器,而不是硬件加速的 GPU 渲染器。期望使用硬件加速,需要检查你的显卡驱动程序是否正确安装,或者你的系统是否支持硬件加速。如果正在使用的是集成显卡或者没有专用 GPU,那么 llvmpipe 软件渲染器可能是唯一的选择。

查看显卡驱动信息

使用 lshw 命令可以查看显卡的详细信息,显示显卡的型号和正在使用的驱动程序包括当前使用的驱动。输入以下命令:

sudo lshw -c video

这将列出显卡的详细信息,包括型号和使用的驱动。

  *-display                 
       description: VGA compatible controller
       product: NVIDIA Corporation
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:01:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
       configuration: driver=nvidia latency=0
       resources: iomemory:600-5ff iomemory:620-61f irq:213 memory:83000000-83ffffff memory:6000000000-61ffffffff memory:6200000000-6201ffffff ioport:6000(size=128) memory:84000000-8407ffff
  *-display UNCLAIMED
       description: VGA compatible controller
       product: Intel Corporation
       vendor: Intel Corporation
       physical id: 2
       bus info: pci@0000:00:02.0
       version: 04
       width: 64 bits
       clock: 33MHz
       capabilities: pciexpress msi pm vga_controller bus_master cap_list
       configuration: latency=0
       resources: iomemory:620-61f iomemory:400-3ff memory:6204000000-6204ffffff memory:4000000000-400fffffff ioport:7000(size=64) memory:c0000-dffff memory:4010000000-4016ffffff memory:4020000000-40ffffffff

lshw 命令的输出,它显示了系统中的显示适配器信息。这段输出包含了两个部分,分别描述了两个不同的显示适配器:

  1. NVIDIA Corporation 的 VGA compatible controller

    • 产品:NVIDIA Corporation
    • 供应商:NVIDIA Corporation
    • 物理 ID:0
    • 总线信息:pci@0000:01:00.0
    • 版本:a1
    • 宽度:64 bits
    • 时钟:33MHz
    • 配置:已安装驱动程序 nvidia,延迟为 0
    • 资源:分配了 I/O 内存、I/O 端口和内存资源
  2. Intel Corporation 的 VGA compatible controller

    • 产品:Intel Corporation
    • 供应商:Intel Corporation
    • 物理 ID:2
    • 总线信息:pci@0000:00:02.0
    • 版本:04
    • 宽度:64 bits
    • 时钟:33MHz
    • 配置:未声明(UNCLAIMED),延迟为 0
    • 资源:分配了 I/O 内存、I/O 端口和内存资源

从输出中可以看出:

  • NVIDIA 控制器已经安装了驱动程序(driver=nvidia),这意味着它已经被系统识别并配置了相应的驱动。
  • Intel 控制器的状态是 “UNCLAIMED”,这通常意味着没有安装或激活相应的驱动程序,或者系统没有正确识别它。这可能是因为这是一个集成显卡,而你正在使用一个没有集成显卡驱动的 Linux 发行版。

如果希望使用 Intel 集成显卡,需要安装相应的驱动程序。对于大多数现代 Linux 发行版,Intel 驱动程序通常是预装的,或者可以通过系统的包管理器轻松安装。使用以下命令来安装 Intel 显卡驱动:

sudo apt update
sudo apt install xserver-xorg-video-intel

安装后,需要重新启动系统以使更改生效。如果系统仍然无法识别 Intel 控制器,需要检查 Linux 发行版的文档,或者寻求社区支持以获取帮助。

检查显卡硬件信息

使用 lspci 命令来查看显卡的硬件信息。将显示正在使用的驱动程序,输入以下命令:

lspci -vnn | grep VGA -A 12

这将显示显卡的详细信息,包括制造商和型号。

00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:a788] (rev 04) (prog-if 00 [VGA controller])
	Subsystem: Lenovo Device [17aa:3cf2]
	Flags: bus master, fast devsel, latency 0, IRQ 255
	Memory at 6204000000 (64-bit, non-prefetchable) [size=16M]
	Memory at 4000000000 (64-bit, prefetchable) [size=256M]
	I/O ports at 7000 [size=64]
	Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
	Capabilities: <access denied>

00:04.0 Signal processing controller [1180]: Intel Corporation Device [8086:a71d] (rev 01)
	Subsystem: Lenovo Device [17aa:3829]
	Flags: bus master, fast devsel, latency 0, IRQ 255
	Memory at 6205100000 (64-bit, non-prefetchable) [size=128K]
--
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:28e0] (rev a1) (prog-if 00 [VGA controller])
	Subsystem: Lenovo Device [17aa:3cf2]
	Physical Slot: 1
	Flags: bus master, fast devsel, latency 0, IRQ 213
	Memory at 83000000 (32-bit, non-prefetchable) [size=16M]
	Memory at 6000000000 (64-bit, prefetchable) [size=8G]
	Memory at 6200000000 (64-bit, prefetchable) [size=32M]
	I/O ports at 6000 [size=128]
	Expansion ROM at 84000000 [virtual] [disabled] [size=512K]
	Capabilities: <access denied>
	Kernel driver in use: nvidia
	Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

这段输出是从 lspci 命令中得到的,它列出了系统中的 PCI 设备信息。这里特别关注了两个 VGA compatible controller(显卡):

  1. Intel Corporation Device [8086:a788]

    • 这是一个集成在 Intel 芯片组中的 VGA compatible controller,通常是一个集成显卡。
    • 它有两块内存区域分配给它,一块是 16MB 的非预取内存,另一块是 256MB 的预取内存。
    • 它还分配了 64 位 I/O 端口。
    • 有一个 Expansion ROM,但是目前是禁用状态。
  2. NVIDIA Corporation Device [10de:28e0]

    • 这是一个独立的 NVIDIA VGA compatible controller,通常是一个更强大的独立显卡。
    • 它有三块内存区域分配给它,一块是 16MB 的 32 位非预取内存,一块是 8GB 的 64 位预取内存,还有一块是 32MB 的 64 位预取内存。
    • 它还分配了 128 位 I/O 端口和一个 Expansion ROM。
    • 这个设备正在使用 nvidia 内核驱动,相关的内核模块包括 nvidiafb, nouveau, nvidia_drm, nvidia

从这些信息中,我们可以看出:

  • 系统同时拥有集成显卡(Intel)和独立显卡(NVIDIA)。
  • 独立显卡正在使用 NVIDIA 专有驱动(nvidia),这意味着它应该能够提供 3D 加速和优化的图形性能。
  • 集成显卡目前没有被使用(没有提到使用的驱动),这可能是因为系统默认使用了独立显卡。

如果需要使用集成显卡或者想要在集成显卡和独立显卡之间切换,需要进行一些额外的配置。例如,如果使用 Intel 集成显卡,需要禁用 NVIDIA 显卡或者在 BIOS 中进行设置。

此外,如果系统是双显卡系统(同时拥有集成显卡和独立显卡),需要确保正确的驱动程序和内核模块已经安装,并且系统配置正确,以便在需要时能够使用合适的显卡。在某些情况下,还需要安装或更新 nvidia-prime 包,以便在 NVIDIA 显卡和集成显卡之间切换。

运行 glxgears

glxgears 是一个简单的 OpenGL 程序,可以用来测试 OpenGL 驱动。安装 mesa-utils 后,直接运行glxgears 来看它的运行情况。输入以下命令:

glxgears

如果 glxgears 能够正常运行并显示动画,这通常意味着图形驱动工作正常。
请添加图片描述

以上方法可以验证图形驱动是否已经正确安装和配置。

Linux 系统支持的多种图形技术

不是所有的 Linux 系统都使用 OpenGL 组件驱动来渲染图形。Linux 系统支持多种图形技术,包括但不限于:

  1. OpenGL:是一个跨语言、跨平台的应用程序编程接口(API),用于渲染2D和3D矢量图形。OpenGL 通常用于游戏和图形密集型应用程序。在 Linux 中,OpenGL 通常通过 Mesa 3D 图形库来实现,Mesa 包含了开源的图形驱动程序,支持多种图形硬件。

  2. Vulkan:是一个现代的高性能图形和计算 API,设计用于跨平台使用。Vulkan 提供了对图形硬件的更直接控制,以提高性能和效率。它也是开源的,并且在 Linux 系统中得到了广泛的支持。

  3. Wayland:是一个相对较新的显示服务器协议,旨在取代传统的 X.Org Server。Wayland 旨在提供更好的性能和安全性,并且它支持 OpenGL 和 Vulkan。

  4. X.Org Server:是 Linux 系统上传统的显示服务器,它使用 X Window System 协议。X.Org Server 支持多种图形硬件,并且可以利用 OpenGL 通过 Mesa 3D 图形库来渲染图形。

  5. Direct Rendering Manager (DRM):是 Linux 内核中的一个组件,它提供了对图形硬件的直接访问,用于加速图形渲染。DRM 通常与 Mesa 和 X.Org Server 一起使用。

  6. GNOME/KDE 等桌面环境:这些桌面环境提供了用户界面和图形界面的实现,它们通常会利用上述技术来渲染图形。

在 Linux 系统中,图形驱动程序可以是开源的,也可以是专有的。例如,NVIDIA 提供了专有的驱动程序,而 AMD 和 Intel 的开源驱动程序通常包含在 Mesa 3D 图形库中。不同的 Linux 发行版可能会默认使用不同的图形技术堆栈,用户也可以根据需要选择和安装不同的图形驱动程序和库。

Mesa 包含了开源的图形驱动程序,支持多种图形硬件?

是的,Mesa 3D Graphics Library(通常简称为 Mesa)是一个开源的图形软件库,它实现了 OpenGL、Vulkan、OpenGL ES 和其他图形相关的 API。Mesa 允许软件开发者编写可以在各种硬件上运行的图形应用程序,而不需要关心底层硬件的具体细节。

以下是 Mesa 的一些关键特点:

  1. 开源:Mesa 是完全开源的,遵循多种开源许可证,这使得社区可以共同参与开发和改进。
  2. 跨平台:虽然 Mesa 最初是为 Linux 开发的,但它也支持其他操作系统,包括 FreeBSD、OpenBSD、NetBSD、DragonFly BSD、Solaris 和 Windows。
  3. 硬件支持:Mesa 提供了对多种图形硬件的支持,包括但不限于 AMD、Intel、NVIDIA、Broadcom、ARM 和 VMware 的图形处理器。Mesa 包括了专门为这些硬件编写的驱动程序。
  4. OpenGL 实现:Mesa 提供了 OpenGL 的完整实现,这是最广泛使用的图形 API 之一。它支持从旧版本的 OpenGL 到最新的核心-profile 版本。
  5. Vulkan 支持:Mesa 也包括了对 Vulkan API 的支持,这是一个较新的、用于高性能 3D 图形的跨平台 API。
  6. 软件渲染器:Mesa 包括了软件渲染器,如 llvmpipe 和 softpipe,它们可以在没有专用图形硬件的系统上模拟 OpenGL 操作。
  7. 集成开发环境:Mesa 项目还包括了各种开发和调试工具,如 glxinfo、glxgears 和 others,这些工具对于开发和优化图形应用程序非常有用。
  8. 社区驱动:Mesa 由一个活跃的社区维护,这个社区包括个人开发者和来自硬件供应商的开发者。
    Mesa 是许多 Linux 发行版的默认图形库,因为它提供了对开源图形驱动程序的支持,这些驱动程序可以自由地与系统其他部分集成和分发。此外,对于专有驱动程序不可用或不兼容的硬件,Mesa 提供了一个可靠的备选方案。

图形硬件

图形硬件是指计算机中用于处理和渲染图形输出的物理组件。这些组件协同工作,以在显示器上生成图像和动画。图形硬件的主要组成部分包括:

  1. 图形处理单元(GPU)
    • GPU 是专门设计用来快速执行图形和图像处理任务的微处理器。它通常包含多个处理核心,能够并行处理大量数据,从而提高图形渲染的效率。
  2. 视频内存(VRAM)
    • 这是 GPU 专用的内存,用于存储图形数据,如纹理、模型和渲染的图像。VRAM 的速度通常比系统主内存(RAM)快,以便 GPU 能够快速访问和处理图形数据。
  3. 渲染管线
    • 渲染管线是 GPU 内部的一系列处理阶段,包括顶点处理、光栅化、像素处理等,用于将三维模型转换成二维图像。
  4. 显示控制器
    • 显示控制器负责管理 GPU 和显示器之间的数据传输。它确保图像数据正确地同步到显示器上。
  5. 数字模拟转换器(DAC)
    • DAC 用于将数字信号转换为模拟信号,以便传统的 CRT 显示器能够显示图像。现代的液晶显示器(LCD)通常不再需要 DAC,因为它们可以直接处理数字信号。
  6. 冷却系统
    • 高性能的 GPU 可能会产生大量热量,因此需要有效的冷却系统来防止过热。这可能包括风扇、散热片或液冷系统。
  7. 接口(如 PCIe)
    • GPU 通过主板上的接口(如 PCIe 插槽)与系统的其余部分通信。这些接口提供了必要的电气连接和数据传输通道。
  8. 集成图形
    • 许多现代处理器(如 Intel 和 AMD 的某些型号)在 CPU 芯片上集成了图形处理功能。这种集成图形通常共享系统 RAM,并且性能可能低于独立 GPU,但对于日常使用和一些不太要求图形性能的应用来说已经足够。

图形硬件的性能直接影响到计算机图形应用程序的运行效果,包括游戏、视频编辑、3D 建模和其他图形密集型任务。高性能的图形硬件可以提供更快的渲染速度、更高的分辨率和更复杂的视觉效果。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐