3

主显卡通常可以在 BIOS 中设置(选项Primary VGA card),它将是系统使用的第一张显卡。

我的问题是如何以编程方式识别(最好使用 shell 脚本和实用程序)我的两个视频卡中的哪一个是主卡?

编辑:我希望我不必详细说明为什么需要这个,因为它有点复杂,但我将在下面解释这个问题。

我有一个配置向导,它允许在 LiveCD 中动态配置多座系统,具有两个独立的显示器、键盘和鼠标,我的向导以这种方式工作:

  1. 每个视频卡启动一个 Xorg 服务器(在生成具有正确 PCI 总线 ID 的 xorg.conf 之后)。
  2. 在每个 Xorgs 中启动一个带有配置消息的ui(按键并按下鼠标)。每次可以配置一个座位。
  3. 配置第一个席位后,向导会关闭第一个 Xorg 并使用桌面环境(已使用正确的键盘和鼠标设置)在此席位中启动最终的 Xorg。
  4. 现在可以配置第二个座位(按键和鼠标),在第二个座位重复此通道3之后。

问题是:如果我在主显卡中启动第一个 Xorg,一切正常,但如果我在辅助卡中启动第一个 Xorg,会发生以下情况:

通行证1、2、3有效,但是在通行证3结束时,当第一个座位的Xorg关闭时,第二个座位的Xorg闪烁并且没有回来,只是显示一个带有_的空白屏幕光标在顶部,第一个座位的桌面加载,但我在第二个座位上看不到向导屏幕,如果我执行kill -HUP,第一个 Xorg 就会回来,我需要从它再次启动ui .

所以,这就是为什么我需要在启动 Xorg 之前识别主显卡的原因(抱歉我之前没有提到这一点)。我在不同的计算机上测试了这个系统,使用不同的显卡,行为是相同的。我还在 Ubuntu 12.04 中测试了内核和 Xorg 的最新包(raring版本的包)。

4

3 回答 3

1

Linux 中有几个命令行工具可以为您提供来自 BIOS 的人类可读信息。也许你可以在那里找到你的视频板,看看哪个是主要的。从我在输出中看到的内容来看,它看起来不像是“这是主要视频”,但我确实看到了很多信息。当显卡 A 为主时,您可以将该信息输出到一个文件,当 B 为主时,您可以再次比较这两个文件,看看是否有区别。

我使用的命令给了我很多信息,它是dmidecode

sudo dmidecode | less

如果您查看手册页:

man dmidecode

您会注意到程序员提供了一些其他类似的工具,例如biosdecodevpddecode

从那些您了解到 BIOS 信息可从 /dev/mem 设备获得。虽然您需要root才能阅读它,但如果您知道地址(我不知道),那么您可以进入那里并根据需要偷看和戳,以找出将哪个视频卡的那个信息定义为主视频的位置卡片。

运行 dmidecode,有一些关于我的主板的详细信息:

Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
  Manufacturer: Supermicro
  Product Name: X9SCI/X9SCA
  Version: 1.01
  Serial Number: ZM25U44192
  Asset Tag: To be filled by O.E.M.
  Features:
    Board is a hosting board
    Board is replaceable
  Location In Chassis: To be filled by O.E.M.
  Chassis Handle: 0x0003
  Type: Motherboard
  Contained Object Handles: 0

这里我有一个视频条目:

Handle 0x000E, DMI type 10, 6 bytes
On Board Device Information
  Type: Video
  Status: Enabled
  Description:    To Be Filled By O.E.M.

然后另一个条目如下所示:

Handle 0x0036, DMI type 41, 11 bytes
Onboard Device
   Reference Designation:  Onboard IGD
   Type: Video
   Status: Enabled
   Type Instance: 1
   Bus Address: 0000:00:02.0

它也可能是您需要从 BIOS 使用的闪存中读取的内容。这是通过 flashrom 完成的(您可能需要安装):

sudo flashrom --programmer internal --read my-flash.bin

在我的情况下,我电脑上的 ROM 是 2Gb 的数据。这么大。但是,您可以确定您要查找的信息存在于该数据块中,因为这是 BIOS 保存在计算机关闭时将保留的数据的唯一方法。

于 2014-11-12T04:09:18.040 回答
1

假设 X11 正在运行,您可以假设主卡是Xorg...使用的卡,那么您可以尝试

 ls -l /proc/$(pidof X)/fd |grep /dev/dri

在我的系统 Debian/Sid/x86-64 和 Linux 3.12 内核(在 Intel3770K 上有一个 Nvidia 卡,它也有它的 VGA)我得到/dev/dri/card0等等......

但是你应该真正解释你为什么要问,你想解决什么问题......为什么这对你很重要?

我完全不确定 Linux 是否有像 BIOS 那样的主显卡概念。

并且可能hwinfo会告诉您有关图形卡的所有信息。

于 2013-11-14T18:14:51.887 回答
0

我找到了一种方法来检查来自不同供应商或至少具有不同名称的主 GPU。

在 KDE 中转到Info Center,然后打开 Graphics -> OpenGL。在直接渲染 (GLX)直接渲染 (EGL)中,您可以看到一个驱动程序块。您可以在那里看到供应商设备。它将命名主要的 GPU。

在此屏幕截图中,您可以看到 AMD gpu 是主要的: 在此处输入图像描述

此外,您可以通过运行以编程方式获取该供应商
glxinfo | grep "OpenGL vendor string" | cut -f2 -d":" | xargs值。

我猜当 kde 切换到 vulkan 进行渲染时(在 kde 6 中),此方法将停止工作。但是现在我不知道另一种确定主 gpu 的方法。

于 2021-01-17T22:08:44.910 回答