如何从命令行(或通过脚本)更改LCD亮度?


162

要解决错误#1005495(无法通过热键更改LCD亮度)的问题,我想使用一个命令行查询来增加LCD亮度,而使用一个命令行查询来降低LCD的亮度。然后,我可以将热键映射到每个查询。

问题是:我不知道如何在命令行上增加和减少LCD的亮度。你呢?



2
谢谢,Lekensteyn,但这不是自lsmod以来的重复。grep ^ i915没有给出任何输出(请参阅接受的解决方案)。仍在寻找解决方案。
user69748

Answers:


157

我们要做的另一种方法是使用另一个名为xbacklight的新程序,打开您的终端并键入

sudo apt-get install xbacklight

然后输入 xbacklight -set 50

有50个代表亮度范围,我们可以从0达到100。

您还可以将亮度从当前值增加或减少到指定的水平。如前所述,如果您想将亮度从当前值增加到10%,则可以

xbacklight -inc 10

并减少10%,您可以给这个

xbacklight -dec 10 

警告xbacklight仅适用于Intel,不适用于Radeon,也不适用于模式设置驱动程序(source)。


看起来像一个非常简单的命令,但是我需要的是xbacklight之类的东西-增加10可以将亮度增加10%。那有可能吗?
user69748 2012年

1
是的你可以。我已经提到了。这样你就可以通过xbacklight -inc 10
rɑːdʒɑ

1
好的,现在在您的答案中。非常感谢,我会尝试一下。
user69748 2012年

34
这看起来确实很简单,但不幸的是,它对我不起作用。亮度根本不会改变,不会使用-dec和-set来改变。我想我必须希望该错误能尽快得到解决。尽管如此,还是谢谢你。
user69748 2012年

1
此外,还有一种简写可以使用: xbacklight +10; xbacklight -10; xbacklight =50;
Fordi

149

打开您的终端并输入

xrandr -q | grep " connected"

它将为您提供输出

LVDS1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 331mm x 207mm

那里有LVDS1代表您的显示器。所以现在你要做

xrandr --output LVDS1 --brightness 0.5

0.5代表亮度水平,范围从0.0到1.0。0.0->全黑。因此,您必须选择所需的亮度值。

不会改变硬件级别的亮度。从randr手册

--brightness brightness将当前连接到输出的crtc 的伽玛值乘以指定的浮点值。对于过亮或过暗的输出有用。但是,这是仅软件的修改,如果您的硬件支持实际更改亮度,则您可能会更喜欢使用xbacklight。


2
谢谢您的回答,但是我需要的是xrandr之类的东西-增加10以使亮度增加10%。那有可能吗?
user69748

48
在硬件级别上,这似乎并没有改变亮度
erjoalgo

12
太糟糕了,这个答案获得了很多选票。我的笔记本电脑屏幕“模仿”黑暗,也就是说通过使事物看起来更暗(就像在播放带有夜景的视频时一样,这与屏幕亮度无关,而与遮盖背景光的像素无关)。亮度完全相同,因为像素比现在更暗,浪费的电池比以前更多。
Mephisto 2014年

2
谢谢,它也挽救了我的眼睛和眼睛.. :)
Shylendra Madda

7
伪造亮度。亮度不变,由软件渲染。
user1970939 '16

109

以下对我有用:

echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightness

我想最大可能的值在/sys/class/backlight/intel_backlight/max_brightness文件中。

替换intel_backlight为星号以应用于所有背光。


16
@Ray尝试一下:echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightness
Mygod

10
重定向时,@ Ray sudo echo 400 > /sys/class . .. ./brightness是由shell而非回声完成的。Shell仍然以您的普通用户身份运行,而不是以sudo身份运行。这就是为什么它授予的权限被拒绝。您需要有一个实用程序,该实用程序将以root权限写入文件,这就是为什么tee可以使用的原因。
Sergiy Kolodyazhnyy

4
echo 400 | sudo tee /sys/class/backlight/radeon_bl0/brightness适用于radeon APU和卡
Suici Doga'1

13
这是低级的,但实际上似乎是唯一可靠的方法。如果您sudo chmod 0646使用brightness文件,它会变得不那么难看,因此sudo不再需要设置亮度。
大约

7
将此设置为su权限的原因是,可以想象,病毒可能会使您的屏幕变暗并以令人难以置信的速度变亮,最终损坏您的硬件显示。在90年代,我遇到了一种病毒,该病毒会迅速调整屏幕刷新频率,以至于您的显示器无法正常工作。因此,请谨慎调整权限。
RyanNerd '16

12

对于笔记本电脑,

sudo setpci -s 00:02.0 F4.B=80

更改80通过[0-FF]获得最低最高亮度。指定的值以十六进制表示,因此80将为您提供50%最大亮度。

为了让台式机进行伽玛校正(未经我测试),

xgamma -gamma .75

谢谢您的回答,但我需要的是setpci之类的东西-增加10可使亮度增加10%。那有可能吗?
user69748

谢谢您的回答,很高兴知道底层的工作方式
erjoalgo

1
这是唯一适用于Samsung NB30 Plus的答案。
OSE 2013年

我似乎无法正常工作。。也许应该更改某些参数,如果可以,如何找到合适的值?
拉斯穆斯(Rasmus)2014年

谢谢,我在笔记本电脑上,setpci没有用,但是可以xgamma用。
菲利普·柯比布里德

4

在终端中尝试以下操作:

xrandr --output LVDS1 --brightness 0.9

您可以根据需要更改最后一个值,例如。0.2


1
1)输出并不总是LVDS1,但用户可以使用xrandr --verbose来查找2)不改变背光强度
erjoalgo 2013年

4

编写此脚本:

set-brightness.sh

#!/bin/bash
TARGET="acpi_video0"
cd /sys/class/backlight
MAX="$(cat "${TARGET}/max_brightness")"
# The `/1` at the end forced bc to cast the result 
# to an integer, even if $1 is a float (which it 
# should be)
LOGIC="$(echo "($1 * ${MAX})/1" | bc)"
for i in */; do
    if [[ "${TARGET}/" != "$i" && -e "${i}brightness" ]]; then
        cat "${i}max_brightness" > "${i}brightness"
    fi
done
echo "$LOGIC" > "${TARGET}/brightness"

以root身份运行它,其值介于0和1之间。

sudo ./set-brightness.sh 0.5
  • 如果您的系统没有/sys/class/backlight/acpi_video0,则其中至少应有一个目录,该目录可能是特定于设备的(radeon_bl0例如,我也有一个)。
  • 如果还有其他值,请记住它们的值堆栈(因此循环;将所有其他值推为1.0,然后将目标值设置为所需的值)。
  • 虽然acpi_video0 应该总是可以工作,但它并不总是具有全部可用的物理亮度。尝试每一种,并使用色域最大的那一种作为“目标”

2
考虑使用/sys/class/backlight/*/brightness而不是尝试硬编码acpi_video0到脚本中。它将允许归纳到文件的路径,该路径可以不同-例如,具有has intel_backlight,而不是acpi_video0。这就是我在此处的脚本中
Sergiy Kolodyazhnyy

4

在Gnome中使用DBus

也可以使用此方法来实现用于键盘控制的亮度步进。

# Step up:
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp

# Step down:
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepDown

笔记


+1确认这在内部LCD显示屏上效果很好。它不会影响已经由xrandr伽玛和亮度脚本控制的外部显示器。
WinEunuuchs2Unix

3

正如@palacsint所说,echo 244 > /sys/class/backlight/intel_backlight/brightness路径对我有用。

但是max和min值分别发送到/sys/class/backlight/intel_backlight/max_brightness/sys/class/backlight/intel_backlight/bl_power文件中。

此外,还显示了计算机现在正在运行的实际亮度 /sys/class/backlight/intel_backlight/actual_brightness


3

KDE 4.12:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl setBrightness 55

KDE等离子版本:5.14.3:

上面的代码仍然有效。仅当您是KDE用户时,它才有效。但是,在这种情况下,它将不需要其他软件。它的行为与使用“电池和亮度”小部件时的行为完全相同。AFAIK它改变了物理背光,与之相反xrandr

请注意,上面的55不是100的分数,后者是最大亮度。相反,它与max_brightness有关:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl brightnessMax

您还可以在脚本中使用“静默”版本:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl setBrightnessSilent 2000

参考:qdbus固体亮度


您能解释一下它将做什么吗?
rɑːdʒɑ

2

这条短线可以帮助您放松一下眼睛。只需使用该行创建crontaab或编写脚本

xrandr --output VGA1 --brightness 0.5; sleep 20; xrandr --output VGA1 --brightness 1

2

使用以上答案,我创建了此脚本(在我的主目录中保存为Brightness.sh)来修改显示器的亮度(因为笔记本电脑的键盘遇到了溢茶问题,变得无法使用)。随时使用它(如果您有指定的文件...否则,必须进行修改以指向它们的变体)。

#!/bin/bash
function main_menu
{
    sudo clear
    cursetting=$(cat /sys/class/backlight/intel_backlight/brightness)
    maxsetting=$(cat /sys/class/backlight/intel_backlight/max_brightness)
    powersave=$((maxsetting/5))
    conservative=$((powersave*2))
    medium=$((powersave*3))
    performance=$((powersave*4))
    echo ""
    echo "----------------------- Brightness -----------------------"
    echo " 1. Set Display to Minimum (Powersave) brightness setting."
    echo " 2. Set Display to Low (Conservative) brightness setting."
    echo " 3. Set Display to Medium brightness setting."
    echo " 4. Set Display to High (Performance) brightness setting."
    echo " 5. Set Display to Maximum brightness setting."
    echo " 6. Exit."
    echo "----------------------------------------------------------"
    if [ $cursetting -eq $powersave ]; then
     cursetting='Minimum'
    else
     if [ $cursetting -eq $conservative ]; then
      cursetting='Conservative'
     else
      if [ $cursetting -eq $medium ]; then
       cursetting='Medium'
      else
       if [ $cursetting -eq $performance ]; then
        cursetting='Performance'
       else
        if [ $cursetting -eq $maxsetting ]; then
         cursetting='Maximum'
        fi
       fi
      fi
     fi
    fi
    echo "        Current Display Setting - "$cursetting;
    choice=7
    echo ""
    echo -e "Please enter your choice: \c"
}

function press_enter
{
    echo ""
    echo -n "Press Enter to continue."
    read
    main_menu
}

main_menu
while [ $choice -eq 7 ]; do
read choice

if [ $choice -eq 1 ]; then
 echo $powersave | sudo tee /sys/class/backlight/intel_backlight/brightness
 main_menu
else
 if [ $choice -eq 2 ]; then
  echo $conservative | sudo tee /sys/class/backlight/intel_backlight/brightness
  main_menu
 else
  if [ $choice -eq 3 ]; then
   echo $medium | sudo tee /sys/class/backlight/intel_backlight/brightness
   main_menu
  else
   if [ $choice -eq 4 ]; then
    echo $performance | sudo tee /sys/class/backlight/intel_backlight/brightness
    main_menu
   else
    if [ $choice -eq 5 ]; then
     echo $maxsetting | sudo tee /sys/class/backlight/intel_backlight/brightness
     main_menu
    else
     if [ $choice -eq 6 ]; then
      exit;
     else
      echo -e "Please enter the NUMBER of your choice: \c"
      choice = 7
     fi
    fi
   fi
  fi
 fi
fi
done

您可以做得比仅仅嵌套很多if条件elif更好甚至更好case。另外,我建议阅读诸如google.github.io/styleguide/shell.xml之类的样式指南,并尝试像shellcheck这样的小工具,因为它有助于您创建更好的代码。我希望几年前我开始编写脚本时有人告诉过我。:)
LiveWireBT

1

ddccontrol是用于控制外部显示器背光的另一种选择。在这里,我可以使用以下方法将外接显示器的背光设置为其功率的50%:

ddccontrol -p -r 0x10 -w 50

我寻找了可能的解决方案来改善Redshift处理亮度变化的方式。到那里,我发现Linux内核有一个补丁集,可以改善跨设备的兼容性,因此笔记本电脑和外部屏幕可以通过相似地工作sysfs

同时,ddccontrol是唯一对我有用的东西。与往常一样,Arch Wiki也提供了有关该主题的完整文档


0

使用类似ncurses的交互式UI xbacklight

穷人的恩宠。命中率h下降10%,命中率l上升10%。然后显示当前的亮度。

xback() (
  done=false;
  echo "less: h, more: l, quit: q"
  while ! $done; do
    read -rsn1 key
    if [ "$key" = h ]; then
      xbacklight -dec 10
    elif [ "$key" = l ]; then
      xbacklight -inc 10
    elif [ "$key" = q ]; then
      done=true
    fi
    printf "\r$(xbacklight -get) "
  done
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.