英特尔显卡
由于 Intel 提供并支持开源驱动程序,因此英特尔显卡基本上是即插即用的。
有关英特尔 GPU 型号及其对应的芯片组和 CPU 的完整列表,请参阅 Wikipedia:Intel Graphics Technology 和 Gentoo:Intel#Feature support。
- PowerVR 架构的显卡(GMA 3600 系列)不受开源驱动程序支持。
- Intel 的 GenN 硬件不是指 CPU 的代数,而是指 GPU 的代数,这与 CPU 的代数不同。
- 请参阅 Xorg#驱动程序安装 以识别您的显卡。
安装
- 安装 以下软件包之一,它们提供了用于 3D 加速的 DRI 驱动程序。
- mesa 是最新的 Mesa 软件包,其中包括用于 Gen 3 硬件及更高版本的现代 Gallium3D 驱动程序。 这是推荐的选择。
- mesa-amber 是旧版 Mesa 软件包,其中包括用于 Gen 2 到 Gen 11 硬件的经典(非 Gallium3D)驱动程序。 对于 Gen 7 及更早的硬件,此驱动程序可能具有更好的性能或稳定性,但已不再维护。
- 为了支持 32 位应用程序,另请从 multilib 仓库安装 lib32-mesa 或 lib32-mesa-amber 软件包。
- 对于在 Xorg 中提供 2D 加速的 DDX 驱动程序,请使用以下驱动程序之一
- 包含在 xorg-server 软件包中的 modesetting 驱动程序是 Gen 4 硬件及更高版本的推荐选择。 它使用 DRI 驱动程序通过 glamor 进行加速。
- xf86-video-intel 软件包提供了从 Gen 2 到 Gen 9 硬件的旧版 intel DDX 驱动程序。 通常不建议使用此软件包,请参阅下面的注释。
- 为了获得 Vulkan 支持(Broadwell 及更高版本;对早期芯片的支持不完整或缺失),请安装 vulkan-intel 软件包。 为了获得 32 位 Vulkan 支持,请安装 lib32-vulkan-intel 软件包。
另请参阅 硬件视频加速。
- 一些项目(Debian 和 Ubuntu,Fedora,KDE,Mozilla)建议不要安装 xf86-video-intel 驱动程序,而是回退到 modesetting 驱动程序。 请参阅 [1],[2],Xorg#安装,以及 modesetting(4)。 但是,modesetting 驱动程序可能会导致诸如 XFCE 上的屏幕撕裂和鼠标抖动、在 Chromium 中切换虚拟桌面时出现伪影以及 mpv 中 vsync 抖动/视频卡顿之类的问题。
- xf86-video-intel 驱动程序对 Gen 11 及更新的硬件没有适当的支持,导致缺乏加速和渲染问题,这使得 Plasma 桌面几乎无法使用。 请参阅 [3]。
- 有一些报告 [4] [5] 指出,当安装 xf86-video-intel 时,整个图形堆栈会硬冻结,甚至切换到不同的虚拟控制台也无效(通过按
Ctrl+Alt+Fn
),只有使用 SysRq 杀死用户进程才有效。
加载
Intel 内核模块应该可以在系统启动时自动加载。
如果未发生这种情况,则
- 请确保您没有将
nomodeset
作为内核参数,因为 Intel 需要内核模式设置。 - 另外,请检查您是否没有使用
/etc/modprobe.d/
或/usr/lib/modprobe.d/
中的任何 modprobe 黑名单禁用 Intel。
早期 KMS
内核模式设置 (KMS) 受 i915
和 xe
驱动程序支持,并且自 mkinitcpio v32 起已提前启用,因为 kms
hook 默认包含在内。 对于其他设置,请参阅 内核模式设置#早期 KMS 启动,以获取有关如何在启动过程中尽快启用 KMS 的说明。
启用 GuC / HuC 固件加载
从 Gen9(Skylake 及更高版本)开始,Intel GPU 包含一个图形微(μ)控制器 (GuC),它提供以下功能
- 将某些媒体解码功能从 CPU 卸载到 HEVC/H.265 微(μ)控制器 (HuC)。 仅在使用 intel-media-driver 进行 硬件视频加速 时适用。 Gen9 中引入。
- 使用 GuC 进行调度、上下文提交和电源管理。 在 Gen12 中的 Alder Lake-P (Mobile) 中引入。
要使用此功能,首先请确保已安装 linux-firmware,因为它提供了 GuC 和 HuC 固件文件。
接下来,必须加载 GuC 固件。 关于 HuC 支持,某些视频功能(例如 SKL 低功耗编码模式下的 CBR 速率控制)也需要加载 HuC 固件 [6]。
新的实验性 xe
驱动程序默认启用 Guc 和 Huc 功能。
对于 i915
驱动程序,GuC 功能由 i915.enable_guc
内核参数 控制。 其用法如下
enable_guc 值 | GuC 提交 | HuC 固件加载 | 平台的默认值 | 平台上支持 |
---|---|---|---|---|
0 | 否 | 否 | Tiger Lake、Rocket Lake 和 Pre-Gen12 [7] | 全部 |
1 | 是 | 否 | – | Alder Lake-P (Mobile) 及更新版本 |
2 | 否 | 是 | Alder Lake-S (Desktop) [8] [9] | Gen9 及更新版本 |
3 | 是 | 是 | Alder Lake-P (Mobile) 及更新版本 | Gen 9.5 及更新版本(对某些设备更好) |
如果默认情况下未为您的 GPU 启用 GuC 提交或 HuC 固件加载,您可以手动启用它。
设置 i915.enable_guc
内核参数,例如使用
/etc/modprobe.d/i915.conf
options i915 enable_guc=2
重新生成 initramfs,下次启动时,您可以使用 dmesg 验证 GuC 和 HuC 是否都已启用
# dmesg | grep -i -e 'huc' -e 'guc'
[30130.586970] i915 0000:00:02.0: [drm] GuC firmware i915/icl_guc_33.0.0.bin version 33.0 submission:disabled [30130.586973] i915 0000:00:02.0: [drm] HuC firmware i915/icl_huc_9.0.0.bin version 9.0 authenticated:yes
如果您的图形适配器不支持它们,您将看到
# dmesg | grep -i -e 'huc' -e 'guc'
[ 0.571339] i915 0000:00:02.0: [drm] Incompatible option enable_guc=2 - GuC is not supported! [ 0.571340] i915 0000:00:02.0: [drm] Incompatible option enable_guc=2 - HuC is not supported!
或者,使用以下命令进行检查
# less /sys/kernel/debug/dri/*/gt0/uc/guc_info # less /sys/kernel/debug/dri/*/gt0/uc/huc_info
i915.enable_gvt=1
来使用 GVT-g 图形虚拟化。 i915 模块将无法初始化,如系统日志所示。# journalctl
... kernel: [drm:intel_gvt_init [i915]] *ERROR* i915 GVT-g loading failed due to Graphics virtualization is not yet supported with GuC submission ... kernel: i915 0000:00:02.0: [drm:i915_driver_load [i915]] Device initialization failed (-5) ... kernel: i915: probe of 0000:00:02.0 failed with error -5 ... kernel: snd_hda_intel 0000:00:1f.3: failed to add i915 component master (-19)
请注意,相关的警告并非致命,如 [10] 中所述
# journalctl -b
... kernel: i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x5916_rid_0x02.golden_hw_state failed with error -2
Xorg 配置
通常不需要任何配置即可运行 Xorg。
但是,要利用某些驱动程序选项,或者如果 Xorg 未启动,您可以创建一个 Xorg 配置文件。
使用 modesetting 驱动
如果您已安装 xf86-video-intel,但想要显式加载 modesetting 驱动程序,而不是让 DDX 驱动程序优先,例如,当尝试比较它们时
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Intel Graphics" Driver "modesetting" EndSection
使用 Intel 驱动
创建一个类似于下面这样的 Xorg 配置文件
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Intel Graphics" Driver "intel" EndSection
其他选项由用户在 Driver
下面的新行中添加。 有关选项的完整列表,请参阅 intel(4) 手册页。
AccelMethod
在创建配置文件时,您可能需要指示 Option "AccelMethod"
,经典选项为 UXA
、SNA
(默认)和 BLT
。
如果您在使用默认 SNA
时遇到问题(例如,像素化图形、损坏的文本等),请尝试改用 UXA
,这可以通过将以下行添加到您的配置文件来完成
Option "AccelMethod" "uxa"
请参阅 intel(4) § 配置详情下的“AccelMethod”选项。
在新 GPU 上使用 Intel DDX 驱动
对于从 Gen8 (Broadwell) 开始的 Intel GPU,需要 Iris Mesa 驱动程序
Option "DRI" "iris"
禁用 TearFree、TripleBuffer、SwapbuffersWait
如果您使用合成器(现代桌面环境(如 GNOME、KDE Plasma、Xfce 等)中的默认设置),则通常可以禁用 TearFree、TripleBuffer 和 SwapbuffersWait 以提高性能并降低功耗。
Option "TearFree" "false" Option "TripleBuffer" "false" Option "SwapbuffersWait" "false"
基于模块的选项
i915
内核模块允许通过模块选项进行配置。 某些模块选项会影响省电。
所有选项的列表以及简短说明和默认值可以使用以下命令生成
$ modinfo -p i915
要检查当前启用了哪些选项,请运行
# systool -m i915 -av
您会注意到许多选项默认设置为 -1,从而导致每个芯片都有省电默认值。 但是,可以通过使用模块选项来配置更激进的省电。
帧缓冲压缩 (enable_fbc)
帧缓冲压缩 (FBC) 是一项可以在屏幕刷新期间降低功耗和内存带宽的功能。
如果硬件支持该功能,它将自动启用。 您可以使用以下命令验证是否已启用它
$ modinfo i915 | grep enable_fbc
parm: enable_fbc:Enable frame buffer compression for power savings (default: -1 (use per-chip default)) (int)
如果 parm 设置为 -1
,则无需执行任何操作。 否则,要强制启用 FBC,请使用 i915.enable_fbc=1
作为内核参数或在 /etc/modprobe.d/i915.conf
中设置
/etc/modprobe.d/i915.conf
options i915 enable_fbc=1
kernel: drm: not enough stolen space for compressed buffer, disabling.
在 Sandy Bridge 之前的 CPU 上启用帧缓冲压缩会导致无休止的错误消息
# dmesg
[ 2360.475430] [drm] not enough stolen space for compressed buffer (need 4325376 bytes), disabling [ 2360.475437] [drm] hint: you may be able to increase stolen memory size in the BIOS to avoid this解决方案是禁用帧缓冲压缩,这将使功耗略微增加(约 0.06 瓦)。 为了禁用它,请将
i915.enable_fbc=0
添加到内核命令行参数。 有关禁用压缩的结果的更多信息,请访问此处。Fastboot
Intel Fastboot 的目标是保留 BIOS 或引导加载程序设置的帧缓冲区,以避免在 Xorg 启动之前出现任何闪烁。[16][17]
要在默认情况下未启用的平台上强制启用 fastboot,请将 i915.fastboot=1
设置为内核参数或在 /etc/modprobe.d/i915.conf
中设置
/etc/modprobe.d/i915.conf
options i915 fastboot=1
Intel GVT-g 图形虚拟化支持
有关详细信息,请参阅 Intel GVT-g。
启用性能支持
从 Gen6(Sandy Bridge 及更高版本)开始,Intel GPU 提供用于向驱动程序公开内部性能数据的性能计数器。 驱动程序和硬件寄存器将此基础设施称为观察架构(内部为“OA”)[19],但 Intel 的文档更普遍地将此功能称为提供可观察性性能计数器 [20][死链 2023-09-16 ⓘ] [21][死链 2023-09-16 ⓘ]。
默认情况下,只有以 CAP_SYS_ADMIN(等效于 root)或 CAP_PERFMON capabilities 运行的程序才能使用观察架构 [22] [23]。 大多数应用程序将在没有其中任何一个的情况下运行,从而导致以下警告
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0
要在不使用 capabilities(或 root)的情况下启用性能支持,请按照 sysctl 中的描述设置内核参数。
perf_event_paranoid
系列选项的限制性默认值存在的原因是,允许应用程序访问性能数据存在风险 [24]。 话虽如此,dev.i915.perf_stream_paranoid
仅影响对 GPU 性能计数器的访问,与例如 CPU 架构执行上下文寄存器相比,风险较小。技巧与提示
设置缩放模式
这对于某些全屏应用程序可能很有用
$ xrandr --output LVDS1 --set PANEL_FITTING param
其中 param
可以是
center
:分辨率将完全按照定义保持,不会进行缩放,full
:缩放分辨率以使其使用整个屏幕,或者full_aspect
:将分辨率缩放到最大可能值,但保持宽高比。
如果它不起作用,请尝试
$ xrandr --output LVDS1 --set "scaling mode" param
其中 param
是 "Full"
、"Center"
或 "Full aspect"
之一。
在 GMA 4500 上进行硬件加速 H.264 解码
libva-intel-driver 软件包仅为某些 GMA 4500 系列 GPU 提供硬件加速 MPEG-2 解码——而不是 H.264 解码。 要检查这是否影响您的特定 GPU,请同时安装该驱动程序和 libva-utils 软件包,然后检查 vainfo
工具的输出中是否存在以 VAProfileH264
开头的条目。
H.264 解码支持在单独的 g45-h264 分支中维护,可以通过安装 libva-intel-driver-g45-h264AUR 软件包来使用。 但是请注意,此支持是实验性的,其开发已被放弃。 在 GMA 4500 系列 GPU 上将 VA-API 与此驱动程序结合使用将卸载 CPU,但可能无法实现像非加速播放那样流畅的播放。 使用 mplayer 的测试表明,使用 vaapi 播放 H.264 编码的 1080p 视频可将 CPU 负载减半(与 XV 叠加相比),但导致播放非常卡顿,而 720p 工作得相当好 [26]。 其他经验也印证了这一点[27]。 在 BIOS 中将预分配的视频内存大小设置得更高可以带来更好的硬件解码播放效果。 即使是 1080p h264,如果这样做也能很好地工作[28]。 流畅播放 (1080p/720p) 也适用于 mpv-gitAUR,并结合 ffmpeg-gitAUR 和 libva-intel-driver-g45-h264AUR。 借助 MPV 和 Firefox 插件“Send to MPV player”[29],可以观看硬件加速的 YouTube 视频。
覆盖报告的 OpenGL 版本
MESA_GL_VERSION_OVERRIDE
环境变量可用于覆盖向任何应用程序报告的 OpenGL 版本。 例如,设置 MESA_GL_VERSION_OVERRIDE=4.5
将报告 OpenGL 4.5。
监控
- intel_gpu_top — 类似于 top 的 Intel GPU 任务监视器(需要 root 权限)。
- nvtop — 用于 AMD、Intel 和 NVIDIA 的 GPU 进程监控(目前对 Intel GPU 的支持非常基础)。
设置亮度和伽玛值
请参阅 背光。
测试新的实验性 Xe 驱动
要尝试(实验性的)新 Xe 驱动程序,您需要
- linux 6.8 或更高版本
- Tiger Lake 集成显卡及更新版本,或独立显卡。
- mesa.
使用以下命令记下您的 PCI ID
$ lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] [8086:9a49] (rev 01)
然后将以下内容添加到您的内核参数中,并使用适当的 PCI ID
... i915.force_probe=!9a49 xe.force_probe=9a49
确保您有备用启动解决方案,以便在必要时恢复。
故障排除
画面撕裂
使用 Intel 驱动
SNA 加速方法在某些机器上会导致画面撕裂。 要解决此问题,请通过将以下行添加到您的配置文件中,在 xf86-video-intel 驱动程序中启用 TearFree
选项
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Intel Graphics" Driver "intel" Option "TearFree" "true" EndSection
有关更多信息,请参阅原始错误报告。
- 当
SwapbuffersWait
为false
时,此选项可能不起作用。 - 此选项可能会大大增加内存分配并降低性能。 [30]
- 对于对 vsync 时序非常挑剔的应用程序(如 Super Meat Boy),此选项存在问题。
- 此选项不适用于 UXA 加速方法,仅适用于 SNA。
- 对于 Intel UHD 620 或 630,您需要添加
Option "TripleBuffer" "true"
才能使TearFree
工作。 - 可能需要通过添加
Option "DRI" "2"
来禁用 DRI3,否则任何全屏应用程序(例如视频播放)都可能破坏 TearFree。 [31]
使用 modesetting 驱动
TearFree 支持 已添加到 modesetting 驱动程序 [32][33]。 由于非 XWayland 服务器的最后一个版本是 2021 年的 21.1 版本,因此此补丁尚未达到稳定版本,因此在那之前您将需要 xorg-server-gitAUR。
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Intel Graphics" Driver "modesetting" Option "TearFree" "true" EndSection
禁用垂直同步 (VSYNC)
在以下情况下很有用
- Chromium/Chrome 由于 GPU 出现延迟和性能缓慢,并且使用 --disable-gpu 开关可以流畅运行
- glxgears 测试未显示所需的性能
intel-driver 使用三重缓冲进行垂直同步; 这可以实现全部性能并避免画面撕裂。 要关闭垂直同步(例如,用于基准测试),请在您的主目录中使用此 .drirc
~/.drirc
<device screen="0" driver="dri2"> <application name="Default"> <option name="vblank_mode" value="0"/> </application> </device>
DRI3 问题
DRI3 是 xf86-video-intel 中的默认 DRI 版本。 在某些系统上,这可能会导致诸如此问题。 要切换回 DRI2,请将以下行添加到您的配置文件中
Option "DRI" "2"
对于 modesetting
驱动程序,此禁用 DRI3 的方法不起作用。 相反,可以设置环境变量 LIBGL_DRI3_DISABLE=1
。
GTK 应用程序中的字体和屏幕损坏(挂起/恢复后缺少字形)
如果您在 GTK 应用程序中遇到字体字形缺失的问题,以下解决方法可能会有所帮助。 编辑 /etc/environment
文件,添加以下行
/etc/environment
COGL_ATLAS_DEFAULT_BLIT_MODE=framebuffer
另请参阅 FreeDesktop 错误 88584。
X 冻结/崩溃,使用 intel 驱动
某些 X 崩溃、GPU 挂起或 X 冻结问题可以通过禁用 GPU 使用的 NoAccel
选项来修复 - 将以下行添加到您的 配置文件
Option "NoAccel" "True"
或者,尝试仅使用 DRI
选项禁用 3D 加速
Option "DRI" "False"
添加未检测到的分辨率
此问题已在 Xrandr 页面中涵盖。
背光不可调节
如果在从挂起恢复后,更改屏幕亮度的热键不起作用,请对照 背光 文章检查您的配置。
如果问题仍然存在,请尝试以下 内核参数 之一
acpi_osi=Linux acpi_osi="!Windows 2012" acpi_osi=
另请确保您未使用快速启动模式 (i915.fastboot
内核参数),已知 这会破坏背光控制。
Chromium 和 Firefox 中的损坏或无响应
如果您在 Chromium 和/或 Firefox 中遇到损坏、无响应、延迟或性能缓慢的问题,一些可能的解决方案是
- 将 AccelMethod 设置为 "uxa"
- 禁用 VSYNC
- 启用 TearFree 选项
- 禁用 "DRI" 和加速方法(在 Intel Iris 第 10 代显卡上测试)
Option "NoAccel" "True" Option "DRI" "False"
内核崩溃,使用 4.0+ 内核在 Broadwell/Core-M 芯片上
在 X/Wayland 加载几秒钟后,机器将冻结,journalctl 将记录内核崩溃日志,其中引用了 Intel 显卡,如下所示
Jun 16 17:54:03 hostname kernel: BUG: unable to handle kernel NULL pointer dereference at (null) Jun 16 17:54:03 hostname kernel: IP: [< (null)>] (null) ... Jun 16 17:54:03 hostname kernel: CPU: 0 PID: 733 Comm: gnome-shell Tainted: G U O 4.0.5-1-ARCH #1 ... Jun 16 17:54:03 hostname kernel: Call Trace: Jun 16 17:54:03 hostname kernel: [<ffffffffa055cc27>] ? i915_gem_object_sync+0xe7/0x190 [i915] Jun 16 17:54:03 hostname kernel: [<ffffffffa0579634>] intel_execlists_submission+0x294/0x4c0 [i915] Jun 16 17:54:03 hostname kernel: [<ffffffffa05539fc>] i915_gem_do_execbuffer.isra.12+0xabc/0x1230 [i915] Jun 16 17:54:03 hostname kernel: [<ffffffffa055d349>] ? i915_gem_object_set_to_cpu_domain+0xa9/0x1f0 [i915] Jun 16 17:54:03 hostname kernel: [<ffffffff811ba2ae>] ? __kmalloc+0x2e/0x2a0 Jun 16 17:54:03 hostname kernel: [<ffffffffa0555471>] i915_gem_execbuffer2+0x141/0x2b0 [i915] Jun 16 17:54:03 hostname kernel: [<ffffffffa042fcab>] drm_ioctl+0x1db/0x640 [drm] Jun 16 17:54:03 hostname kernel: [<ffffffffa0555330>] ? i915_gem_execbuffer+0x450/0x450 [i915] Jun 16 17:54:03 hostname kernel: [<ffffffff8122339b>] ? eventfd_ctx_read+0x16b/0x200 Jun 16 17:54:03 hostname kernel: [<ffffffff811ebc36>] do_vfs_ioctl+0x2c6/0x4d0 Jun 16 17:54:03 hostname kernel: [<ffffffff811f6452>] ? __fget+0x72/0xb0 Jun 16 17:54:03 hostname kernel: [<ffffffff811ebec1>] SyS_ioctl+0x81/0xa0 Jun 16 17:54:03 hostname kernel: [<ffffffff8157a589>] system_call_fastpath+0x12/0x17 Jun 16 17:54:03 hostname kernel: Code: Bad RIP value. Jun 16 17:54:03 hostname kernel: RIP [< (null)>] (null)
这可以通过禁用 execlist 支持来修复,execlist 支持在 4.0 内核中更改为默认启用。添加以下 内核参数
i915.enable_execlists=0
已知这在至少 4.0.5 内核中已损坏。
Windows 客户机中的延迟
VirtualBox 中 Windows 客户机的视频输出有时会挂起,直到主机强制屏幕更新(例如,通过移动鼠标光标)。删除 enable_fbc=1
选项可以修复此问题。
屏幕闪烁
面板自刷新 (PSR) 是 Intel iGPU 使用的省电功能,已知在某些情况下会导致闪烁 FS#49628 FS#49371 FS#50605。临时解决方案是使用 内核参数 i915.enable_psr=0
或 xe.enable_psr=0
禁用此功能。
OpenGL 2.1 与 i915 驱动
包含在 mesa-amber 包中的 Gen 3 GPU 的经典 mesa 驱动默认报告 OpenGL 2.0,因为硬件与 OpenGL 2.1 不完全兼容。[34] 可以通过设置 /etc/drirc
或 ~/.drirc
选项手动启用 OpenGL 2.1,例如
/etc/drirc
<driconf> ... <device driver="i915"> <application name="Default"> <option name="stub_occlusion_query" value="true" /> <option name="fragment_shader" value="true" /> </application> </device> ... </driconf>
KMS 问题:控制台被限制在小区域
启动时可能启用了一个低分辨率视频端口,这导致终端仅使用屏幕的一小部分区域。要修复此问题,请在启动加载程序中的内核命令行参数中使用 video=SVIDEO-1:d
的 i915 模块设置显式禁用该端口。有关更多信息,请参阅 内核参数。
如果这不起作用,请尝试禁用 TV1 或 VGA1 而不是 SVIDEO-1。可以使用 xrandr 列出视频端口名称。
在 Haswell CPU 上通过 HDMI 没有声音
根据 Linux 内核问题,如果 intel_iommu=on
,则不会通过 HDMI 输出声音。要解决此问题,请使用以下 内核参数
intel_iommu=on,igfx_off
或者,禁用 IOMMU
intel_iommu=off
低功耗 Intel CPU 上的崩溃/冻结
低功耗 Intel 处理器和/或笔记本电脑处理器由于低功耗 Intel 芯片中的电源管理功能问题,容易随机挂起或崩溃。如果发生此类崩溃,您将看不到任何报告此问题的日志。添加以下 内核参数 可能会有所帮助以解决问题。
intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1
ahci.mobile_lpm_policy=1
修复了由于有问题的 SATA 控制器电源管理,导致多款 Lenovo 笔记本电脑和一些 Acer 笔记本电脑挂起的问题。该解决方法严格来说与 Intel 显卡无关,但它确实解决了相关问题。添加此内核参数会将链接电源管理从固件默认值设置为最大性能,并且还可以解决在某些 Lenovo 机器上更改显示器亮度时发生的挂起问题,但会使现代超极本的空闲功耗增加 1-1.5 瓦。有关更多信息,特别是关于其他状态的信息,请参阅 Linux 内核邮件列表 和 Red Hat 文档。
i915.enable_dc=0
禁用 GPU 电源管理。这确实解决了某些 Intel 系统(尤其是 Goldmount 和 Kaby Lake Refresh 芯片)上的随机挂起问题。使用此参数确实会导致笔记本电脑/笔记本电脑上的功耗更高和电池续航时间更短。
intel_idle.max_cstate=1
限制了处理器的睡眠状态,它可以防止处理器进入深度睡眠状态。这绝对不是理想的,并且确实会导致更高的功耗和更低的电池续航时间。但是,它确实解决了许多 Intel 系统上的随机挂起问题。如果您有 Intel Baytrail 或 Kaby Lake Refresh 芯片,请使用此参数。Intel "Baytrail" 芯片已知在没有此内核参数的情况下会随机挂起,原因是 硬件缺陷,理论上已在 2019-04-26 修复。有关 max_cstate 参数的更多信息,请参见 内核文档,以及有关 cstate 的一般信息,请参见 GitHub 上的文章。
如果您尝试添加 intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1
以希望修复频繁的挂起,并且这解决了问题,您应该稍后逐个删除它们,以查看其中哪一个实际上帮助您解决了问题。如果实际问题与 SATA 电源管理有关,并且 ahci.mobile_lpm_policy=1
是真正解决问题的那个,则不建议在禁用 cstate 和显示器电源管理的情况下运行。
查看 Linux Reviews 以获取更多详细信息。
更高的 C 状态阻止从 S3 唤醒
如果您偶尔唤醒时遇到黑屏,但系统以其他方式正常恢复,并且日志中显示 CPU pipe A FIFO underrun
消息,并且限制 intel_idle.max_cstate=1
可靠地防止这种情况,您可以 使用 挂起和休眠#睡眠钩子 和 cpupower-idle-set(1) 来有效地控制挂起周期周围的 C 状态,使用 -D0
和 -E
而不是永久地以最低 C 状态运行 CPU。
添加对 165Hz 监视器的支持
对于某些 165Hz 监视器,xrandr 可能不显示 165Hz 选项,并且 #添加未检测到的分辨率 中的修复方法无法解决此问题。在这种情况下,请参阅 i915-driver-stuck-at-40hz-on-165hz-screen。
/etc/initramfs-tools/hooks/edid
之外,还应该制作一个 mkinitcpio 钩子/etc/initcpio/install/edid
#!/bin/bash build() { add_file /lib/firmware/edid/edid.bin } help() { cat <<HELPEOF This hook add support for 165Hz HELPEOF }
然后在 /etc/mkinitcpio.conf
的 HOOKS 中附加 edid,就像这样
/etc/mkinitcpio.conf
HOOKS=(... fsck edid)
使用 Raptor Lake 和 Alder Lake-P 从睡眠/挂起唤醒后冻结
来自不同供应商的配备 Raptor Lake 和 Alder Lake-P 第 12 代移动处理器的笔记本电脑用户在从挂起唤醒后经历了冻结和黑屏。这是因为许多笔记本电脑供应商出厂时附带了不正确的 VBT(视频 BIOS 表),如 freedesktop 问题 5531 6401 中所述,错误地描述了连接到 iGPU 的实际端口。在这种情况下,所有记录在案的案例都与重复的 eDP 条目有关。
考虑到大多数供应商 不会 为具有正常工作的 Windows 操作系统的笔记本电脑发布 BIOS 更新,Linux 用户只能在内核端解决此问题。用户有两种方法可以防止重复的 eDP 条目影响内核:修补内核 或 加载修改后的 VBT。
对于修补内核,需要通过分析以下输出结果来识别重复的 eDP 条目
# intel_vbt_decode /sys/kernel/debug/dri/1/i915_vbt
Child device info: Device handle: 0x0008 (LFP 1 (eDP)) Device type: 0x1806 (unknown) ... Child device info: Device handle: 0x0080 (LFP 2 (eDP)) Device type: 0x1806 (unknown)
这表明实际上存在重复的 eDP,内核应忽略第二个条目,但仍鼓励用户检查这一点。然后可以使用以下内核补丁对其进行修补,如果需要,可以将重复屏幕的索引替换为 ignoreEntry = 1
。
--- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -3688,6 +3688,14 @@ { struct intel_bios_encoder_data *devdata; + int ignoreEntry = 0; + list_for_each_entry(devdata, &i915->display.vbt.display_devices, node) - func(i915, devdata); + { + if (ignoreEntry != 1) + { + func(i915, devdata); + ignoreEntry++; + } + } }
解决此问题的第二种方法是通过直接 从 VBT 中擦除重复条目 来编辑 VBT。
这通过复制 VBT 并使用十六进制编辑器对其进行编辑,并将与重复设备句柄对应的设备类型更改为 00 00
来实现
$ cat /sys/kernel/debug/dri/0/i915_vbt > vbt
--- vbt +++ modified_vbt @@ -22,10 +22,10 @@ 00000150 00 08 00 20 00 08 00 10 00 08 00 02 00 08 00 01 |... ............| 00000160 00 08 00 00 01 08 00 00 00 04 00 00 00 40 00 00 |.............@..| 00000170 00 20 00 00 00 10 00 00 00 02 00 00 00 01 00 00 |. ..............| -00000180 00 00 01 00 00 02 8b 01 02 04 00 00 27 08 00 06 |............'...| -00000190 18 00 00 00 00 00 00 00 00 00 00 00 00 0a 00 00 |................| +00000180 00 00 01 00 00 02 8b 01 02 04 00 00 27 08 00 00 |............'...| +00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 00 00 |................| 000001a0 03 00 00 00 c0 00 40 00 20 00 00 00 00 00 00 00 |......@. .......| -000001b0 00 00 20 00 80 00 06 18 00 00 00 00 00 00 00 00 |.. .............| +000001b0 00 00 20 00 80 00 00 00 00 00 00 00 00 00 00 00 |.. .............| 000001c0 00 00 00 00 07 00 00 00 00 00 00 c0 00 10 00 20 |............... | 000001d0 00 00 00 00 00 00 00 00 00 20 00 04 00 d2 60 00 |......... ....`.| 000001e0 10 10 00 23 21 10 00 00 00 00 00 07 00 00 02 00 |...#!...........|
然后可以通过将其复制到 /lib/firmware/modified_vbt
,并将 i915.vbt_firmware=modified_vbt
作为内核参数传递,并在需要时 重新生成 initramfs 来加载修改后的 VBT。
色彩冲淡
默认情况下,某些显示器可能无法被 Intel GPU 正确识别,并且颜色会冲淡,因为它不是全范围 RGB 模式。
修复 Wayland 的颜色
/etc/udev/rules.d/80-i915.rules
ACTION=="add", SUBSYSTEM=="module", KERNEL=="i915", RUN+="/usr/local/bin/intel-wayland-fix-full-color"
/usr/local/bin/intel-wayland-fix-full-color
#!/bin/bash readarray -t proptest_result <<<"$(/usr/bin/proptest -M i915 -D /dev/dri/card0 | grep -E 'Broadcast|Connector')" for ((i = 0; i < ${#proptest_result[*]}; i += 2)); do connector=$(echo ${proptest_result[i]} | awk '{print $2}') connector_id=$(echo ${proptest_result[i + 1]} | awk '{print $1}') /usr/bin/proptest -M i915 $connector connector $connector_id 1 done
如果您正在使用 GNOME,另一种方法 是将 <rgbrange>full</rgbrange>
添加到 ~/.config/monitors.xml
配置中。例如
~/.config/monitors.xml
<monitors version="2"> <configuration> <layoutmode>logical</layoutmode> <logicalmonitor> <x>0</x> <y>0</y> <primary>yes</primary> <monitor> <monitorspec> <connector>HDMI-1</connector> <vendor>MetaProduct's Inc.</vendor> <product>MetaMonitor</product> <serial>0x123456</serial> </monitorspec> <mode> <width>1920</width> <height>1080</height> <rate>60.000</rate> </mode> <rgbrange>full</rgbrange> </monitor> </logicalmonitor> </configuration> </monitors>
- 如果显示器被重新排列或显示设置以任何其他方式更改,则可能会将没有
<rgbrange>full</rgbrange>
标记的新布局添加到monitors.xml
文件中。为了确保 RGB 范围在不同布局中保持一致设置,请考虑将该标记添加到逻辑监视器的每个重复条目中。 - 如果 GDM 登录屏幕未使用全 RGB 范围,请将用户的
monitors.xml
复制到 gdm 的主目录。请参阅 GDM#设置默认监视器设置
修复 X11/Xorg 的颜色
# xrandr --output NAME_OF_YOUR_OUTPUT --set "Broadcast RGB" "Full"
另请参阅
- linux graphics(包括 106 个相关产品的列表)
- Intel® 处理器显卡(包括处理器系列、以前的代号、发布日期和显卡技术的表格)