バックライト

提供: ArchWiki
ナビゲーションに移動 検索に移動

画面の輝度を操作するのは難易度が高いことがしばしばです。多くのマシンでは、物理的なハードウェアスイッチが付いておらず、ソフトウェアによる方法は動いたり動かなかったりとまちまちです。ハードウェアにあった方法を使うようにしてください。画面が明るすぎると眼精疲労を起こす可能性があります。

ソフトウェアを使ってモニターやノートパソコン、統合パネル (iMac など) の画面のバックライトを調整する方法は多数存在しますが、ハードウェアや機種によっては、使用できる方法が制限されることがあります。この記事ではバックライトを調整する方法を全てまとめています。

ノート: Since OLED screens have no backlight, brightness cannot be controlled by changing backlight power on laptops equipped with an OLED screen. In this case, perceived screen brightness can be adjusted with a PWM control (not implemented in the Linux kernel) or via software color correction.

概要

多くの方法で明るさをコントロールすることができます。この議論この wiki ページによれば、コントロール方法は3つのカテゴリに分けることができます:

  • メーカー固有のホットキーで明るさを操作する、明るさを調整する OS のインターフェイスはない
  • OS によって明るさを操作する:
    • ACPI によって明るさを操作する
    • グラフィックドライバーによって明るさを操作する

どの方法も /sys/class/brightness を通して使うことができ、xrandr/xbacklight は1つの方法を選択して明るさをコントロールすることができます。xbacklight がデフォルトでどれを使用するのかはあまりよくわかりません。 xbacklight で "No outputs have backlight property." と表示される場合は FS#27677 を見て下さい。xrandr/xbacklight が /sys/class/brightness の適切なディレクトリを選択しない問題については仮の対処方法があります: xorg.conf で Device セクションの "Backlight" オプションをディレクトリの名前に設定することでディレクトリを指定することができます (詳しくは https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=651741 の一番下を参照)。

  • setpci を使って HW レジスタによって明るさを操作する

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
ノート: このカーネル設定は Linux 3.13 で追加されました。

または

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 モジュールをブラックリスト化する必要があるかもしれません (必要に応じてファイルを作成してください)。ソース

ヒント: Asus のノートパソコンでは次を実行する必要があるかもしれません: # modprobe asus-nb-wmi
ノート: Disabling legacy boot on Dell XPS13 breaks backlight support.

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 サービスをマスクする必要があります。

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

(ノートブックをロックした時などに) バックライトを切ることはバッテリーの節電に役に立ちます。グラフィカルセッションから次のコマンドを実行すればオフにできます:

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
ヒント: Xorg での特別なキーボードキーで説明されているようにしてこれらのコマンドをキーボードのキーに結びつけることが可能です。

power-backlight

電源のタイプにあわせて画面の輝度を設定します。udev ルールを使って電源の変更時にバックライトが調整されます。/sys/class/backlight で ACPI のグラフィックドライバーサポートが必要です。AUR のパッケージ power-backlight-gitAUR[リンク切れ: アーカイブ: aur-mirror] をインストールしてください。

light

Light はディスプレイのバックライトコントローラを制御するためのプログラムです。LightScript の後継であり、公式 C 移植でもあります。

Light のパッケージは AUR に2つあります。最新のタグが付けられたバージョンの light と、機能豊富な最新版の light-gitAUR です。頻繁に git リポジトリにパッチがコミットされているので、最新の機能・バグフィックスを使えるように light-gitAUR パッケージを使用することを推奨します。

詳細は GitHub のページ にあります。

relight

relightXyne のリポジトリ から利用でき、また、AUR からはパッケージ relightAUR として取得可能です。このパッケージは上記の ACPI による方法を使って、再起動時に以前のバックライト設定を自動的に復元させるサービスを提供します。また、スクリーンごとにバックライトを選択・設定できるダイアログベースのメニューも入っています。

setpci (細心の注意を払って使用してください)

グラフィックカードのレジスタをセットして、バックライトの調整をすることが可能です。ハードウェアを直接操作してバックライトを調整するので、危険性が存在し、あまり勧められる方法ではありません。また、グラフィックカードによってはこの方法をサポートしていません。

この方法を使う際には、まず lspci を使ってあなたの使っているグラフィックカードの場所を確認する必要があります。

# setpci -s 00:02.0 F4.B=0

Calise

ソフトウェア calise は AUR にあります。

光センサーを搭載していないノートパソコンのために、ウェブカメラからキャプチャして周りの明るさを計算し、画面のバックライトを設定します。 詳細は 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

そうしないと、一部のコンポジタがランタイム中にカラー補正を適用する可能性があります。

xcalib

AUR にあるパッケージ xcalib (上流のサイト) を使って画面を調光することができます。これも同じく、ユーザーの gotbletu が Youtube にデモンストレーションを投稿しています。このプログラムはガンマ補正と色の反転、コントラストの低減をすることが可能で、ここでは後者を使用します:

  • 暗くする:
xcalib -co 40 -a

このプログラムは ICC を使って X11 と通信するので、画面が暗くなっても、マウスカーソルの明るさは変わりません。

Xflux

Xflux は X-Windows system 向けの f.lux ポートです。日中は青に夜は黄色・橙色に画面を変化させることで、一日の流れに画面の輝度を合わせて夜ふかしを止めるのに役立ちます。

AUR には f.lux を使用するためのパッケージがいくつか存在します [1]。「メイン」のパッケージは xfluxAUR で、f.lux のコマンドライン機能を扱います。xflux パッケージの自動起動を行うためのデーモンも様々あります。

redshift

公式リポジトリに入っているプログラム redshift は、時刻と地理情報にあわせて randr を使って画面の明るさを調整します。RGB ガンマ補正をしたり色温度の設定も可能です。xcalib と同じように、ソフトウェアによる方法なのでマウスカーソルの見た目は変わりません。明るさのクイック調整を実行するために、次のようなコマンドを使ってみて下さい:

redshift -o -l 0:0 -b 0.8 -t 6500:6500
ヒント: 西経や南緯の場合は、負の値で入力してください。例えばカリフォルニア州バークレーならば:
redshift-gtk -l 37.8717:-122.2728 

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 を変更しても明るさが変更されない

ノート: この問題と解決方法は Dell M6700 と Nvidia K5000m (A10 より前の BIOS バージョン), Clevo P750ZM (Eurocom P5 Pro Extreme) と Nvidia 980m で確認済みです。

環境によっては、キーボードの輝度ホットキーで /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