ArchWiki-バックライトから,ディスプレイの明るさの調整方法とユーティリティーアプリケーションを紹介する。

バックライト記事の概要

ハードウェアに直接結びついてディスプレイの明るさを調整するホットキーにはOSは手を出せない.ACPIやグラフィックドライバーは/sys/class/backlight/以下のファイルで明るさの制御を行う1,ユーザー環境のバックライトユーティリティコマンドもこの方法である.setpciコマンドでグラフィックカードへの書きこみを行うことで明るさを変更することもできる2:が,これはリスキーな方法である.

ハードウェアインターフェース

ACPI

「ACPI」とは電源管理の意味する(The Advanced Configration and Power Interface)。ビデオ用のACPIカーネルモジュールが制御を行うがそのときのパラメータを/sys/class/backlight/の下にあるacpi_video0/またはintel_backlight/以下max_brightnessbrightnessにより指定できる。

# モジュールが指定可能な最大の明るさを取得して
# 現在のディスプレイの明るさに指定する。
echo `cat /sys/class/backlight/intel_backlight/max_brightness` \
> /sys/class/backlight/intel_backlight/brightness

brightnessファイルのパーミッションは,rootユーザー以外の書き込みを禁止しているが/etc/udev/rules.d/以下にルールファイルを作ればvideoグループに書き込み権限をつけることができる。

# ルールファイルを作成する
cat << 'END' > /etc/udev/rules.d/backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", KERNEL="intel_backlight", GROUP="video", MODE=0664"
END

カーネル コマンドライン オプション

ACPIがうまくうごかないときはカーネルパラメータに以下を追加する(カーネルパラメータの変更のしかた).

acpi_backlight=video
acpi_backlight=vendor
acpi_backlight=native

それでもうまいかない場合はacpi_backlight=noneカーネルパラメータを試すとよい。

Udev rule

ACPIインターフェースはバックライトのレベルに対してブート時にudevルールを適用する.

cat /etc/udev/rules.d/81-backlight.rules
# Set backlight level to=8
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="intel_backlight", ATR{brightness}="8"

setpci

グラフィックカードのレジスタから直接バックライトを調節できることがある.これは直接ハードウェアのファイルのディレクトリを弄ることになるので危険な行為であるし,すべてのグラフィックカードがこの方法に対応している訳ではないが,対応している場合は次の方法で行う.

  1. lspciを使って最初にグラフィックカードを特定する
lspci -v  | grep -i graphics
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 510 (rev 07) (prog-if 00 [VGA controller])
  1. setpciを実行する.コマンドのオプションとパラメータについてはsetpciのマニュアルを参照する.
setpci -s 00:02.0 F4.B=0

バックライトをオフにする

バックライトをオフにする(ノートPCで操作をロックしたときなど)には,以下のコマンドでXがうまく処理してくれる.

xset dpms force off

バックライトを再びオンにするにはマウスをうごかすか何かキーを押す.またはxset sコマンドを実行してもよい。

もし上記のコマンドがうまく動かなければvbetoolがうまくいくかもしれない。気をつけなければならないのはこの場合バックライトは手動で有効にしなければならない。コマンドは以下のとおり。

vbetool dpms off

バックライトを再度有効にするには

vbetool dpms on

ノートPCを閉じたときにこれらを使ってディスプレイをオフにすることができる。

保存・復元機能

systemdの中のsystemd-backlight@.serviceサービスはシャットダウン時にバックライトの設定を保存し起動時に復元する。

このサービスは #ACPIで述べたACPIから利用される。/sys/class/backlight/以下にあるサブフォルダーにサービスが作成されて例えばacpi_video0フォルダーがある場合systemd-backlight@backlight:acpi_video0.serviceという名前のサービスが作成される。

起動時に明るさ調整に他の方法を使うときにはsystemd-backlightが明るさを復元するのを止めておくためにカーネルパラメータsystemd.restore_state=0を指定することが推奨されている34

relight(AUR)パッケージはsystemdによる方法にかわり画面の明るさの保存と復元を行う。

加えてbrillo(AUR)とlightユーティリティーが保存と復元機能に対応している。この2つはユーザーごとに画面の明るさを復元したいときに便利である。残念ながらsystemdにはこれに対応するユニットはない。

バックライトユーティリティ

画面の明るさを調整するユーティリティを以下にまとめた。すべてWaylandと互換性を持ちXを必要としない。いくつか(brightnessctllight)はudev rulesをvideo(または input)グループに追加して明るさを調整する。

  • clight(AUR)
    • Cのデーモン。Xorgのスクリーン温度を管理して一定時間がたったら徐々に画面を暗くする。webcamをライトセンサーに切りかえる。スクリーンの温度との管理と一定時間経過した画面を暗くする.アンビエントライトセンサーに対応。webcamをアンビエントセンサーに切り替えることができる。
  • brillo(AUR)
    • Control the brightness of backlight and keyboard LED devices on Linux.
  • light
    • GNU/Linux application to control backlights
  • acpilight
    • xbacklightの代替
  • brightnessctl
    • A program to read and control device brightness
  • blight(AUR)
    • logind のインターフェイスを使う。ローカルユーザに限定されるが、suidvideogroupのメンバーである必要はない。
  • brightd(AUR)
    • brightd is a daemon which regulates brightness of LCDs dynamically.
  • enlighten-git(AUR)
    • An expressive, sysfs-based backlight brightness manager
  • illum-git(AUR)
    • Daemon that wires button presses to screen backlight level
  • lux(AUR)
    • POSIX Shell script to easily control brightness on backlight-controllers.
  • macbook-lighter(AUR)
    • Macbook の画面とキーボードのバックライトand keyboard backlight on the ambient light
  • wlr-brightness-git(AUR)
    • Adjust the brightness of wlroots-based compositors such as sway.

xbacklight

Xのユーティリティでxbacklightは画面の明るさを設定できる。5

最大の50%の明るさにするには

xbacklight -set 50

すこしずつ照度を上げ下げできる。次の例は10%ずつ照度を上げ下げしている。

xbacklight -inc 10
xbacklight -dec 10

もし"No outputs have backlight progerty"が出たならxrandr/xbacklight/sys/class/backlight以下の正しいディレクトリを選べてないからで、次のルールを作成することで解決できる。6

  • /etc/X11/xorg.onf.d/20-intel.conf
Section "Device"
    Identifier  "Intel Graphics" 
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"
EndSection

インテルのファーストブートを有効にしている場合にもエラーになるかも知れない。その場合は上記の方法はXorgが起動できないかもしれないので、上記の問題が解決するまで待つ必要がある。これはissueが作成されている。

DBusをGnomeと一緒に使う

画面照度はGnomeコントロールを使って調整もできる。変更を反映させるには次のとおり。当然対象になるのはGnomeのUIのみ。

gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.freedesktop.DBus.Properties.Set org.gnome.SettingsDaemon.Power.Screen Brightness "<int32 50>"

キーボードのコントロールは同様に次のように行う。

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

色の補正

色の補正はバックライトの出力ではなくビデオのLUT(LookUpTable)テーブルの調節のみ行う。だからバッテリーの持ち には関係はない。だたバックライトの制御がとれなときはこれは便利である(デクトップPCやOLEDスクリーン7のラップトップなど)。

  • Clight - ディスプレイをフルマネージドするたのデーモン・ユーティリティ。redshiftと同じように現在の時間にあわせて画面の色温度管理を行う。緯度・経度が設定から読みとれなければgeoclueを使って取得しようとする。また日の出入りの時間にも対応している。
  • icc-brightness - ICC色プロファイルをつかってOLEDディスプレイを制御する。
  • Monica - モニター校正ツール。xgammaをgamma補正に変換するためのフロントエンドの役割を果たす。
  • Redshift - 色温度調整ツール。環境にあわせて画面の色温度を調整する。夜間作業自に目への負担を減らせるかもしれない。
  • xcalib - 軽量のモニター校正の設定復元ツール。デスクトップアプリケーション缶でICCモニタプロファイルを共有できる。
  • xgamma - モニターのガンマ補正を変更する。

  1. https://wiki.archlinux.org/index.php/Backlight#ACPI ↩︎

  2. https://wiki.archlinux.org/index.php/Backlight#setpci ↩︎

  3. 詳しくはsystemd-backlight@.service(8)を参照。 ↩︎

  4. 一部のマシンは複数のビデオカードを持っており(例えばOptimus)バックライトの設定の復元が失敗する。対応するサービスを止めておくようにしておく(例えばsystemd-backlight@backlight:acpi_video1acpi_video1に対応するサービスとして) ↩︎

  5. インテルのグラフィックドライバーのみ対応している。 ↩︎

  6. See [FS#27677][https://bugs.archlinux.org/task/27677] and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=651741 for details. ↩︎

  7. Organic Light-emitting Diode(OLEDまたはorganic LED)。有機LED画面のこと。 ↩︎