首先,在解释我的问题之前,我参考了之前在 Ask.Fedora 上提出的关于 libGL 错误的问题,可以从中看到这里。
我一直在尝试玩“FTL”游戏,但遇到了一些问题,图形效果非常差,声音不断变成奇怪的嗡嗡声。经过进一步查看,我发现我的终端在游戏启动时输出了以下消息。
libGL error: failed to load driver: swrast
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
经过进一步研究,我发现这个问题已经影响了多个 Linux 发行版上的多个用户,并且都有不同的解决方案。下面,我提供了尽可能多的信息来帮助诊断我的具体问题。
这似乎也类似于错误 971437在 Red Hat 错误跟踪器上
在 glxinfo 上获取 libGL 调试信息时:
$ LIBGL_DEBUG=verbose glxinfo | grep direct
libGL: screen 0 does not appear to be DRI2 capable
libGL: OpenDriver: trying /usr/lib64/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib64/dri/swrast_dri.so
libGL: Can't open configuration file /home/jflory/.drirc: No such file or directory.
libGL: Can't open configuration file /home/jflory/.drirc: No such file or directory.
direct rendering: Yes
我感觉我的显卡有点问题,因为我对 Linux 非常陌生,我不确定我需要什么才能正确运行游戏。下面是我在此过程中尝试安装的一些软件包。
$ cat /etc/ld.so.conf.d/nvidia-lib64.conf
cat: /etc/ld.so.conf.d/nvidia-lib64.conf: No such file or directory
$ cat /etc/ld.so.conf.d/nvidia-lib.conf
cat: /etc/ld.so.conf.d/nvidia-lib.conf: No such file or directory
$ sudo yum install mesa-libglapi
Loaded plugins: langpacks, refresh-packagekit
Package mesa-libglapi-9.2.5-1.20131220.fc20.x86_64 already installed and latest version
Nothing to do
$ sudo yum install xorg-x11-drv-nvidia-libs.i686
Loaded plugins: langpacks, refresh-packagekit
No package xorg-x11-drv-nvidia-libs.i686 available.
Error: Nothing to do
我在晚上又安装了一些东西,但似乎都没有什么效果,所以我没有思考它们是相关的。
如果需要更多信息,请告诉我,我会提供。提醒一下,我对 Linux 还很陌生,仍在学习,因此我对我能做的所有不同 UNIX 操作并不是最熟悉的。
以下是我的系统规格的简要概述:
$ uname -a
Linux localhost.localdomain 3.12.5-302.fc20.x86_64 #1 SMP Tue Dec 17 20:42:32 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ grep "model name" /proc/cpuinfo
model name : Intel(R) Core(TM) i3-3120M CPU @ 2.50GHz
谢谢!
编辑#1
我运行sudo yum install mesa-dri-drivers
后发现它已经安装在我的系统上了。
$ sudo yum install mesa-dri-drivers
Loaded plugins: langpacks, refresh-packagekit
Dropbox | 951 B 00:00
google-chrome | 951 B 00:00
updates/20/x86_64/metalink | 18 kB 00:00
updates | 4.6 kB 00:00
updates/20/x86_64/primary_db | 3.0 MB 00:06
updates/20/x86_64/updateinfo FAILED
ftp://mirror.nexicom.net/pub/fedora/linux/updates/20/x86_64/repodata/updateinfo.xml.gz: [Errno 14] curl#56 - "response reading failed"
Trying other mirror.
(1/2): updates/20/x86_64/updateinfo | 309 kB 00:01
(2/2): updates/20/x86_64/pkgtags | 755 kB 00:23
Package mesa-dri-drivers-9.2.5-1.20131220.fc20.x86_64 already installed and latest version
Nothing to do
编辑#2
执行后lspci -vvv -s 00:02.0
,我的输出如下:
# lspci -vvv -s 00:02.0
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) (prog-if 00 [VGA controller])
Subsystem: Toshiba America Info Systems Device fa20
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 16
Region 0: Memory at c8000000 (64-bit, non-prefetchable) [size=4M]
Region 2: Memory at c0000000 (64-bit, prefetchable) [size=128M]
Region 4: I/O ports at 4000 [size=64]
Expansion ROM at <unassigned> [disabled]
Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit-
Address: 00000000 Data: 0000
Capabilities: [d0] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [a4] PCI Advanced Features
AFCap: TP+ FLR+
AFCtrl: FLR-
AFStatus: TP-
答案1
原始评论
请尝试i915.modeset=1
在启动时添加到内核命令行(您应该在 GRUB 中编辑 Fedora 行并将其添加到启动配置中的 linux/linux16/linuxefi 行的末尾,然后按 F10),然后glxinfo
在启动时运行。
另外,我想知道启动 Fedora 时你会看到什么?是填充了白色的 Fedora 徽标,还是屏幕底部的 3 个简单的条?
更新
glxinfo
从添加到内核启动命令行后的最后一个输出中可以看出i915.modeset=1
,您的图形驱动程序已加载并正常运行。之前,它根本没有加载,您使用的是通用驱动程序。
但这其实是个 bug。内核应该自动加载 i915 驱动程序。
更新 2
更新 2:要永久更改内核命令行,您可以:
- 如果您不想运行
grub2-mkconfig
生成新的配置文件,您应该编辑/boot/grub2/grub.cfg
并将命令行选项(其格式与您在启动时编辑启动项时看到的格式完全相同)添加到 Fedora 菜单项中。 - 即使您采用上述解决方案,您可能有一天会运行
grub2-mkconfig -o /boot/grub2/grub.cfg
创建一个新的配置文件(它将完全覆盖,/boot/grub2/grub.cfg
因此您对它的更改将丢失)。因此,我建议也在行末(但在结束之前)编辑/etc/default/grub
并添加;这样它就会变成这样:i915.modeset=1
GRUB_CMDLINE_LINUX=
"
GRUB_CMDLINE_LINUX="vconsole.font=latarcyrheb-sun16 $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/rhcrashkernel-param || :) rhgb quiet i915.modeset=1"