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 (包括处理器系列、原代码名、发布日期和图形技术表格)