Arch Linux LTS 内核更新后重新构建 i915:修复 Intel MacBook eDP 面板电源周期问题

在部分 Intel MacBook 上运行 Linux 时,内置 eDP 液晶面板可能存在一个较隐蔽的兼容性问题:系统关屏、休眠、重新点亮屏幕或重新初始化显示链路时,面板的断电—重新上电周期过短,可能导致白屏、绿屏、显示异常,甚至需要重新关机才能恢复。 在特定硬件上,通过延长 Intel i915 驱动中的 Panel Power Cycle Delay 可以显著改善这一问题。 本文记录一次 Arch Linux LTS 内核从旧版本升级到新版本后,重新为新内核构建自定义 i915 模块,并将 eDP 面板最低电源周期固定为 2000 ms 的完整维护过程。 重点不在于重新编译整个 Linux 内核,而是: 在保持 Arch 官方内核不变的情况下,仅重新编译带有补丁的 i915 模块,并让它优先于官方 i915 被加载。 一、为什么每次内核升级后都需要重新构建 i915 假设系统原本运行: 系统更新后安装: 虽然两者都属于 Linux 6.18 LTS,但对于内核模块而言,它们是两个不同的 Kernel Release。 自定义编译的: …

用 DPMS 主动测试 eDP 面板断电重启:从随机黑屏到锁定 2000 ms 电源时序

在 Linux 显示故障排查中,很多问题很难复现。 尤其是内置 eDP 屏幕偶发出现黑屏、白屏、绿屏时,如果每次都依赖“重新启动系统看看会不会发生”,不仅效率很低,而且同时改变了太多变量: 很难判断究竟是哪一层导致了故障。 一次实际排查中采用了一种非常有效的方法: 在已经完全正常运行的 KDE Plasma Wayland 桌面中,主动关闭内置显示器,等待指定时间,再重新打开。 通过改变这个等待时间,最终直接找到了 eDP 面板的临界恢复时间,并把问题锁定到了 Panel Power Cycle Timing。 这是一种非常值得记录的显示器测试方法。 一、问题为什么难以定位 故障表现为内置屏幕偶发进入: 奇怪的是,即使物理屏幕已经明显异常,Linux DRM/i915 日志仍可能显示: 也就是说: 但: 这是一个非常关键的矛盾。 它说明不能简单依赖: 来判断物理面板已经真正恢复。 二、传统重启测试的问题 最初可以通过反复重启观察: 期间是否出现故障。 但这种方法有一个严重缺点: 每次重启都同时改变大量状态。 例如一次异常可能涉及: 如果只知道: 实际上几乎无法判断真正的触发条件。 因此需要设计一个实验,把其他因素全部固定,只改变一个变量。 三、关键思路:在正常 Plasma 中重新关开屏幕 KDE Plasma 提供了: 可以直接控制显示输出的 DPMS 状态。 最基本的测试: …

将 Arch Linux 从普通内核迁移到 LTS,并重新维护自定义 i915

背景 系统原本运行: 并安装了针对: 编译的自定义 i915。 运行状态: 随后系统更新提供: 以及: 这意味着旧模块不能继续使用。 一、为什么考虑 LTS Arch 普通: 更新频率较高。 而这种机器每次内核 release 改变后,都需要重新编译: 因此长期维护成本较高。 于是改用: 作为唯一主力内核。 需要注意: LTS 并不意味着永远不用重新编译模块。 只要: 发生变化,自定义 i915 原则上仍应重新编译。 但 LTS 的主线变化更保守,更适合作为长期维护基础。 二、安装 LTS 完整升级时安装: 当时实际得到: 运行 release: 三、升级后不要立即重启 这是整个维护流程中最重要的规则: 内核升级完成后,在新自定义 i915 准备完成之前不要重启。 此时: 旧内核已经加载的自定义 i915 仍然正常工作。 这为编译新模块提供了一个安全窗口。 四、获取精确 Arch linux-lts 源码 …

在另一台 Arch 机器上复用 SDDM Wayland 配置:哪些配置能复制,哪些不能

背景 另一台 Arch KDE 机器也采用: 但 SDDM 仍是 X11。 由于第一台机器已经验证: 可以稳定运行,于是将桌面层配置迁移过去。 一、可以复用的内容 例如: 以及: 还有: 等 Wayland Greeter 组件。 二、不能直接复制缩放比例 第一台机器可能使用: 第二台机器则可能是: 因此应该依据: 查看当前机器的实际配置。 不能简单把整个: 从另一台设备复制过来。 三、旧 Intel DDX 同样可以审计 第二台机器也曾安装: 但 Xorg 日志实际加载: 因此它同样属于: 的旧组件。 四、最重要的区别:不要复制硬件 workaround 第一台机器使用了: 这是针对具体内置面板行为得出的硬件 workaround。 第二台机器不存在相同故障。 因此绝不能因为: 就直接复制这个内核补丁。 可以复用的是: 不能复用的是: 这是维护多台 Linux 设备时非常重要的边界。

KDE Plasma:将 SDDM 从 X11 迁移到 Wayland,并统一 HiDPI

背景 显示时序问题解决以后,系统重新测试: 这一次启动稳定。 由此证明之前 SDDM Wayland 的高故障率其实是: 而不是 Wayland 本身存在根本故障。 一、原始 SDDM 状态 系统默认: 旧 HiDPI 配置: 并存在: 二、Wayland 配置 建立: 内容: 三、为什么移除 QT_FONT_DPI 在 X11 环境中常见: 但 Wayland 下缩放由 compositor/KWin 自己处理。 如果同时使用: 可能产生“双重缩放”。 因此 Wayland SDDM 中只保留: 四、统一 SDDM 和 Plasma 缩放 Plasma: 随后将 SDDM 对当前显示器的 KWin output 配置也调整为: …

如何验证一个内核显示时序补丁:DPMS、连续重启与“假失败”

背景 完成: 后,不能仅凭“成功启动一次”就判断问题解决。 需要验证: 一、首先检查运行态参数 读取: 必须看到: 如果仍然是: 说明当前运行的并不是修改后的 i915。 二、验证实际加载模块 应指向: 而不是: 同时: 应与: 一致。 三、启动时出现约 2 秒黑屏反而是预期结果 补丁生效后,启动过程中观察到两个明显的黑屏阶段: 第一次对应: 第二次对应: 这与补丁的: 完全一致。 因此这里的短暂黑屏不是故障,而是面板确实在等待完整 power-cycle interval。 四、DPMS 压力测试 补丁前: 而: 这一实验其实已经给 2000 ms 修改提供了非常强的直接证据。 因为它绕开了: 单独验证了: 这一变量。 五、连续自动重启测试 后来还设计了一个 systemd 测试服务,用于连续重启。 脚本每次: 连续成功记录: 六、第七次出现“FAIL”,但并不是屏幕故障 某次脚本输出: 服务随后自动停止。 但进入系统后人工立即读取: 同时自定义模块路径也正确。 因此这是: …

单独编译 Arch Linux i915:为 eDP Panel Power Cycle 增加 2000 ms 最低延迟

背景 已经通过独立实验确认: 对于目标机器的内置 eDP 面板过短。 实验结果: 因此决定修改 Linux i915 源码。 一、源码位置 相关实现位于: 关键赋值: 修改为: 实际也可以写成单行: 二、为什么使用 max() 这个修改不是: 而是: 逻辑相当于: 这样比直接: 更合理。 三、为什么不修改其他 PPS 参数 原参数例如: 实验只证明: 与故障高度相关。 没有证据表明: 存在问题。 因此遵循最小修改原则,只改变: 四、内核模块必须精确匹配当前内核 例如某次使用: 自定义模块的: 也必须是: 不能拿旧模块直接加载到: 甚至不能假设同一个主版本的小更新也兼容。 五、Arch localversion 很重要 Arch 内核源码不仅包含: 还会使用: 例如: 中的: 必须正确生成。 否则编译出的模块可能出现: 六、使用官方 Module.symvers 单独编译外部或局部模块时,一个关键文件是: …

Arch Linux 下内置屏幕随机黑屏、白屏、绿屏:一次 eDP 电源时序故障的完整定位

问题背景 一台 Intel 平台笔记本安装 Arch Linux + KDE Plasma Wayland 后,内置屏幕偶发出现非常异常的显示状态: 这些异常主要发生在: 机器同时安装其他操作系统,可以方便进行交叉验证。 一个很重要的现象是: 其他操作系统长期使用基本正常,而 Linux 图形环境下更容易触发故障。 因此最初判断倾向于: 而不是简单的 LCD 面板物理损坏。 一、安全测试原则 在多次实验后发现,异常显示状态不宜长期保持。 尤其是绿屏状态,应立即关机。 黑屏和白屏虽然没有绿屏那么明显,但也不建议为了观察日志而让屏幕长时间保持异常,因为曾观察到: 因此后续测试采用原则: 一旦发生持续黑屏、白屏或绿屏,应尽快结束测试;绿屏尤其应立即断电关机。 二、首先排除基本硬件输出能力 Arch Live 环境中的纯命令行 TTY 多次启动均正常。 内屏在 TTY 状态下能够稳定运行,包括: 这非常重要。 因为故障状态下,DRM 软件层看到的参数往往也完全相同。 因此以下假设逐渐被削弱: 三、尝试过但没有解决问题的 i915 参数 排查过程中曾测试多项常见 Intel 显示参数。 PSR 测试: 早期曾看起来有所改善,但继续测试后仍然可以出现异常。 因此: …

Arch Linux KDE 笔记本电源模式配置:启用 Power Profiles 并设置插电与电池策略

在 Arch Linux + KDE Plasma 的笔记本环境中,任务栏的 Power & Battery 小组件可以显示电池状态,并提供 Power Profile(电源模式)切换。 不过在一套新安装或重新配置的系统中,可能会看到: 同时 KDE 还会提示安装 power-profiles-daemon。 这并不代表电池或硬件存在故障,而通常只是系统尚未安装负责提供标准电源模式接口的后台服务。 本文记录完整的检查、安装、验证和 KDE 刷新过程,并给出一套适合日常使用的电源策略。 一、问题表现 打开 KDE 任务栏中的 Power & Battery 后,电池本身可以正常识别,例如: 但是顶部显示: KDE 同时给出类似提示: 这种情况下,电池的充放电、睡眠等基本功能通常仍然正常,只是无法通过 KDE 切换: 三个标准电源模式。 二、首先检查现有电源管理软件 安装新的电源管理服务之前,先检查系统中是否已经存在 power-profiles-daemon 或 TLP: 如果没有任何输出,说明两者都没有安装。 这一点比较重要,因为多个电源管理框架同时运行并没有必要,还可能产生策略冲突。 如果系统已经使用 TLP,则不应在没有明确规划的情况下直接再叠加另一套电源管理方案。 三、安装 power-profiles-daemon 对于 KDE …

从 X11 切换到 Wayland 后,远程代理无法打开可见浏览器的排查与修复

在一套多主机自动化环境中,AI 代理需要远程控制一台 Linux 桌面设备上的专用浏览器。这个浏览器使用独立用户数据目录启动,同时开启本机回环地址上的远程调试接口,再通过 SSH 隧道供另一台控制主机访问。 这套流程过去一直可以正常工作,但桌面环境从 X11 切换到 Wayland 后,代理突然无法打开可见的浏览器窗口,并判断当前系统“没有图形显示环境”。 经过手动测试和流程修正,最终确认问题并不在浏览器,也不在 Wayland,而在于代理获取图形会话环境的方法仍然停留在旧的 X11 逻辑。 一、原有工作方式 整个浏览器控制流程大致分为四部分: 正常情况下,代理不仅可以读取网页内容,还可以操作可见浏览器窗口,例如: 这种方式与普通无头浏览不同。操作过程会真实显示在桌面上,坐在屏幕前的人可以同步观看。 二、出现的问题 桌面环境切换到 Wayland 后,代理尝试启动浏览器时发现: 随后代理直接得出结论: 表面上看,这个判断似乎合理,但实际上检查的是代理当前所在的 SSH shell,而不是桌面主机中正在运行的真实图形会话。 SSH 登录产生的非图形 shell 没有继承桌面会话变量,是完全正常的现象。即使桌面上正在运行完整的 KDE Wayland 会话,SSH 终端中的相关变量仍然可能为空。 因此,不能根据 SSH shell 中的环境变量判断远程设备是否存在图形会话。 三、手动测试 为了区分浏览器故障和代理逻辑故障,首先在桌面主机本地终端中进行了测试。 本地图形终端可以正常读取到以下类型的环境信息: 随后使用以下参数启动专用浏览器: 测试进行了两次,两次都顺利打开了可见浏览器窗口,并正常进入目标网页。 这说明: 四、真正的原因 旧流程主要针对 X11 环境设计,通常从 X11 …