Intel 显卡
由于 Intel 提供并支持开源驱动程序,因此 Intel 显卡基本上是即插即用的。
有关 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 进行调度、上下文提交和电源管理。 随 Alder Lake-P (Mobile) 在 Gen12 中引入。
要使用此功能,首先请确保已安装 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) § CONFIGURATION DETAILS 下的 "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]。 使用 mpv-gitAUR 结合 ffmpeg-gitAUR 和 libva-intel-driver-g45-h264AUR,流畅播放 (1080p/720p) 也能正常工作。 配合 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 — 用于 Intel GPU 的类似 top 的任务监视器(需要 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]
- 此选项对于对垂直同步时序非常敏感的应用程序(如 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。
使用 intel 驱动程序时 X 冻结/崩溃
一些 X 崩溃、GPU 挂起或 X 冻结的问题可以通过禁用 GPU 使用率和 NoAccel 选项来修复 - 将以下行添加到你的配置文件中
Option "NoAccel" "True"
或者,尝试仅使用 DRI 选项禁用 3D 加速
Option "DRI" "False"
添加未检测到的分辨率
此问题在 Xrandr 页面上进行了介绍。
背光不可调节
如果在从挂起恢复后,用于更改屏幕亮度的热键不起作用,请对照 Backlight 文章检查你的配置。
如果问题仍然存在,请尝试以下内核参数之一
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"
内核在 Broadwell/Core-M 芯片上使用 4.0+ 内核时崩溃
在 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 支持来修复,该支持在内核 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 禁用此功能。
使用 i915 驱动程序的 OpenGL 2.1
包含在 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 可以可靠地防止这种情况,你可以使用 Suspend and hibernate#Sleep hooks 和 cpupower-idle-set(1) 来有效控制挂起周期附近的 C 状态,使用 -D0 和 -E 以避免 CPU 永久运行在最低 C 状态。
添加对 165Hz 显示器的支持
对于某些 165Hz 显示器,xrandr 可能不显示 165Hz 选项,并且 #添加未检测到的分辨率 中的修复方法无法解决此问题。在这种情况下,请参阅 i915-driver-stuck-at-40hz-on-165hz-screen。
/etc/initramfs-tools/hooks/edid 之外,还应该创建一个 mkinitcpio hook/etc/initcpio/install/edid
#!/bin/bash
build() {
add_file /lib/firmware/edid/edid.bin
}
help() {
cat <<HELPEOF
This hook add support for 165Hz
HELPEOF
}
然后将 edid 附加到 /etc/mkinitcpio.conf 的 HOOKS 中,就像这样
/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® Processor Graphics (包括处理器系列、原代码名、发布日期和图形技术表格)