Intel显卡
由于Intel提供并支持开源驱动,Intel显卡基本上是即插即用的。
有关Intel GPU型号及其对应芯片组和CPU的完整列表,请参阅 Wikipedia:Intel Graphics Technology 和 Gentoo:Intel#Feature support。
- 基于PowerVR的图形 (GMA 3600系列) 不受开源驱动支持。
- Intel的Gen N硬件不是指CPU的代数,而是指GPU的代数,这与CPU的代数不同。
- 请参阅 Graphics processing unit#Installation 来识别您的显卡。
安装
- 请安装以下软件包之一,它们提供用于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 3及更高硬件的推荐选择。它通过glamor使用DRI驱动进行加速。
xf86-video-intel软件包提供了Gen 2到Gen 9硬件的旧版intel DDX驱动。通常不推荐此软件包,请参见下面的注释。
- 要获得Vulkan支持(Broadwell及更新版本;更早芯片的支持不完整或缺失),请安装vulkan-intel软件包。要获得32位Vulkan支持,请安装lib32-vulkan-intel软件包。
另请参阅 Hardware video acceleration。
- 一些 (Debian & Ubuntu, Fedora, KDE, Mozilla) 建议不要安装 xf86-video-intel 驱动程序,而是回退到 modesetting 驱动程序。请参阅 [1]、[2]、Xorg#Installation 和 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
Kernel mode setting (KMS) 受i915和xe驱动程序支持,并且自mkinitcpio v32以来已尽早启用,因为kmshook默认包含。对于其他设置,请参阅Kernel mode setting#Early KMS start了解如何在启动过程尽早启用KMS的说明。
启用GuC/HuC固件加载
从Gen 9 (Skylake及更新版本)开始,Intel GPU包含一个Graphics micro (μ) Controller (GuC),它提供以下功能:
- 将部分媒体解码功能从CPU卸载到HEVC/H.265 micro (µ) Controller (HuC)。仅当使用intel-media-driver进行硬件视频加速时适用。Gen 9引入。
- 使用GuC进行调度、上下文提交和电源管理。Alder Lake-P (Mobile)及更新版本引入,Gen 12内。
要使用此功能,请首先确保linux-firmware-intel已安装,因为它提供了GuC和HuC固件文件。
接下来,必须加载GuC固件。关于HuC支持,某些视频功能(例如SKL低功耗编码模式下的CBR速率控制)需要加载HuC固件[6]。
新的实验性xe驱动程序默认启用Guc和Huc功能。
对于i915驱动程序,GuC功能由enable_guc内核模块参数控制。其用法如下:
| enable_guc值 | GuC提交 | HuC固件加载 | 平台的默认值 | 平台支持 |
|---|---|---|---|---|
| 0 | 否 | 否 | Tiger Lake, Rocket Lake, and pre-Gen 12 [7] | 全部支持 |
| 1 | 是 | 否 | – | Alder Lake-P (Mobile) and newer |
| 2 | 否 | 是 | Alder Lake-S (Desktop) [8] [9] | Gen 9 and newer |
| 3 | 是 | 是 | Alder Lake-P (Mobile) and newer | Gen 9.5 and newer (better for some) |
如果GuC提交或HuC固件加载未默认启用您的GPU,您可以手动启用它。
设置enable_guc=内核模块参数。例如,使用
/etc/modprobe.d/i915.conf
options i915 enable_guc=3
Regenerate the 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
enable_gvt=1,在Linux 4.20.11及更高版本中与GuC/HuC同时启用时不支持。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”选项。
使用Intel DDX驱动和较新的GPU
对于Intel GPU从Gen 8 (Broadwell)开始,需要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
帧缓冲压缩在Gen 6 (Sandy Bridge)之前可能不可靠或不可用。启用它会导致无休止的错误消息。
[drm] not enough stolen space for compressed buffer (need 4325376 bytes), disabling [drm] hint: you may be able to increase stolen memory size in the BIOS to avoid this
Fastboot
Intel Fastboot的目标是在Xorg启动之前,保留BIOS或引导加载程序设置的帧缓冲,以避免任何闪烁。[17][18]
要在fastboot尚未默认启用的平台上强制启用fastboot,请将i915.fastboot=1设置为内核参数或在/etc/modprobe.d/i915.conf中设置。
/etc/modprobe.d/i915.conf
options i915 fastboot=1
Intel GVT-g图形虚拟化支持
请参阅 Intel GVT-g 获取详细信息。
启用性能支持
从 Gen 6(Sandy Bridge 及更高版本)开始,Intel GPU 提供性能计数器,用于将内部性能数据暴露给驱动程序。驱动程序和硬件寄存器将此基础设施称为*Observation Architecture*(内部代号为“OA”)[19],但 Intel 的文档也更普遍地将此功能称为提供*Observability Performance Counters*[20][死链 2023-09-16—HTTP 404] [21][死链 2023-09-16—HTTP 404]。
默认情况下,只有具有CAP_SYS_ADMIN(等同于root)或CAP_PERFMON能力的程序才能使用观测架构[22] [23]。大多数应用程序将不具备这些能力中的任何一个,从而导致以下警告:
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0
要启用性能支持而不使用能力(或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"之一。
覆盖报告的OpenGL版本
MESA_GL_VERSION_OVERRIDE环境变量可用于覆盖任何应用程序报告的OpenGL版本。例如,设置MESA_GL_VERSION_OVERRIDE=4.5将报告OpenGL 4.5。
监控
请参阅 Hardware video acceleration#Verification。
设置亮度和伽马
请参阅 背光。
测试新的实验性Xe驱动
要尝试(实验性)新的Xe驱动,您需要:
- linux 6.8或更高版本
- Tiger Lake集成显卡及更新版本,或独立显卡。
- mesa.
使用以下命令记下您的PCI ID:
$ lspci -nnd ::03xx
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
有关更多信息,请参阅原始bug报告。
- 当
SwapbuffersWait为false时,此选项可能不起作用。 - 此选项可能会大大增加内存分配并降低性能。 [26]
- 此选项对对vsync时序非常敏感的应用程序(如Super Meat Boy)存在问题。
- 此选项与UXA加速方法不兼容,仅与SNA兼容。
- 对于Intel UHD 620或630,您需要添加
Option "TripleBuffer" "true"才能使TearFree正常工作。 - 可能需要通过添加
Option "DRI" "2"来禁用DRI3,否则任何全屏应用程序(如视频播放)都可能破坏TearFree。 [27]
使用modesetting驱动
TearFree支持已添加到modesetting驱动程序 [28][29]。由于非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使用Triple Buffering进行垂直同步;这可以实现全部性能并避免画面撕裂。要关闭垂直同步(例如用于基准测试),请在您的主目录中使用此.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 bug 88584。
损坏和冻结的图形
如果您在某些应用程序中遇到损坏和/或冻结的图形(例如,随机颜色填充应用程序窗口、极其不合理的模糊、应用程序在执行其他任务而不延迟的情况下未能更新其图形等),请尝试使用OpenGL而不是Vulkan运行该应用程序。这在某些配置的Intel Arc GPU上发生过。
Intel驱动下的X冻结/崩溃
通过将NoAccel选项添加到您的配置文件中,可以修复X崩溃、GPU挂起或X冻结的一些问题:
Option "NoAccel" "True"
或者,尝试仅通过DRI选项禁用3D加速:
Option "DRI" "False"
添加未检测到的分辨率
此问题已在Xrandr页面中介绍。
背光不可调
如果在从挂起恢复后,更改屏幕亮度的热键无效,请对照Backlight文章检查您的配置。
如果问题仍然存在,请尝试以下内核参数之一:
acpi_osi=Linux acpi_osi="!Windows 2012" acpi_osi=
另外,请确保您没有使用fastboot模式(i915.fastboot内核参数),因为它已知会破坏背光控制。
Chromium和Firefox中的损坏或无响应
如果您在Chromium和/或Firefox中遇到损坏、无响应、延迟或性能缓慢的问题,一些可能的解决方案是:
- 将AccelMethod设置为"uxa"
- 禁用VSYNC
- 启用TearFree选项
- 禁用“DRI”和加速方法(在Gen 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] *ERROR* CPU pipe A FIFO underrun 之类的错误消息。
OpenGL 2.1 与 i915 驱动程序
包含在 mesa-amber 包中的 Gen 3 GPU 的经典 mesa 驱动程序默认报告 OpenGL 2.0,因为硬件与 OpenGL 2.1 不完全兼容。[30] 可以通过设置 /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 控制器电源管理导致的一些联想笔记本电脑和某些宏碁笔记本电脑的挂起问题。此解决方法与 Intel 图形驱动程序严格无关,但它确实解决了相关问题。添加此内核参数会将固件默认的 *链接* *电源* *管理* 设置为最大性能,同时也能解决更改某些联想机器的显示亮度时发生的挂起问题,但会增加现代超极本 1-1.5W 的空闲功耗。有关更多信息,尤其是关于其他状态的信息,请参阅 Linux 内核邮件列表 和 Red Hat 文档。
i915.enable_dc=0 禁用 GPU 电源管理。这确实解决了某些 Intel 系统(尤其是 Goldmount 和 Kaby Lake Refresh 芯片)上的随机挂起问题。使用此参数会导致笔记本电脑/笔记本的功耗增加和电池续航时间缩短。如果这有帮助,您可以尝试更细粒度的 DC 限制,如 modinfo i915 | grep enable_dc 中所述。
intel_idle.max_cstate=1 限制了处理器的睡眠状态,它阻止处理器进入深度睡眠状态。这绝对不是理想的选择,并且会导致更高的功耗和更低的电池续航。但是,它确实解决了许多 Intel 系统随机挂起的问题。如果您的芯片是 Intel Baytrail 或 Kaby Lake Refresh,请使用此参数。Intel "Baytrail" 芯片由于存在硬件缺陷,如果没有此内核参数,已知会随机挂起,理论上已于 2019-04-26 修复。有关 max_cstate 参数的更多信息,请参阅内核文档,有关 cstates 的一般信息,请参阅GitHub 上的一篇博文。
如果您尝试添加 intel_idle.max_cstate=1 i915.enable_dc=0 ahci.mobile_lpm_policy=1 以希望修复频繁挂起问题,并且这解决了问题,那么您应该稍后逐一删除它们,看看哪一个实际上帮助您解决了问题。如果实际问题与 SATA 电源管理有关,则不建议在禁用 C-states 和显示电源管理的情况下运行,而 ahci.mobile_lpm_policy=1 才是真正解决问题的参数。
请参阅 Linux Reviews 了解更多详情。
更高的 C 状态会阻止从 S3 唤醒
如果您偶尔唤醒时屏幕变黑,但系统在日志中出现 CPU pipe A FIFO underrun 消息后恢复正常,并且限制 intel_idle.max_cstate=1 可以可靠地阻止这种情况,那么您可以 使用 挂起和休眠#睡眠钩子 和 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 钩子/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(Video BIOS Table),如 freedesktop 问题 5531 6401 所述,该表错误地描述了实际连接到 iGPU 的端口。在此案例中,所有记录的案例都涉及重复的 eDP 条目。
考虑到大多数供应商 不会 为带有正常运行的 Windows 操作系统的笔记本电脑发布 BIOS 更新,Linux 用户只能在内核层面解决此问题。防止这种情况的首选方法是 加载修改后的 VBT。其思想是从 VBT 中删除重复的 eDP 条目,包括修改后的 VBT 放入 initramfs,并通过内核参数传递给 i915 驱动程序。
需要通过分析以下命令的输出来识别重复的 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)
这是通过复制 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 |...#!...........|
然后可以通过将修改后的 VBT 复制到 /lib/firmware/i915/modified_vbt 并将文件包含在 initramfs 中来加载它。对于 mkinitcpio,可以使用 /etc/mkinitcpio.conf 中的 FILES 字段
FILES=(/lib/firmware/i195/modified_vbt)
重新生成 initramfs,并将新表作为内核参数传递给 i915:i915.vbt_firmware=i915/modified_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>
- 如果显示器重新排列或以其他方式更改了显示设置,则可能会将新布局添加到
monitors.xml文件中,而没有<rgbrange>full</rgbrange>标签。为确保在不同布局中一致地设置 RGB 范围,请考虑将该标签添加到逻辑显示器的每个重复条目中。 - 如果 GDM 登录屏幕未使用全 RGB 范围,请将用户的
monitors.xml复制到 gdm 的主目录。请参阅 GDM#设置默认显示器设置
修复 X11/Xorg 的颜色
# xrandr --output NAME_OF_YOUR_OUTPUT --set "Broadcast RGB" "Full"
运行某些程序时出现“总线错误” (例如,vainfo, falkon, mpv...)
在运行某些程序(例如 vainfo、falkon、mpv...)时出现此类错误
1234 bus error : vaapi
可能的原因是在 BIOS/UEFI 中禁用了 ReBar(Resizable BAR)。某些主板可能仅在 UEFI 模式激活时启用 ReBar,而不支持传统模式。
参见
- Linux 图形 (包含 106 种相关产品的列表)
- Intel® 处理器图形 (包含处理器系列、前代代号、发布日期和图形技术的表格)