web-dev-qa-db-ja.com

Ubuntu 18.04で画面の最大輝度を下げる

Ubuntu 18.04を実行しているThinkpad X250で最大画面輝度の制限を設定しようとしています。

コンテキストの少し:元の画面を新しい画面に変更しました(Ubuntuをインストールする前)、明るさコントロールは完全に機能しますが、55-60%を超える明るさでは、変更がほとんど認識されないことに気付きました人間の目ですが、それはより多くのバッテリーを消耗し、本当に暑くなり始めます。若くて経験の浅いユーザーがいる家族にコンピューターを提供する予定ですので、各スタートアップでユーザーの操作を必要とせず、ソフトウェアマネージャーを介した更新を心配することなくすべてのユーザーに対して機能できる制限を設定したいと思います設定が消去される可能性があります。

試したこと:直接編集しようとしました/ sys/class/backlight/intel_backlight/max_brightnessが編集を拒否しました(chmodを使用して権限を変更した後でも)。 "echo MAX_VALUE>/sys/class/backlight/intel_backlight/max_brightness"のようなコマンドを/ etc/rc.localが、このファイルはありません。 / sys/class/backlight /に* acpi _ **ファイルまたはフォルダーがないことに注意してください。

すべてのユーザーに恒久的な輝度制限を設定する正しい方法は何でしょうか?

3
NMZ

/sys/class/backlight/*/brightnessを監視してリダイレクトするスクリプトを作成しました: 輝度の問題を解決するために `/ sys/class/backlight`のオプションを切り替える方法

次の3行を追加することで、ニーズに合わせてすばやく変更できます。

    # 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

これはLinuxカーネルの読み取り専用の値であるため、これを行う方法では実行できません:

max_brightnessの値を読み取り、それに基づいて動作するコードはありません。カーネルは、ハードウェアの最大値が何であれ、公開するだけです。

カーネルに強制的に書き込みを受け入れさせようとすると、Input/output errorがスローされます。

たぶん次の方法があります:

  • キープレスを個別にインターセプトしてから、それ以上高くなることを拒否しますが、それは 新しい質問を投稿する を意味し、ここに戻ってそれを行う理由を参照します。
  • linus Torvaldsに自分のバグに対応するように頼んでください。しかし、近い将来に彼がこれを解決する可能性はほとんどありません...;-)
2
Fabby