バックライト
画面の輝度を操作するのは難易度が高いことがしばしばです。多くのマシンでは、物理的なハードウェアスイッチが付いておらず、ソフトウェアによる方法は動いたり動かなかったりとまちまちです。ハードウェアにあった方法を使うようにしてください。画面が明るすぎると眼精疲労を起こす可能性があります。
ソフトウェアを使ってモニターやノートパソコン、統合パネル (iMac など) の画面のバックライトを調整する方法は多数存在します。これらの 議論とこの wiki ページによると、制御方法は次のカテゴリに分類できます。
- 明るさはベンダー指定のホットキーによって制御され、OS が明るさを調整するためのインターフェイスはありません。
- 明るさは、ACPI、グラフィック、またはプラットフォーム ドライバーのいずれかによって制御されます。この場合、バックライト制御は、ユーザー空間の バックライト ユーティリティで使用できる
/sys/class/backlight
を通じてユーザーに公開されます。 - 明るさは、setpci を介してグラフィック カード レジスタに書き込むことによって制御されます。
ハードウェアインターフェイス
ACPI
スクリーンバックライトの明るさはバックライト LED やカソードの電力レベルの設定によって調整されます。電力レベルは大抵の場合ビデオ用の ACPI カーネルモジュールを使用することで操作することが可能です。このモジュールのインターフェイスは sysfs のフォルダ /sys/class/backlight
によって提供されます。
フォルダの名前はグラフィックカードのモデルによります。
# ls /sys/class/backlight/
intel_backlight
この例ではバックライトは Intel のグラフィックカードによって管理されています。ATI のカードでは acpi_video0
と呼ばれます。下の例では acpi_video0
を使っています。
ディレクトリには以下のファイルとフォルダが含まれています:
actual_brightness brightness max_brightness subsystem/ uevent bl_power device/ power/ type
最大輝度は max_brightness
を見ることでわかります、多くの場合15です。
# cat /sys/class/backlight/acpi_video0/max_brightness
15
数値を brightness
に書き込むことで明るさを設定できます。最大輝度よりも高い数値を設定することはできません。
# tee /sys/class/backlight/acpi_video0/brightness <<< 5
カーネルコマンドラインオプション
たまに、マザーボードの実装が ACPI と異なっているために ACPI が上手く動作しないことがあります。これにはデュアルグラフィックのノートパソコンなども含まれます (例: Nvidia/Radeon のディスクリート GPU と Intel/AMD の内蔵 GPU) - この問題が発生するノートパソコンの例として Dell Studio, Dell XPS 14/15/17 や Lenovo のノートパソコンなどが挙げられます。カーネル開発者の Kamal Mostafa がこの問題を解決するパッチを作成しました - パッチは Linux 3.1 から含まれています。さらに、Nvidia-optimus ノートパソコンでは、nomodeset カーネルパラメータがバックライトの調整機能に干渉することがあります。以下のカーネルパラメータをブートローダー (grub, syslinux...) に追加してみてください:
video.use_native_backlight=1
または
acpi_osi=Linux acpi_backlight=vendor
または
acpi_osi=Linux acpi_backlight=legacy
acpi_backlight=vendor は ACPI video.ko ドライバーの代わりにベンダー固有のドライバー (例: thinkpad_acpi, sony_acpi など) を優先して使用します。
Lenovo IdeaPad ノートパソコンの場合、blacklist ideapad_laptop
を /etc/modprobe.d/blacklist.conf
に追加して ideapad_laptop
モジュールをブラックリスト化する必要があるかもしれません (必要に応じてファイルを作成してください)。ソース。
Udev ルール
ACPI インターフェイスが利用できる場合、udev ルールを使って起動時にバックライトのレベルを設定することができます。
/etc/udev/rules.d/81-backlight.rules
# Set backlight level to 8 SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="8"
このルールで値を固定しても、systemd-backlight サービスによって起動時に以前の輝度レベルに戻されます。このルールを使いたいときは、systemd-backlight サービスで説明されているように system-backlight サービスをマスクする必要があります。
setpci
In some cases (e.g. Intel Mobile 945GME [1]), it is possible to set the register of the graphic card to adjust the backlight. It means you adjust the backlight by manipulating the hardware directly, which can be risky and generally is not a good idea. Not all of the graphic cards support this method.
When using this method, you need to use lspci
first to find out where your graphic card is.
# setpci -s 00:02.0 F4.B=0
External monitors
DDC/CI (Display Data Channel Command Interface) can be used to communicate with external monitors implementing MCCS (Monitor Control Command Set) over I2C. DDC can control brightness, contrast, inputs, etc on supported monitors. Settings available via the OSD (On-Screen Display) panel can usually also be managed via DDC. The kernel module i2c-dev
may need to be loaded if the /dev/i2c-*
devices do not exist.
ddcutil can be used to query and set brightness settings:
# ddcutil capabilities | grep "Feature: 10"
Feature: 10 (Brightness)
# ddcutil getvcp 10
VCP code 0x10 (Brightness ): current value = 60, max value = 100
# ddcutil setvcp 10 70
Alternatively, one may use ddcci-driver-linux-dkmsAUR to expose external monitors in sysfs. Then, after loading the ddcci
kernel module, one can use any backlight utility.
バックライトをオフにする
(ノートブックをロックした時などに) バックライトを切ることはバッテリーの節電に役に立ちます。グラフィカルセッションから次のコマンドを実行すればオフにできます:
sleep 1 && xset dpms force off
マウスを動かしたりキーボードで入力したりするとバックライトはまたオンになります。上のコマンドが使えない場合でも、vbetool
が使える可能性があります。ただし、この場合バックライトを戻すには手動で有効にする必要があるので注意してください。コマンドは以下の通りです:
vbetool dpms off
バックライトをもう一度有効にするには:
vbetool dpms on
例えば、Acipd のエントリで書かれているように、ノートパソコンのフタを閉じた時にこのコマンドを使用することが可能です。
systemd-backlight サービス
systemd パッケージにはサービス systemd-backlight@.service が含まれており、デフォルトで有効になっていて"固定"されています。シャットダウン時にバックライトの明るさのレベルを保存して、起動時にそれを復元します。このサービスは #ACPI で説明されている ACPI による方法を使っていて、/sys/class/backlight/
にあるフォルダごとにサービスを生成します。例えば、acpi_video0
という名前のフォルダがあった場合、systemd-backlight@backlight:acpi_video0.service
という名前のサービスを生成します。起動時に他の方法を使ってバックライトを設定するときは、systemd-backlight@.service サービスをマスクすることが推奨されます。
バックライトユーティリティ
xbacklight
xorg-server のコマンド xbacklight
を使ってバックライトを調整することが可能です。このユーティリティは [extra] の xorg-xbacklight パッケージに入っています。
YouTube の gotbletu によってデモンストレーションが投稿されています。彼は以下のコマンドを使ってバックライトを調整することを提案しています:
- 明るくする:
xbacklight -inc 40
- 弱くする:
xbacklight -dec 40
brightnessctl
brightnessctlをインストール後、そのまま使用することができます。
バックライトの輝度を 5% 上げる:
$ brightnessctl set 5%+
バックライトの輝度を 5% 下げる。
$ brightnessctl set 5%-
light
light をインストールし、video
グループにユーザーを追加してください。
バックライトの輝度を 5% 上げる:
$ light -A 5
バックライトの輝度を 5% 下げる。
$ light -U 5
バックライトの輝度を 100% に設定する。
$ light -S 100
relight
relight は Xyne のリポジトリ から利用でき、また、AUR からはパッケージ relightAUR として取得可能です。このパッケージは上記の ACPI による方法を使って、再起動時に以前のバックライト設定を自動的に復元させるサービスを提供します。また、スクリーンごとにバックライトを選択・設定できるダイアログベースのメニューも入っています。
setpci (細心の注意を払って使用してください)
グラフィックカードのレジスタをセットして、バックライトの調整をすることが可能です。ハードウェアを直接操作してバックライトを調整するので、危険性が存在し、あまり勧められる方法ではありません。また、グラフィックカードによってはこの方法をサポートしていません。
この方法を使う際には、まず lspci
を使ってあなたの使っているグラフィックカードの場所を確認する必要があります。
# setpci -s 00:02.0 F4.B=0
Calise
ソフトウェア calise は AUR にあります。
- 安定版: caliseAUR[リンク切れ: パッケージが存在しません]
- 開発版: calise-gitAUR[リンク切れ: パッケージが存在しません]
光センサーを搭載していないノートパソコンのために、ウェブカメラからキャプチャして周りの明るさを計算し、画面のバックライトを設定します。 詳細は calise の wiki を見て下さい: Calise wiki。
このプログラムの主な特徴としては、計算が非常に正確で、リソースの使用量がかなり少なく、デーモンバージョンが存在し (systemd ユーザーのための .service ファイルもあります)、バッテリー持ちにほとんど影響がないことが挙げられます。
brightd
Macbook にインスパイアされた brightdAUR はユーザーの操作がしばらくないと自動的に画面を薄暗くします (スタンバイ状態にはしません)。さっくり画面をオフにする Display Power Management Signaling と上手く併用することができます。
KDE
KDE のユーザーは System Settings > Power Management > Energy Saving からバックライトを調整できます。
kdm よりも前にバックライトを設定したい場合は /usr/share/config/kdm/Xsetup
に次を記述してください:
xbacklight -inc 10
色補正
Wayland
Redshift は Wayland (パッチなし) をサポートしていません。ただし、コンポジタを開始する前に、 tty で目的の温度を適用することは可能です。例:
$redshift-m drm-PO 3000
そうしないと、一部のコンポジタがランタイム中にカラー補正を適用する可能性があります。
- GNOME では、組み込みの 夜間モード を使用できます。
- KDE Plasma では、内蔵の KDE#Night Color を使用できます。
- Sway 1.0 やその他の wlroot ベースのコンポジタは、Orbital や Redshift fork gammastep、clightAUR、wlsunset-gitAUR などと同様に使用できます。
xcalib
AUR にあるパッケージ xcalib (上流のサイト) を使って画面を調光することができます。これも同じく、ユーザーの gotbletu が Youtube にデモンストレーションを投稿しています。このプログラムはガンマ補正と色の反転、コントラストの低減をすることが可能で、ここでは後者を使用します:
- 暗くする:
xcalib -co 40 -a
このプログラムは ICC を使って X11 と通信するので、画面が暗くなっても、マウスカーソルの明るさは変わりません。
Xflux
Xflux は X-Windows system 向けの f.lux ポートです。日中は青に夜は黄色・橙色に画面を変化させることで、一日の流れに画面の輝度を合わせて夜ふかしを止めるのに役立ちます。
AUR には f.lux を使用するためのパッケージがいくつか存在します [5]。「メイン」のパッケージは xfluxAUR で、f.lux のコマンドライン機能を扱います。xflux パッケージの自動起動を行うためのデーモンも様々あります。
redshift
公式リポジトリに入っているプログラム redshift は、時刻と地理情報にあわせて randr
を使って画面の明るさを調整します。RGB ガンマ補正をしたり色温度の設定も可能です。xcalib
と同じように、ソフトウェアによる方法なのでマウスカーソルの見た目は変わりません。明るさのクイック調整を実行するために、次のようなコマンドを使ってみて下さい:
redshift -o -l 0:0 -b 0.8 -t 6500:6500
NVIDIA の設定
NVIDIA のプロプライエタリドライバーを使っている場合、nvidia-settings ユーティリティの "X Server Color Correction" からディスプレイの輝度を変更することができます。ただし、バックライト (の強さ) には全く変更がされないので注意してください、あくまでカラー出力の調整だけが行われます (この方法で明るさを下げても電力効率は良くならないので他の方法が全て使えない時の最後の手段といったところです。明るさを上げると、露出オーバーの写真と同じように、色味が完全に落ちます)。
トラブルシューティング
バックライト PWM 変調周波数 (Intel i915 のみ)
LED バックライトを搭載したノートパソコンではときどき画面にちらつきが発生することが知られています。これは LED の点灯と消灯をヒトの目には識別できない時間で高速に切り替えることで明るさを制御しているためですが、(PWM 変調周期と呼ばれる) 切り替えの周波数が高くないために、はっきり判別できるほどのちらつきが生じたり、人によっては頭痛や眼精疲労の原因になることがあります。
Intel i915 GPU を使っている場合、PWM 変調周期を調整することでちらつきを取り除くことが可能です。
公式リポジトリから intel-gpu-tools をインストールしてください。PWM 変調周期を決めているレジスタの値を取得します:
# intel_reg_read 0xC8254
0xC8254 : 0x12281228
戻り値が PWM 変調の周期を表しています。PWM 変調周期を増加させるには、レジスタの値を減らす必要があります。例えば、上の例から周期を2倍にするには、次を実行します:
# intel_reg_write 0xC8254 0x09140914
オンラインの計算器を使って設定すべき値を計算できます http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html
詳しくは次のトピックを参照してください https://bbs.archlinux.org/viewtopic.php?pid=1245913
Intel GM45 チップセットを使用している場合は 0xC8254 の代わりにアドレス 0x61254 を使用してください。
カーネル 3.13 で Intel チップセットでバックライトが調整できない
以下のファイルを追加すると直ります。
/etc/X11/xorg.conf.d/20-intel.conf
Section "Device" Identifier "Backlight fix" Driver "intel" Option "Backlight" "intel_backlight" EndSection
sysfs を変更しても明るさが変更されない
環境によっては、キーボードの輝度ホットキーで /sys/class/backlight/acpi_video0/actual_brightness
の acpi インターフェイスの値は変更されるのに、画面の輝度が変更されないことがあります。また、デスクトップ環境の輝度アプレットが使えないこともあります。
カーネルパラメータの変更をテストしてみて xbacklight
だけが動作する場合、BIOS とカーネルドライバーの互換性がない可能性があります。
その場合、BIOS や GPU ドライバーのメーカーから修正がリリースされるのを待つしかありません。
応急手段として inotify カーネル api を使って /sys/class/backlight/acpi_video0/actual_brightness
の値が変更されるたびに xbacklight
を実行することができます。
まず inotify-tools をインストールしてください。そして inotify を使用するスクリプトを作成して、自動起動するように設定します。
/usr/local/bin/xbacklightmon
#!/bin/bash max=/sys/class/backlight/acpi_video0/max_brightness level=/sys/class/backlight/acpi_video0/actual_brightness factor=$(awk '{print $1/100}' <<< $(<$max)) xblevel() { awk '{print int($1/$2)}' <<< "$(<$level) $factor"; } xbacklight -set $(xblevel) inotifywait -m -qe modify $level | while read -r file event; do xbacklight -set $(xblevel) done