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 默认包含在内。 对于其他设置,请参阅 Kernel mode setting#早期 KMS 启动 以获取有关如何在启动过程中尽快启用 KMS 的说明。
启用 GuC / HuC 固件加载
从 Gen9(Skylake 及更高版本)开始,Intel GPU 包含一个图形微 (μ) 控制器 (GuC),它提供以下功能
- 将一些媒体解码功能从 CPU 卸载到HEVC/H.265 微 (μ) 控制器 (HuC)。 仅在使用 intel-media-driver 进行 硬件视频加速 时适用。 在 Gen9 中引入。
- 使用 GuC 进行调度、上下文提交和电源管理。 在 Gen12 中的 Alder Lake-P (移动版) 中引入。
要使用此功能,首先请确保已安装 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 (移动版) 及更新版本 |
| 2 | 否 | 是 | Alder Lake-S (桌面版) [8] [9] | Gen9 及更新版本 |
| 3 | 是 | 是 | Alder Lake-P (移动版) 及更新版本 | 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) man 手册。
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]。 流畅播放 (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工作。 - 可能需要禁用 DRI3,方法是添加
Option "DRI" "2",否则任何全屏应用程序(如视频播放)都可能破坏 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 页面上进行了介绍。
背光不可调节
如果在从挂起状态恢复后,用于更改屏幕亮度的热键不起作用,请对照背光文章检查您的配置。
如果问题仍然存在,请尝试以下内核参数之一
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 显卡无关,但它确实解决了相关问题。添加此内核参数会将link power management 从固件默认值设置为最大性能,并且还可以解决在某些 Lenovo 机器上更改显示亮度时发生的挂起,但会在现代超极本上增加 1-1.5 W 的空闲功耗。有关更多信息,特别是关于其他状态的信息,请参阅 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 作为内核参数传递来加载修改后的 VBT,并且如果需要,可以重新生成 initramfs。
色彩冲淡
默认情况下,某些监视器可能无法被 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(包括处理器系列、前代号、发布日期和图形技术表)