我可以控制第二个显示器的亮度吗?

我有一台ThinkPad(x301),通过DisplayPort到HDMI线缆连接了一个外接显示器。我可以使用笔记本电脑上的按键来控制笔记本电脑屏幕的亮度,但是我不知道如何控制外接显示器的亮度。
$ ls /sys/class/backlight/*/brightness
/sys/class/backlight/acpi_video0/brightness
/sys/class/backlight/intel_backlight/brightness
$ cat /sys/class/backlight/acpi_video0/brightness
11
$ cat /sys/class/backlight/acpi_video0/max_brightness
15
$ cat /sys/class/backlight/intel_backlight/brightness
501804
$ cat /sys/class/backlight/intel_backlight/max_brightness
2414340

我可以写入上述数值,同时intel_backlight和acpi_video0都可以改变笔记本电脑显示器的亮度。
上述意味着除了通过OSD外,没有其他方法可以改变外接显示器的亮度吗?

请在superuser上查看这个问题:http://superuser.com/questions/256084/how-to-change-brightness-on-linux-desktop-through-the-command-line - Gerhard Burger
还有一个非常不错的软件解决方案:http://askubuntu.com/a/48952/41499 - Gerhard Burger
6个回答

你可以通过命令行来完成这个操作(并且可以通过cron每天晚上自动执行),使用xrandr来改变LCD亮度,具体方法请参考如何通过命令行(或脚本)来改变LCD亮度?
例如:
xrandr --output HDMI1 --brightness 0.5

这不会改变背光或影响功耗,它只是在软件中调整了伽马值。我听说Brightness Controller在其图形界面下使用了xrandr
如果没有正确的监视器,使用xrandr --listactivemonitors可能会得到xrandr: Need crtc to set gamma on.ddccontrol在Lucid 10.04中存在并且似乎工作良好,但由于缺乏兴趣而被Debian放弃,并且自那以后没有被任何人接手。 更新 ddccontrol已经回归xenial。请参见

有没有办法将每个显示器的亮度水平绑定在一起?这样,如果我更改主屏幕的亮度水平,辅助屏幕也会相应调整。 - Breedly
@Breedly 我不知道。点击“提问”来提出一个新问题。 - nealmcb
2xrandr 对我来说似乎只能持续大约2秒钟,然后又恢复正常了。不过,ddccontrol 是更好的选择,它实际上可以控制背光,并且运行良好。现在它已经回到了 Ubuntu 中,适用于 Xenial 和 Yakkety 版本。 - Gringo Suave
谢谢,你刚刚救了我的眼睛。 - Catto

从以下PPA安装Brightness Controller。
sudo add-apt-repository ppa:apandada1/brightness-controller
sudo apt update
sudo apt install brightness-controller

Screenshot 1

现在你可以使用滑块来调节亮度。

这不在正常的存储库中,但至少在12.04的软件中心中可以找到。它不会改变背光亮度,但确实会改变整体亮度,尽管我不确定如何做到的。它说它使用专有许可证,但也说它是“gpl-3”。非常奇怪。我想要一个命令行界面,可以编写脚本逐渐降低晚上的亮度。但我仍然很高兴拥有它 - 谢谢! - nealmcb
1它是用Python编写的,并使用xrandr。我们不知道如何为Ubuntu打包它,因此我们以专有许可证提交了它(以便审阅者可以打包它)。源代码可在Github上找到。https://github.com/lordamit/Brightness/tree/master - Archisman Panigrahi
1你可以通过命令行使用xrandr来控制亮度,就像这个链接中所示:http://askubuntu.com/a/457281/124466。这就是Brightness Controller在后台所做的事情。 - Archisman Panigrahi

这里是亮度控制器的最新信息。有两个版本可用。第一个版本,也被称为简化版,支持最多4个显示器,并保留了经典滑块。第二个版本允许更专业的控制,同时支持多个显示器。
你可以在这里查看它们 亮度控制器
为了更快地安装,请使用PPA。
sudo add-apt-repository ppa:apandada1/brightness-controller
sudo apt-get update

然后对于版本1
sudo apt-get install brightness-controller-simple

Brightness Controller Simple

或者选择第二版
sudo apt-get install brightness-controller

Brightness Controller

尽情享受!


工作得很顺利。16.10 - M at
1请记住,这款软件只是添加了一个深色叠加层,并没有真正减少任何功耗。 - Muhammad bin Yusrat
1我的辅助显示器使用的是displalink驱动,但它无法正常工作。 - Abe Petrillo

附加信息:我正在使用CRT显示器。- Neilvert Noval 2011年3月11日下午5:06似乎无法使用/sys/class/backlight控制外部显示器。但有一个名为ddccontrol的应用程序可以控制外部显示器的亮度。

关于如何使用命令行界面的说明可在此处找到here

基本上,您需要使用ddccontrol -p来探测可用的监视器和控制项,并在输出中查找您想要的控制项的地址,然后使用ddccontrol -p -r 0x10 -w 70设置该值。


使用xrandr和几行bash脚本,可以方便地同时控制多个/所有显示器。
(我一次使用3个显示器+笔记本屏幕)
#!/bin/bash
# brightness.sh - script to set multiple monitor brightness
# Author: Nariman Huseynov

# set brightness level from user input & reset if no args provided
if [ -z "$1" ]
then
  echo 'Default brightness 100%'
  LEVEL=1
else
  echo "Setting brightness level to" $1
  LEVEL=$1
fi

# get list of screens,trim noise and remove first line (count)
MONITORS=$(xrandr --listactivemonitors | tail -n +2 | awk '{print $NF}');

# change brightness level per monitor at a time
for each in $MONITORS; do xrandr --output $each --brightness $LEVEL; done

永久使用:

  • 添加执行权限:

    $ chmod +x brightness.sh

  • 移动到bin目录(在我的情况下是/usr/local/bin)

    $ sudo mv brightness.sh /usr/local/bin/brightness

  • 执行以设置亮度水平为50%(夜间模式)

    $ brightness 0.5

  • 重置为100%亮度

    $ brightness

附注:如果您不想进行错误检查,只需要几行代码,那么缩短版就可以了:

# get list of screens,trim noise and remove first line (count)
MONITORS=$(xrandr --listactivemonitors | tail -n +2 | awk '{print $NF}');

# change brightness level per monitor at a time
for each in $MONITORS; do xrandr --output $each --brightness $LEVEL; done

我建议使用一个简单的 bash 脚本来调整您显示器的亮度上下一步

将下面的 bash 脚本复制到一个文件中(文件名不重要,只要名称与其他终端命令不相似)。我称其为 brightness_ext

然后使用 chmod a+x brightness_ext 命令将其标记为可执行

Bash 脚本

#!/bin/bash

MON="DP-1-1"    # Discover monitor name with: xrandr | grep " connected"
STEP=5          # Step Up/Down brightnes by: 5 = ".05", 10 = ".10", etc.

CurrBright=$( xrandr --verbose --current | grep ^"$MON" -A5 | tail -n1 )
CurrBright="${CurrBright##* }"  # Get brightness level with decimal place

Left=${CurrBright%%"."*}        # Extract left of decimal point
Right=${CurrBright#*"."}        # Extract right of decimal point

MathBright="0"
[[ "$Left" != 0 ]] && MathBright="$Left"00          # 1.0 becomes "100"
[[ "${#Right}" -eq 1 ]] && Right="$Right"0          # 0.5 becomes "50"
MathBright=$(( MathBright + Right ))
[[ "$Right" == 050 ]] && MathBright=5  # if we wanna decrease below 10%
[[ "$CurrBright" == 0.0 ]] && MathBright=5 # we can't go below 0, cause it is negative then

[[ "$1" == "Up" || "$1" == "+" ]] && MathBright=$(( MathBright + STEP ))
[[ "$1" == "Down" || "$1" == "-" ]] && MathBright=$(( MathBright - STEP ))
[[ "$MathBright" -gt 100  ]] && MathBright=100      # Can't go over 1.00

if [[ "${#MathBright}" -eq 3 ]] ; then
    MathBright="$MathBright"000         # Pad with lots of zeros
    CurrBright="${MathBright:0:1}.${MathBright:1:2}"
else
    MathBright="$MathBright"000         # Pad with lots of zeros
    CurrBright=".${MathBright:0:2}"
    [[ "$MathBright" == 5000 ]] && CurrBright=.05
fi

xrandr --output "$MON" --brightness "$CurrBright"   # Set new brightness

# Display current brightness
printf "Monitor $MON "
echo $( xrandr --verbose --current | grep ^"$MON" -A5 | tail -n1 )
  • 将MON="DP-1-1"更改为您的显示器名称,例如MON="eDP-1-1"

  • 将STEP=5更改为您的步长值,例如STEP=2会更不明显

使用方法

brightness_ext + 增加亮度;brightness_ext - 减少亮度,非常简单

我还建议您为这些命令创建快捷方式,因为它们更方便使用。个人而言,我为我的两个显示器都创建了亮度快捷方式。