无法在联想笔记本电脑上调节亮度。

亮度调节键 <> + <<⇑>> / <<⇓>> 没有作用(尽管它们被环境识别),我也无法使用 GUI 工具改变亮度。这似乎是一个在 Linux 自身中出现的问题,而不是桌面环境的问题。
我可以在 Windows 操作系统中改变亮度,所以这不是某种硬件故障。
详情:           Lenovo B570(型号:20093)           集成的 Intel HD 显卡           Kubuntu 11.04(Linux 2.6.38-10-generic、KDE 4.7.0),全部都是最新的           没有专有显卡驱动程序(只有 Wi-Fi 一个)
我已经尝试过的:
编辑 `/etc/default/grub`,将 `GRUB_CMDLINE_LINUX_DEFAULT` 修改为 `acpi_osi=Linux`、`acpi_backlight=vendor`、`nomodeset`。然后执行 `update-grub` 命令。
编辑 `/etc/X11/xorg.conf`(即使使用 `sudo dpkg-reconfigure xserver-xorg` 命令也没有该文件)。
编辑 `/proc/acpi/video/VGA/LCD/brightness`(没有这个文件)。
执行命令 `sudo setpci -s 00:02.0 F4.B=XX`(没有效果)。
执行命令 `xbacklight -set XX`(显示 "No outputs have backlight property")。
如何解决这个问题?

1这个问题在Ubuntu 11.10中已经修复了! - Oleh Prypin
5这在Ubuntu 12.04中似乎又出现了故障。 - Mittenchops
还有Ubuntu 16.04。 - Diego-MX
1可能是如何通过命令行(或脚本)调整LCD亮度?的重复问题。 - Pablo Bianchi
在我的联想Legion 5上,我通过将BIOS更改为可切换图形而不是独立图形来解决了这个问题,这解决了亮度控制和从暂停中恢复的图形问题。 - Wadih M.
联想Thinkpad Yoga也有同样的问题! - Soerendip
Ubuntu 22.04 LTS - Soerendip
16个回答

如果图形界面工具失败了,尝试使用终端terminal
  1. 打开终端

  2. 运行:ls /sys/class/backlight/*/brightness。示例输出如下:

    /sys/class/backlight/acpi_video0/brightness
    
  3. 如果找不到任何内容,则表示内核不支持亮度控制(缺少驱动程序?)。否则,您可以使用以下命令(相应地替换acpi_video0):

    • 获取当前亮度级别:

      cat /sys/class/backlight/acpi_video0/brightness
      
    • 获取最大亮度级别:

      cat /sys/class/backlight/acpi_video0/max_brightness
      

    这些命令返回的亮度级别范围从零到max_brightness(参见上文)。

  4. 要更改亮度级别,您需要向brightness文件写入一个数字。这不能通过像gedit这样的编辑器完成。假设您想将亮度更改为5,您需要运行:

    echo 5 | sudo tee /sys/class/backlight/acpi_video0/brightness
    

    或者,如果您只想将亮度级别设置为最高可用值:

    sudo tee /sys/class/backlight/acpi_video0/brightness < /sys/class/backlight/acpi_video0/max_brightness
    

5肯定有一些驱动程序的问题!如果这个命令行的东西可以工作,那GUI也会工作。但是当然它不起作用 - _ - Oleh Prypin
@Lekensteyn:[没有起作用,使用的是11.04 Ubuntu] - 我尝试了很多次,但实时显示并没有起作用。您是指更改后会实时显示还是需要重新启动后才能看到效果? - user25165
2变化是实时的。 - Lekensteyn
1即使作为超级用户,我也无法使用tee更改亮度级别。这可能是什么原因呢? - user358167
@Galen 如果你在写入文件时没有犯错误,那么可能是一个与型号相关的问题。尝试将其报告为错误或搜索你的笔记本型号和“Linux背光”。 - Lekensteyn
同样适用于Ubuntu 17。谢谢。 - saurabheights
我将这个命令添加为一个快速启动按钮到我的T420的xfce面板上:sudo sh -c "echo brightness 0-$(cat /sys/class/backlight/intel_backlight/max_brightness) && echo $(read line && echo $line) > /sys/class/backlight/intel_backlight/brightness" - Pashka
使用终端处理这种事情真是糟糕。 - Soerendip

试试this。对我的Ubuntu 14、Lenovo B570和Intel显卡有效。

打开终端并创建以下配置文件(如果不存在):

sudo touch /usr/share/X11/xorg.conf.d/20-intel.conf

现在我们需要编辑这个文件。您可以使用任何编辑器,无论是终端还是图形界面。

sudo gedit /usr/share/X11/xorg.conf.d/20-intel.conf

在这个文件中添加以下行:

Section "Device"
        Identifier  "card0"
        Driver      "intel"
        Option      "Backlight"  "intel_backlight"
        BusID       "PCI:0:2:0"

EndSection

保存它。退出并重新登录。

谢谢 - 这个方法在三星 N220 Netbook 上也适用,它配有集成的英特尔显卡(GMA 3150),运行着 Xubuntu 15.04 "vivid"。 - Andrew
1不行,那个搞垮了我的X。我又不得不在恢复控制台中删除文件。 - towi
这在联想P500上没有起作用。 - user358167
2这个方法在我的Thinkpad T460上使用Ubuntu 17.04有效,我只需要退出然后重新登录即可。 - Elliot Gorokhovsky
要检查PCI总线ID,请运行lspci -nn命令。话虽如此,在Thinkpad E490上对我来说并没有起作用。 - Enrico
我不确定这个答案是否值得获得这些分数——它只是一个从外部论坛复制粘贴到配置文件中的答案,没有解释为什么这样做可能有效;Enrico提供了如何找到总线ID的方法,但我的格式是不同的,比如00:02.0,我假设转换是有效的,但我怎么知道这是card0呢?对我来说它并没有起作用,而且答案也没有提供任何解释,这在调试时可能会有帮助。 - Vix
不适用于联想Thinkpad Yoga。 - Soerendip

安装linux-kamal-mjgbacklight - 一个用于Linux内核的补丁。 检查它是否适用于您:
lsmod | grep ^i915
应该会出现类似i915 331519 3的内容。 如果没有输出,这将不起作用。 sudo add-apt-repository ppa:kamalmostafa/linux-kamal-mjgbacklight 安装更新(sudo apt-get update; sudo apt-get upgrade) 重新启动。 现在您可以使用终端调整亮度,如suggested所建议的那样。如果您可以使用终端+sudo来更改亮度,这就是答案的结束。如果您使用的是GNOME桌面环境,亮度可能已经完全正常工作了。 下载我的brightness changer script,允许其执行,并将其放置在/usr/local/bin/目录下:
wget -O brightness http://ideone.com/plain/yPlo5
chmod +x brightness
sudo mv brightness /usr/local/bin 我们需要允许编辑亮度文件,以便无需到处使用sudo。此外,我们希望在系统启动时恢复亮度设置(默认情况下未保存,遗憾的是)。 提到的brightness脚本可以处理所有这些(使用restore参数),只需将其添加到自动运行即可。 为此,我们将编辑/etc/rc.local文件(sudo nano /etc/rc.local或任何其他编辑器)。在exit 0行之前添加以下行:
/usr/local/bin/brightness restore 最好现在重新启动。 这样brightness脚本就可以工作了。您随时可以进入终端并输入以下命令: brightness - 获取当前亮度设置 brightness value - 将亮度设置为value brightness inc stepbrightness dec step - 将亮度增加或减少step(如果未指定,则使用配置文件中的默认值,通常为最大亮度的10%) 现在您可能希望将亮度更改映射到热键上。 将XF86BrightnessUp设置为brightness incXF86BrightnessDown设置为brightness dec 如果您想调整某些内容,请确保查看/etc/bx_brightness.conf文件。您可以使用brightness inc/dec更改亮度的步长。
感谢Toz这个帖子中提供的无价帮助。

1在Ubuntu 11.10中已不再需要这个了。 - Oleh Prypin

我有一台联想IdeaPad Z400。
我尝试了上面列出的所有提示,但都没有成功。
所以我找到了一个不同的方法,非常有效:
将以下行放入/etc/default/grub文件中。
GRUB_CMDLINE_LINUX="acpi_backlight=vendor acpi_osi=Linux resume=/dev/sdYY"

YY = 交换区,使用swapon -s命令查看你的交换设备。
以root身份执行update-grub命令。
重启后问题得到解决。

它对我有用,但发生了一些奇怪的事情。当亮度设置为最大时,屏幕没有亮度(完全黑暗),有什么建议吗?谢谢。 - Adriano Rivolli

这样做不会使您的Fn键起作用,但您可以将任何其他键分配为调整亮度的键。

我尝试了几种解决方案,但直到我找到这个小指示程序http://codevanrohde.nl/wordpress/?p=128之前,没有任何方法适用于我。使用它,您可以设置热键来控制亮度,使用鼠标滚轮或从指示器的下拉列表中进行选择。我已经将'Fn'替换为'Win+Alt',对我的手来说非常相似,现在我还可以在使用外部键盘时使用它!

要添加PPA并安装:

sudo add-apt-repository ppa:indicator-brightness/ppa
sudo apt-get update && sudo apt-get install indicator-brightness

热键应分配给:
/opt/extras.ubuntu.com/indicator-brightness/indicator-brightness-adjust --up

并且

/opt/extras.ubuntu.com/indicator-brightness/indicator-brightness-adjust --down

脚注:开箱即用,亮度指示器在我的系统中识别到7个亮度级别。通过在“/etc/default/grub”文件中的“GRUB_CMDLINE_LINUX_DEFAULT”行中添加“acpi_backlight=vendor”,这个数字增加到了16!

我认为我找到了一种简单且对现有事物影响最小的方法来调整使用udev规则的intel_backlight。
我注意到在我的Lenovo G360笔记本上运行3.2内核时,当我按下Fn+Up/Down时,“backlight”子系统会发生“change”动作。因此,我编写了以下规则:/etc/udev/rules.d/99-writeintelbacklight.rules
ACTION=="change", SUBSYSTEM=="backlight", RUN+="/usr/sbin/writeintelbacklight.sh"

将shell脚本/usr/sbin/writeintelbacklight.sh的内容修改为:
#!/bin/bash

intelmaxbrightness=`cat /sys/class/backlight/intel_backlight/max_brightness`
acpimaxbrightness=`cat /sys/class/backlight/acpi_video0/max_brightness`
scale=`expr $intelmaxbrightness / $acpimaxbrightness`
acpibrightness=`cat /sys/class/backlight/acpi_video0/brightness`
newintelbrightness=`expr $acpibrightness \* $scale`
curintelbrightness=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ "$newintelbrightness" -ne "$curintelbrightness" ]
then
  echo $newintelbrightness > /sys/class/backlight/intel_backlight/brightness
fi
exit 0

当然,你需要执行 sudo chmod +x /usr/sbin/writeintelbacklight.sh

1在grub引导内核参数中添加"acpi_backlight=vendor acpi_osi=linux video.brightness_switch_enabled=1", "Fn + Up/Down"键可以在我的G360上改变亮度。不需要像上面那样编写Udev规则。 - littlebat
现在看来,只需添加一个内核参数"acpi_backlight=vendor"也可以在我的G360上起作用。但是,无论是哪种方法添加内核参数,都会偶尔停止工作。关于我的情况的详细信息,请参见: Bug 44809 - [Arrandale backlight] Brightness via RANDR has no effect on Sony VAIO VPCYA1V9E: https://bugs.freedesktop.org/show_bug.cgi?id=44809 - littlebat

我有一台装有Nvidia显卡和二进制驱动程序的Thinkpad T450s笔记本电脑,运行的是Ubuntu 14.04操作系统。为了使背光正常工作,我不得不编辑/etc/X11/xorg.conf文件,在intel设备定义中添加了以下行(xorg.conf文件在安装二进制驱动程序时创建):
Option      "Backlight"  "intel_backlight"

现在完整的部分如下:

Section "Device"
    Identifier "intel"
    Driver "intel"
    BusID "PCI:0@0:2:0"
    Option "Backlight" "intel_backlight"
    Option "AccelMethod" "SNA"
EndSection

这对于KDE用户来说不起作用,因为它是在https://launchpad.net/~kamalmostafa/+archive/linux-kamal-mjgbacklight中编写的。
对于KDE桌面用户的注意事项: KDE桌面用户:此PPA可能无法修复您的背光控制热键:此修复需要一个内核模块来提供新的/sys/class/backlight/intel_backlight接口(无论您使用哪个桌面环境都可以工作),还需要一个桌面模块来访问该接口。对于Gnome,此PPA中更新的gnome-power-manager提供了该功能,但是对于KDE尚未开发相应的功能。
但是,您可以尝试在here找到的解决方法。
那就是在终端中输入echo XXX | sudo tee /sys/class/backlight/intel_backlight/brightness,其中XXX是一个整数值。
在我的情况下,XXX的值可以从0到4882,但要小心:如果你输入0,屏幕会完全变黑,你将看不到任何东西。

这是一个你可以做的补丁。
用名为.modificarBrillo.sh的脚本创建它(在我的情况下,我将其创建在我的主文件夹中:~/.modificarBrillo.sh)。
#!/bin/bash
if [ -z "$1" ]; then
    echo "ERROR: Tiene que introducir un parámetro: \"a\" para aumentar o \"d\" para disminuir"
    exit
else
    if [ "$1" != "a" ] && [ "$1" != "d" ]; then
        echo "ERROR: el parámetro de entrada sólo puede ser o \"a\" para aumentar el brillo o \"d\" para disminuirlo"
        exit
    fi
fi
MAX_BRILLO=`cat /sys/class/backlight/intel_backlight/max_brightness`
MIN_BRILLO_ABSOLUTO="0"
MIN_BRILLO="100" #el brillo mínimo puede ser 0 pero eso deja la pantalla completamente a oscuras
INTERVALO=`expr $MAX_BRILLO - $MIN_BRILLO_ABSOLUTO`
INTERVALO=`expr $INTERVALO / 10`
brillo=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ "$1" = "a" ]; then
    let "brillo = brillo + INTERVALO"
    if [ "$brillo" -gt "$MAX_BRILLO" ]; then
    let "brillo = MAX_BRILLO"
    fi
else
    let "brillo = brillo - INTERVALO"
        if [ "$brillo" -lt "$MIN_BRILLO" ]; then
            let "brillo = MIN_BRILLO"
        fi
fi
echo "$brillo" | tee /sys/class/backlight/intel_backlight/brightness

然而,由于之前的脚本需要执行权限,而/sys/class/backlight/intel_backlight/brightness只能由root用户编辑,因此您必须在终端中执行以下命令:
chmod a+x ~/.modificarBrillo.sh
sudo chmod a+w /sys/class/backlight/intel_backlight/brightness`

每次启动都必须执行最后一个命令,因为亮度文件的权限会在启动时重新设置。要执行此操作,请使用sudo vim /etc/rc.local命令,在"exit 0"行之前添加sudo chmod a+w /sys/class/backlight/intel_backlight/brightness命令。
最后,您应该安装xbindkeys来将功能键分配给执行脚本。
在我的情况下,我将这些行添加到配置文件~/.xbindkeysrc中。
#Aumentar brillo
"/home/alvaro/.modificarBrillo.sh a"
    m:0x0 + c:233
    XF86MonBrightnessUp 

#Disminuir brillo
"/home/alvaro/.modificarBrillo.sh d"
   XF86MonBrightnessDown

但是你也可以安装程序xbindkeys-config来以图形方式进行处理。

遇到了与联想IP G50-70相同的问题。事实上,似乎没有任何功能键起作用。最终,在Bios中我找到了一个“热键”启用/禁用功能。矛盾的是,它实际上是“已启用”的,但实际上它启用了功能键的单键操作。实际上,如果你使用传统的“Fn + 功能键X”的技巧,它们不起作用。
如果在Bios中“禁用”热键功能,那么功能键将按照预期工作(Fn + 功能键x)。- 在这样做之后,所有功能键都正常工作了。进步可真是美好啊!