在新安装的 Arch Linux 上,我在使用图形驱动程序时遇到了困难。在此过程中,我安装了许多不同的驱动程序,以某种方式使显示器正常工作。
现在我需要确定 X 正在使用哪个驱动程序。怎么做?
安装的软件包包括xf86-video-intel
、、、xf86-video-nouveau
。为了解决启动任何图形桌面管理器的奇怪问题,我必须替换为.nvidia
xorg-drivers
nividia-libgl
mesa-libgl
显卡:英特尔高清显卡 4000 / Nvidia GT 750M
其内容Xorg.0.log
为:http://pastebin.com/YwiMZmG6
答案1
您通常可以检查 Xorg 启动日志文件,/var/log/Xorg.0.log
看看它正在加载哪些模块。默认情况下,Xorg 可以尝试自动检测,但您可以通过将Device
节放入 Xorg conf 文件来手动强制驱动程序。以下是 nvidia 卡和 nvidia 专有驱动程序的 Xorg 启动日志。
[ 3702.470] (II) xfree86: Adding drm device (/dev/dri/card0)
[ 3702.472] (--) PCI:*(0:3:0:0) 10de:1184:3842:3774 rev 161, Mem @ 0xfa000000/16777216, 0xd8000000/134217728, 0xd6000000/33554432, I/O @ 0x0000cc00/128, BIOS @ 0x????????/524288
[ 3702.472] (II) LoadModule: "glx"
[ 3702.473] (II) Loading /usr/lib64/opengl/nvidia/extensions/libglx.so
[ 3702.476] (II) Module glx: vendor="NVIDIA Corporation"
[ 3702.476] compiled for 4.0.2, module version = 1.0.0
[ 3702.476] Module class: X.Org Server Extension
[ 3702.476] (II) NVIDIA GLX Module 355.11 Wed Aug 26 16:02:11 PDT 2015
[ 3702.476] (II) LoadModule: "nvidia"
[ 3702.476] (II) Loading /usr/lib64/xorg/modules/drivers/nvidia_drv.so
[ 3702.476] (II) Module nvidia: vendor="NVIDIA Corporation"
[ 3702.476] compiled for 4.0.2, module version = 1.0.0
[ 3702.476] Module class: X.Org Video Driver
[ 3702.476] (II) NVIDIA dlloader X Driver 355.11 Wed Aug 26 15:38:55 PDT 2015
[ 3702.476] (II) NVIDIA Unified Driver for all Supported NVIDIA GPUs
[ 3702.476] (++) using VT number 7
答案2
我发现的一种解决方案是检查 X 运行时实际加载的驱动程序。在我的系统上,驱动程序安装在
/usr/lib/xorg/modules/drivers/
/usr/lib/x86_64-linux-gnu/nvidia/xorg/
这样我就可以检查当前加载的内容
sudo lsof +D /usr/lib/xorg/modules/drivers/ +D /usr/lib/x86_64-linux-gnu/nvidia/xorg/
现在我明白了
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Xorg 4473 root mem REG 253,0 90360 536108 /usr/lib/xorg/modules/drivers/modesetting_drv.so
所以我想我正在使用modesetting
驱动程序。
答案3
这是自动化日志分析的尝试:
#!/bin/bash
if [ -z "$1" ]; then
logfile=/var/log/Xorg.0.log
else
logfile="$1"
fi
sed -n 's@.* Loading .*/\(.*\)_drv.so@\1@p' "$logfile" |
while read driver; do
if ! grep -q "Unloading $driver" "$logfile"; then
echo $driver
break
fi
done
欢迎任何如何使其变得更简单的想法。理想情况下,我希望有一个直接的解决方案 - 通过查询 Xorg 而不是解析其日志。
答案4
glxinfo -B
我更喜欢从包中使用mesa-utils
,这里有一些示例:
- 使用 Nvidia 驱动程序 470.63.01 和 RTX3070 卡:
OpenGL renderer string: NVIDIA GeForce RTX 3070/PCIe/SSE2 OpenGL core profile version string: 4.6.0 NVIDIA 470.63.01
- 使用intel集成卡和mesa驱动程序:
OpenGL vendor string: Intel Open Source Technology Center OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (SKL GT2) OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.0.8
- 在无头远程会话中使用纯 CPU 实现的 opengl 驱动程序:
OpenGL vendor string: Mesa/X.org OpenGL renderer string: llvmpipe (LLVM 12.0.0, 128 bits) OpenGL core profile version string: 4.5 (Core Profile) Mesa 21.2.6 OpenGL core profile shading language version string: 4.50