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

Вопрос или проблема

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

Проблема в том, что: я не знаю, как увеличить и уменьшить яркость LCD из командной строки. Знаете ли вы?

Откройте терминал и введите это

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.

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

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

Я полагаю, что максимальное возможное значение находится в файле /sys/class/backlight/intel_backlight/max_brightness.

Замените intel_backlight на звездочку, чтобы применить ко всем подсветкам.

Примечание: xbacklight работает только с Intel, не работает должным образом на Radeon и совсем не работает с драйвером modesetting (источник). Он также работает только на X11, а не на Wayland.


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

sudo apt-get install xbacklight

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

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

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

xbacklight -inc 10

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

xbacklight -dec 10 

Использование D-Bus с GNOME

Вы можете увеличить/уменьшить яркость с помощью gdbus:

# Увеличить
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp

# Уменьшить
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepDown

Примечания

Для ноутбуков,

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

Замените 80 на [0-FF] для получения самой низкой или высокой яркости.
Указанное значение находится в шестнадцатеричном формате, поэтому 80 даст вам 50% от максимальной яркости.

Для настольных ПК, чтобы сделать коррекцию гаммы (не тестировалось мной),

xgamma -gamma .75

Создайте этот скрипт:

set-brightness.sh

#!/bin/bash
TARGET="acpi_video0"
cd /sys/class/backlight
MAX="$(cat "${TARGET}/max_brightness")"
# /1 в конце заставляет bc привести результат к целому числу, даже если $1 - это дробь (что должно быть)
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 должен всегда работать, он не всегда имеет полный диапазон физических значений яркости. Попробуйте каждое устройство и используйте то, у которого самый большой диапазон, в качестве вашего “TARGET”.

KDE 4.12:

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

KDE Plasma Версия: 5.14.3:

Указанный код все еще действителен. Он будет работать только если вы являетесь пользователем KDE. Однако в этом случае не потребуется никакого дополнительного программного обеспечения. Он будет вести себя так же, как при использовании виджета “батарея и яркость”. Насколько я знаю, он изменяет физическую подсветку, в отличие от 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, solid, яркость

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

xrandr --output LVDS1 --brightness 0.9

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

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

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

Как сказал @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

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

ddccontrol -p -r 0x10 -w 50

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

Тем временем ddccontrol – единственное, что работает для меня здесь. Как обычно, в Arch wiki есть хорошая общая документация на эту тему.

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

BRIGHTNESS=50 # 0 до 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

Я использую i3 в качестве менеджера окон и удалил gnome, поэтому решение gnome не работало для меня. А другие программные подходы просто сделали экран более черным.
Поэтому, после небольшого чтения, я наткнулся на brightctl.
Установите его с помощью apt install.


sudo apt install brightctl

Вам понадобятся разрешения для изменения устройства отображения, что могут сделать только члены группы video (и очевидно root). Поэтому убедитесь, что вы добавили текущего пользователя в группу video. Вы можете сделать это следующим образом:


sudo usermod $(whoami) -a -G video

После установки я могу увеличить/уменьшить яркость, используя команды ниже на 10 — это очень постепенно и дает мне больше контроля. :


# Увеличить яркость
/usr/bin/brightnessctl -d intel_backlight set +10

# Уменьшить яркость
/usr/bin/brightnessctl -d intel_backlight set 10-

Я добавил горячие клавиши в свою конфигурацию i3. Вот фрагмент горячей клавиши.


# Увеличить яркость
bindsym XF86MonBrightnessUp exec  /usr/bin/brightnessctl -d intel_backlight set +10

# Уменьшить яркость
bindsym XF86MonBrightnessDown exec /usr/bin/brightnessctl -d intel_backlight set 10-

Используя приведенные выше ответы, я создал этот скрипт (сохраненный в моей домашней директории под именем brightness.sh), чтобы изменить яркость дисплея (так как клавиатура ноутбука пострадала из-за пролитого чая и стала непригодной). Будьте свободны в использовании этого (если у вас есть назначенные файлы… в противном случае потребуется tinkering, чтобы указать на свою вариацию).

#!/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 "----------------------- Яркость -----------------------"
  echo " 1. Установить дисплей на минимальный (экономия энергии) уровень яркости."
  echo " 2. Установить дисплей на низкий (консервативный) уровень яркости."
  echo " 3. Установить дисплей на средний уровень яркости."
  echo " 4. Установить дисплей на высокий (производительный) уровень яркости."
  echo " 5. Установить дисплей на максимальный уровень яркости."
  echo " 6. Выход."
  echo "----------------------------------------------------------"

  if [ $cursetting -eq $powersave ]; then
    cursetting='Минимум'
  else
    if [ $cursetting -eq $conservative ]; then
      cursetting='Консервативный'
    else
      if [ $cursetting -eq $medium ]; then
        cursetting='Средний'
      else
        if [ $cursetting -eq $performance ]; then
          cursetting='Производительность'
        else
          if [ $cursetting -eq $maxsetting ]; then
            cursetting='Максимум'
          fi
        fi
      fi
    fi
  fi

  echo "        Текущая настройка дисплея - "$cursetting;
  choice=7
  echo ""
  echo -e "Пожалуйста, введите ваш выбор: \c"
}

function press_enter {
  echo ""
  echo -n "Нажмите Enter, чтобы продолжить."
  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 "Пожалуйста, введите НОМЕР вашего выбора: \c"
              choice = 7
            fi
          fi
        fi
      fi
    fi
  fi
done

Чтобы увеличить яркость, используя xdotool, выполните следующую команду:

$ xdotool key XF86MonBrightnessUp

Чтобы уменьшить яркость, используя xdotool, выполните следующую команду:

$ xdotool key XF86MonBrightnessDown 

Поскольку xdotool имитирует реальные нажатия клавиш, это изменение яркости на аппаратном уровне.

Источник: https://linuxhint.com/display_brightness_commandline/

Интерактивный интерфейс в стиле ncurses с использованием xbacklight

Бедный человек ncurses. Нажмите h, и яркость уменьшится на 10%, нажмите l, и она увеличится на 10%. Затем показывается текущая яркость.

xback() (
  done=false;
  echo "меньше: h, больше: l, выход: 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
)

На основе ответа placsint

cd /sys/class/backlight/intel_backlight/
cat max_brightness | sudo tee brightness

Вы можете установить яркость x% дисплея следующим образом:

Синтаксис:

sudo brightnessctl -d intel_backlight set [ваше желаемое значение в % от максимума]

Установите brightctl:

sudo apt install brightctl

Установите яркость на одно значение % в диапазоне 0 – 100 %:

sudo brightnessctl -d intel_backlight set 60%

Ответ или решение

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

1. Использование команд xrandr

Команда xrandr позволяет управлять настройками экрана, включая изменение яркости, однако стоит отметить, что это программное изменение, которое не влияет на аппаратный уровень.

Примеры команд

  • Для проверки доступных выходных устройств:

    xrandr -q | grep " connected"
  • Для установки яркости (значение варьируется от 0.0 до 1.0):

    xrandr --output LVDS1 --brightness 0.5

    В этом примере LVDS1 – это идентификатор вашего дисплея, а 0.5 – уровень яркости.

2. Прямое изменение файлов в системе

Другой, более прямой способ — изменение значения в файле, ответственного за яркость.

Команды для изменения яркости

  • Для установки новой яркости:
    echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightness
  • Максимальное значение яркости можно посмотреть:
    cat /sys/class/backlight/intel_backlight/max_brightness

3. Использование brightnessctl

Для более гибкого управления яркостью на современных системах рекомендуется использовать утилиту brightnessctl. Она позволяет устанавливать яркость в процентном соотношении от максимального значения и может быть легко интегрирована в скрипты.

Установка и команда

  • Установите утилиту:

    sudo apt install brightnessctl
  • Увеличение яркости на 10%:

    brightnessctl set +10%
  • Уменьшение яркости на 10%:

    brightnessctl set 10%-

4. Управление яркостью через D-Bus (для GNOME)

Если вы используете окружение GNOME, можно воспользоваться D-Bus для изменения яркости дисплея без необходимости административных прав.

Команды D-Bus

  • Увеличение яркости:

    gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp
  • Уменьшение яркости:

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

5. Скрипт для управления яркостью

Если вы предпочитаете автоматизацию, создать скрипт на bash для переключения яркости можно следующим образом:

#!/bin/bash
TARGET="/sys/class/backlight/intel_backlight/brightness"
MAX="$(cat /sys/class/backlight/intel_backlight/max_brightness)"
CURRENT="$(cat $TARGET)"

if [ "$1" == "up" ]; then
  new_brightness=$((CURRENT + (MAX / 10))) # Увеличение на 10%
  if [ $new_brightness -gt $MAX ]; then
    new_brightness=$MAX
  fi
elif [ "$1" == "down" ]; then
  new_brightness=$((CURRENT - (MAX / 10))) # Уменьшение на 10%
  if [ $new_brightness -lt 0 ]; then
    new_brightness=0
  fi
else
  echo "Usage: $0 {up|down}"
  exit 1
fi

echo $new_brightness | sudo tee $TARGET

Запустите этот скрипт передав параметр up или down для изменения яркости.

Заключение

В зависимости от вашего окружения и предпочтений, вы можете выбрать один из предложенных методов для изменения яркости вашего дисплея. Для каждого подхода доступны команды, которые позволяют удобно управлять настройками яркости как с помощью терминала, так и в рамках автоматизации через скрипты. Выбор конкретного способа зависит от ваших личных предпочтений и требований конфигурации вашего оборудования.

Оцените материал
Добавить комментарий

Капча загружается...