Как изменить яркость ЖК-дисплея из командной строки (или с помощью скрипта)?


162

Чтобы обойти ошибку # 1005495 (изменение яркости ЖК-экрана с помощью горячих клавиш невозможно), я хотел бы иметь один запрос командной строки для увеличения и один для уменьшения яркости моего ЖК-дисплея. Затем я могу сопоставить горячую клавишу каждому из этих запросов.

Проблема в том, что я не знаю, как увеличить и уменьшить яркость ЖК-дисплея в командной строке. Вы?



2
Спасибо, Лекенштейн, но это не дубликат, так как lsmod | grep ^ i915 не дает мне вывода (см. принятое решение). Все еще ищу решение.
user69748

Ответы:


157

Еще один способ сделать это с помощью другой новой программы с именем xbacklight, открыть свой терминал и набрать это

sudo apt-get install xbacklight

затем введите это xbacklight -set 50

там 50 обозначает диапазон яркости, мы можем получить его до 100 от 0.

Вы также можете увеличивать и уменьшать яркость от текущего значения до указанного уровня. Как вы упомянули, если вы хотите увеличить яркость до 10% от текущего значения яркости, вы можете дать

xbacklight -inc 10

и чтобы уменьшить 10% вы можете дать это

xbacklight -dec 10 

Предупреждение : xbacklightработает только с Intel, некорректно работает на Radeon и совсем не работает с драйвером настройки режима ( источник ).


Выглядит как очень простая команда, но мне нужно что-то вроде xbacklight -increase 10, чтобы увеличить яркость на 10 процентов. Это тоже возможно?
user69748

1
Да, ты можешь. Я уже упоминал это. так что вы можете получить это с помощью xbacklight -inc 10
rʒɑdʒɑ

1
Хорошо, теперь это в вашем ответе. Большое спасибо, я попробую это.
user69748

34
Это действительно выглядит просто, но, к сожалению, это не работает для меня. Яркость просто не меняется, не с -dec и не с -set. Думаю, мне придется надеяться, что ошибка будет исправлена ​​в ближайшее время. Спасибо, тем не менее.
user69748

2
Кроме того, есть сокращение, которое вы можете использовать: 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
Жаль, что этот ответ получил так много голосов. Экран моего ноутбука, так сказать, «эмулирует» темноту, заставляя вещи казаться темнее (так же, как при воспроизведении видео с ночной сценой, это не имеет ничего общего с яркостью экрана, а скорее с пикселями, маскирующими фоновый свет). Освещенность точно такая же, расходует больше энергии, чем раньше, из-за пикселей темнее, чем сейчас.
Мефисто

2
Спасибо, это спасло мой день и глаза тоже :) :)
Шилендра Мадда

7
Это подделывает яркость. Яркость не меняется, она отображается программно.
user1970939

110

Следующие работы для меня:

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, а не echo. И оболочка все еще работает как ваш обычный пользователь, а не как sudo. Вот почему это дает разрешение отказано. Вам нужна утилита, которая будет записывать в файл с правами суперпользователя, поэтому teeработает.
Сергей Колодяжный

4
echo 400 | sudo tee /sys/class/backlight/radeon_bl0/brightnessдля Radeon APU и карт
Suici Doga

13
Это смехотворно низкий уровень, но на самом деле, кажется, единственное, что надежно работает. Он становится немного менее уродливым, если вы sudo chmod 0646используете brightnessфайл, поэтому sudoбольше не нужен для настройки яркости.
оставил около

7
Причина, по которой этот параметр установлен на уровне разрешений su, заключается в том, что вирус может сделать ваш экран тусклым и ярким с невероятной скоростью, что в конечном итоге приведет к повреждению вашего аппаратного дисплея. В 90-х годах я столкнулся с вирусом, который настроил бы обновление экрана Hertz так быстро, что ваш монитор заработал. Так что будьте осторожны при настройке разрешений на это.
RyanNerd

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

Кажется, я не могу заставить это работать. Должен ли я изменить некоторые параметры, возможно, и если да, то как мне найти соответствующие значения?
Расмус

Спасибо, я на ноутбуке, setpciне работал, но xgammaсделал.
Филипп Киркбрайд

5

Использование DBus с Gnome

С помощью этого метода также можно реализовать шаги по яркости для управления с клавиатуры.

# 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 подтверждает, что это прекрасно работает на внутреннем ЖК-дисплее. Это не влияет на внешние мониторы, уже управляемые xrandrскриптами гаммы и яркости.
WinEunuuchs2Unix

4

Попробуйте это в терминале:

xrandr --output LVDS1 --brightness 0.9

Вы можете изменить последнее значение, как вам нравится, например. 0.2


1
1) Вывод не всегда LVDS1, но пользователь может узнать с помощью xrandr --verbose 2) Не меняет интенсивность подсветки
erjoalgo

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в сценарий. Это позволит обобщить путь к файлу, который может быть другим - например, у меня intel_backlightнет acpi_video0. Вот что я использовал здесь в своем сценарии
Сергей Колодяжный,

3

Как сказал @palacsint, echo 244 > /sys/class/backlight/intel_backlight/brightness путь работает для меня.

Но Макс и минимальные значения возмущаться в /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 Plasma: 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

Refs : qdbus , твердый , яркость


Вы можете объяснить, что это будет делать?
rɑːdʒɑ

2

Вот короткая строчка, которая поможет вам расслабить глаза. Просто создайте crontaab со строкой или сделайте скрипт

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

2

Используя приведенные выше ответы, я создал этот сценарий (сохраненный в моем домашнем каталоге как bright.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

Вы можете сделать лучше, чем просто вкладывать много, если условия, как elifили даже лучше case. Также я предлагаю прочитать руководство по стилю, например google.github.io/styleguide/shell.xml, и попробовать linter-подобный shellcheck, поскольку это поможет вам создать лучший код. Я бы хотел, чтобы кто-то сказал мне это, когда я начал писать сценарии много лет назад. :)
LiveWireBT

1

ddccontrol - еще одна опция для управления подсветкой для внешних мониторов. Здесь я могу установить подсветку моего внешнего монитора на 50% его мощности с помощью:

ddccontrol -p -r 0x10 -w 50

Я искал возможные решения этой проблемы, чтобы улучшить способ, которым Redshift обрабатывает изменения яркости . Там я обнаружил, что для ядра Linux есть набор патчей для улучшения совместимости между устройствами, чтобы ноутбуки и внешние экраны могли работать одинаково, черезsysfs .

Между тем, ddccontrol - единственное, что работает для меня здесь. Как обычно, вики Arch имеет хорошую общую документацию по этой теме.


0

Интерактивный интерфейс, похожий на ncurses 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
)

0

Чтобы установить абсолютную яркость (для пользователей ноутбуков):

BRIGHTNESS=50 # 0 to 100

dbus-send \
--session \
--type=method_call \
--dest="org.gnome.SettingsDaemon.Power" \
/org/gnome/SettingsDaemon/Power \
org.freedesktop.DBus.Properties.Set \
string:"org.gnome.SettingsDaemon.Power.Screen" \
string:"Brightness" \
variant:int32:$BRIGHTNESS
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.