Ubuntu 屏幕亮度调节完整解决方案(含 X11 会话切换 Ubuntu 屏幕亮度调节完整解决方案含 X11 会话切换适用Ubuntu 20.04 / 22.04 / 24.04外接显示器或笔记本内置屏X11 与 Wayland 环境目标把太亮、调不动、重启复原、Wayland 下失效等问题一次性解决答案 x11 和 xrandr --output HDMI-0 --brightness 0.3一、先搞懂为什么会调不动——显示子系统基础在动手之前必须先理解一件事Linux 下调亮度有硬件和软件两条完全不同的路而能不能用取决于你跑在 X11 还是 Wayland 上。这也是绝大多数人卡住的根本原因。1.1 X11 与 Wayland 的区别X11老架构应用程序直接通过 X 服务器控制显卡第三方工具可以随意修改屏幕的 gamma / 亮度xrandr --brightness就是走的这条路。Wayland新架构出于安全和稳定性的考虑显示合成器GNOME 的 Mutter独占了对屏幕的最终控制权不允许普通程序改 gamma。所以xrandr --brightness、redshift这类软件变暗命令在 Wayland 下要么报错要么退出码 0 但屏幕毫无变化。版本默认情况Ubuntu 22.04 默认是Wayland 不是 X11Ubuntu会话即 Xorg。Ubuntu 23.04 起默认改为 Wayland24.04 也是 Wayland 优先。也就是说你用的如果是较新版本却没特意切过很可能正跑在 Wayland 上软件调暗自然失效。1.2 硬件亮度 vs 软件亮度硬件亮度直接命令显示器降背光。内置屏走 ACPI/DRM 背光/sys/class/backlight外接屏走DDC/CI协议ddcutil。这是物理变暗最省电、观感最自然。软件亮度在显卡输出层面乘一个系数xrandr --brightness/ gamma。它叠加在硬件亮度之上所以能比硬件最暗更暗但会轻微损失画质、增加一点耗电。理解这两点后下面的方案就不会再让你迷路了。二、第一步确认并切换到 X11 会话如果你的目标包含用xrandr软件压暗必须保证处于 X11。先确认echo$XDG_SESSION_TYPE显示x11→ 已经在 X11可跳过本章。显示wayland→ 继续下面的切换操作。2.1 方法一登录界面手动切换推荐最直观注销当前用户或重启电脑回到 GDM 登录界面。点击你的用户名先不要输入密码。在密码框右下角会出现一个齿轮图标 ⚙有的版本在左下角点击它。在弹出的列表里选择“Ubuntu on Xorg”Ubuntu 22.04 里也可能就叫 “Ubuntu”24.04 明确叫 “Ubuntu on Xorg”。输入密码登录。重新验证echo $XDG_SESSION_TYPE应显示x11。注意切到 X11 后之前已经打开的程序如 CodeBuddy、浏览器仍然跑在旧会话环境下需要完全退出再重开才能继承新的 X11 环境。2.2 方法二强制默认 X11找不到齿轮时用部分精简版登录界面不显示齿轮可以直接改 GDM 配置强制禁用 Waylandsudosed-is/#WaylandEnablefalse/WaylandEnablefalse//etc/gdm3/custom.confsudosystemctl restart gdm3执行后登录管理器会重启屏幕会闪一下已开程序会被关闭重新登录即为 X11。2.3 方法三临时验证不改系统如果你只是想临时试一下 X11 下的效果也可以在登录界面选 Xorg 会话登录一个测试用户确认能调暗后再决定是否永久切换。三、安装亮度调节工具Ubuntu 仓库需先sudo add-apt-repository universe并sudo apt update提供以下工具按需安装工具类型适合场景安装brightnessctl命令行笔记本内置屏背光sudo apt install brightnessctlddcutil命令行外接显示器DDC/CIsudo apt install ddcutilbrightness-controllerGUI 滑块内置屏图形调节sudo apt install brightness-controllerredshift/redshift-gtkGUI护眼色温护眼X11 有效sudo apt install redshift redshift-gtkxrandr命令行软件亮度叠加X11自带无需装重要提醒xrandr和ddcutil才是本文真正解决问题的核心GUI 工具在 Wayland 下大多受限建议优先掌握命令行。四、三层调节方案详解4.1 第一层硬件亮度外接屏用 ddcutil外接显示器HDMI / DP / DVI的背光不受系统 ACPI 管理必须走 DDC/CI。检测显示器sudoddcutil detect会列出 I2C 总线号和显示器型号。调节亮度VCP 码 10 亮度16 对比度sudoddcutil setvcp1050# 亮度设为 50范围 0~100sudoddcutil setvcp1640# 对比度压低整体更柔和sudoddcutil getvcp10# 验证会显示 current / max value典型问题若detect找不到显示器可能是视频线不支持 DDC部分 VGA/转接头不行或需要在 BIOS/显示器菜单开启 “DDC/CI”。若设到很低仍觉得刺眼说明该显示器硬件最低亮度偏高需叠加第二层。4.2 第二层软件亮度xrandrX11 专属这一层能突破硬件下限是还是太亮时的最终手段。① 找对你的输出名最关键的一步xrandr-q|grep-Econnected会列出真实输出名例如HDMI-0、DP-1、eDP-1。务必用这里看到的名字不要信xrandr --listmonitors里可能显示的HDMI-1之类的别名。② 压暗xrandr--outputHDMI-0--brightness0.3# 0.1 最暗 ~ 1.0 最亮把它和硬件亮度相乘例如ddcutil 50% × xrandr 0.3 ≈ 实际 15% 亮度足以应对绝大多数刺眼场景。③ 验证是否生效屏幕应立即变暗若退出码 0 但毫无变化99% 是你仍在 Wayland回到第二章切换。4.3 第三层护眼不改变亮度数值如果太亮其实是偏蓝刺眼调亮度治标不治本应该调色温GNOME 自带 Night Light设置 → 显示器 → Night Light开启并拉暖。Wayland/X11 都生效最推荐。显示器 OSD开低蓝光 / 阅读 / 护眼模式观感比单纯降亮度舒服得多。RedshiftX11redshift-gtk -l 纬度:经度自动随日出日落调色温。Wayland 下不可用。五、实战踩坑全记录避坑必读以下是真实调试中踩过的坑对照可省去大量时间坑 1brightnessctl调成了键盘灯执行sudo brightnessctl set 10%-后提示Updated device input6::numlock说明它改的是 numlock 指示灯leds类不是屏幕。原因你的屏是外接 HDMI背光不在系统里要用ddcutil。解法指定 backlight 设备brightnessctl -d intel_backlight set 50%或直接改用 ddcutil。坑 2输出名HDMI-1不存在xrandr --output HDMI-1 --brightness 0.3报output HDMI-1 not found。原因--listmonitors显示的HDMI-1是监视器别名真实 RandR 输出名是HDMI-0以xrandr -q为准。改成HDMI-0即可。坑 3Wayland 下 xrandr 静默失效xrandr --brightness 0.3退出码 0但屏幕纹丝不动。这是 Wayland 合成器忽略 RandR 亮度的典型表现不是命令写错。必须切到 X11第二章才能生效。坑 4在 CodeBuddy 内置终端里操作无效在 IDE 集成终端里跑xrandr可能连不到真实 X 显示沙箱/远程环境问题表现为Need crtc to set gamma on或not found。解法按CtrlAltT打开系统原生终端再操作。坑 5重启后输入法/亮度复原亮度是临时命令重启即丢若 fcitx5 没设自启也会消失。见第六章持久化。六、持久化与便捷化6.1 开机自动调暗亮度把软件亮度写进~/.xprofile没有就新建每次登录自动执行echoxrandr --output HDMI-0 --brightness 0.3~/.xprofile硬件亮度ddcutil因需 sudo 且涉及 I2C 权限建议保留手动命令或写带 NOPASSWD 的脚本。6.2 设别名少打字echoalias dimxrandr --output HDMI-0 --brightness~/.bashrcechoalias brightsudo ddcutil setvcp 10~/.bashrcsource~/.bashrc# 之后dim 0.3 bright 506.3 输入法fcitx5自启若同时配了中文输入法建用户级自启项~/.config/autostart/fcitx5.desktop并设X-GNOME-AutoRestarttrue避免重启后输入法消失。七、故障排查速查表现象优先检查命令完全调不动会话类型echo $XDG_SESSION_TYPE非 x11 就切改了没反应输出名xrandr -q | grep connected调成键盘灯设备类brightnessctl -l看有无 backlight外接屏无效DDC 支持sudo ddcutil detectIDE 里不行终端环境改用CtrlAltT原生终端重启复原持久化写~/.xprofile/ 自启项八、一句话总结外接 HDMI 屏最稳组合 ddcutil setvcp 10调硬件亮度 xrandr --output HDMI-0 --brightness 0.3软件压暗必须 X11、原生终端、用真实输出名护眼再叠加 Night Light 或显示器低蓝光模式。把这两条写进启动脚本重启也不怕。