Уменьшение максимальной яркости экрана с Ubuntu 18.04

Я пытаюсь установить ограничение максимальной яркости экрана на своем Thinkpad X250 под управлением Ubuntu 18.04.

Немного контекста: Я изменил оригинальный экран на новый (до установки Ubuntu), регуляторы яркости работают отлично, но я заметил, что при яркости более 55-60%, изменения почти не воспринимаются человеческим глазом, но они разряжают батарею и начинают сильно нагреваться. Я планирую предоставить компьютер своей семье с молодыми и неопытными пользователями, поэтому я хотел бы установить предел, который не требует действий пользователя при каждом запуске, и мог бы работать для всех пользователей, не беспокоясь о том, что обновление через диспетчер программного обеспечения может стереть настройки.

Что я пытался: Я пытался напрямую редактировать / sys / class / backlight / intel_backlight / max_brightness , но он отказывается редактировать (даже после использования chmod для изменения разрешения). Я видел, как некоторые ответчики добавляли команду, например "echo MAX_VALUE> / sys / class / backlight / intel_backlight / max_brightness" в /etc/rc.local , но я не есть этот файл. Обратите внимание, что у меня нет файлов или папок * acpi _ ** в / sys / class / backlight / .

Как правильно установить постоянный предел яркости для всех пользователей?

3
задан 1 July 2018 в 12:34

2 ответа

Я написал скрипт для мониторинга /sys/class/backlight/*/brightness и перенаправил его: Как переключаться между параметрами в `/ sys / class / backlight` для решения проблемы яркости? .

Его можно быстро изменить, добавив три строки:

    # Modification for: https://askubuntu.com/questions/1051171/lowering-screen-max-brightness-with-ubuntu-18-04
    # If brightness > 50, set to 50
    [[ WatchPer -gt 50 ]] && WatchPer=50

Модифицированный redirected-brightness скрипт

#!/bin/bash

# NAME: redirect-brightness
# PATH: /usr/local/bin
# DESC: Redirect to correct driver when Ubuntu is adjusting the wrong
#       /sys/class/DRIVER_NAME/brightness

# DATE: June 13, 2018. Modified June 14, 2018.

# NOTE: Written for Ubuntu question:
#       https://askubuntu.com/q/1045624/307523

WatchDriver="/sys/class/backlight/intel_backlight"
PatchDriver="/sys/class/backlight/intel_backlight"

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    echo >&2 "Root access required. Use: 'sudo redirect-brightness'"
    exit 1
fi

# inotifywait required
type inotifywait >/dev/null 2>&1 || \
    { echo >&2 "'inotifywait' required but it's not installed.  Aborting."; \
      echo >&2 "Use 'sudo apt install inotify-tools' to install it.'"; \
      exit 1; }

# Was right watch driver directory name setup correctly?
if [[ ! -d $WatchDriver ]]; then
    echo >&2 "Watch directory: '$WatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Was right patch driver directory name setup correctly?
if [[ ! -d $PatchDriver ]]; then
    echo >&2 "Redirect to directory: '$PatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Get maximum brightness values
WatchMax=$(cat $WatchDriver/max_brightness)
PatchMax=$(cat $PatchDriver/max_brightness)

# PARM: 1="-l" or "--log-file" then write each step to log file.
fLogFile=false
if [[ $1 == "-l" ]] || [[ $1 == "--log-file" ]]; then
    fLogFile=true
    LogFile=/tmp/redirect-brightness.log
    echo redirect-brightness LOG FILE > $LogFile
    echo WatchMax: $WatchMax PatchMax: $PatchMax >> $LogFile
fi

SetBrightness () {
    # Calculate watch current percentage
    WatchAct=$(cat $WatchDriver/actual_brightness)
    WatchPer=$(( WatchAct * 100 / WatchMax ))
    [[ $fLogFile == true ]] && echo WatchAct: $WatchAct WatchPer: $WatchPer >> $LogFile
    # Reverse engineer patch brightness to set
    # Modification for: https://askubuntu.com/questions/1051171/lowering-screen-max-brightness-with-ubuntu-18-04
    # If brightness > 50, set to 50
    [[ WatchPer -gt 50 ]] && WatchPer=50
    PatchAct=$(( PatchMax * WatchPer / 100 ))
    echo $PatchAct | sudo tee $PatchDriver/brightness
    [[ $fLogFile == true ]] && echo PatchAct: $PatchAct >> $LogFile
}

# When machine boots, set brightness to last saved value
SetBrightness

# Wait forever for user to press Fn keys adjusting brightness up/down.
while (true); do
    inotifywait --event modify $WatchDriver/actual_brightness
    [[ $fLogFile == true ]] && \
        echo "Processing modify event in $WatchDriver/actual_brightness" >> $LogFile
    SetBrightness
done
2
ответ дан 1 July 2018 в 12:34

Это нельзя сделать так, как вы хотите, так как это значение для ядра Linux только для чтения:

Нет кода, который будет читать значение max_brightness и действуйте в соответствии с этим: ядро ​​просто публикует, какое бы максимальное значение для вашего оборудования не было.

Если вы попытаетесь заставить ядро ​​все еще принимать записи, оно выдаст Input/output error.

Может быть, есть способ:

  • Перехватывать нажатия клавиш по отдельности, а затем отказываться подниматься выше, но это будет означать опубликовать новый вопрос и сослаться сюда снова, чтобы почему вы хотите это сделать.
  • Попросите Линуса Торвальдса самому разобраться с вашей ошибкой, но у него очень мало шансов решить эту проблему в ближайшем будущем ... ; -)
2
ответ дан 1 July 2018 в 12:34

Другие вопросы по тегам:

Похожие вопросы: