# Backlight (日本語)

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

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

## 概要

多くの方法で明るさをコントロールすることができます。この議論 と この 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です。

    /sys/class/backlight/acpi_video0/max_brightness

    15

数値を `brightness` に書き込むことで明るさを設定できます。最大輝度よりも高い数値を設定することはできません。

    # echo 5 > /sys/class/backlight/acpi_video0/brightness

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

たまに、マザーボードの実装が 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

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

Tip: Also, you can try:

     acpi_osi="!Windows 2012" acpi_backlight=vendor # On some new laptops with pre-installed Windows 8 and/or hybrid graphics
     acpi_backlight=legacy
     acpi_osi=Linux

and all combinations of these lines.

The first line works on asus G750 notebook (keys don't work, only from `/sys/class/backlight/asus-nb-wmi/brightness`. You need to also do

    # modprobe asus-nb-wmi

Tip: If you have got intel_backlight and a manufacturer backlight (Dell, Toshiba, etc.) that stops working after suspend, try:

    acpi_backlight=vendor

and the following X11 quirk (`/etc/X11/xorg.conf.d/80-backlight.conf`):

     Section "Device"
        Identifier  "Intel Graphics"
        Driver      "intel"
        Option      "AccelMethod"     "sna"
        Option      "Backlight"       "intel_backlight" # use your backlight that works here
        Driver      "intel"
        BusID       "PCI:0:2:0"
     EndSection

Note: 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

Tip: Extra Keyboard Keys in Xorg で説明されているようにしてこれらのコマンドをキーボードのキーに結びつけることが可能です。

### xcalib

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

- 暗くする:

    xcalib -co 40 -a

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

### redshift

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

    redshift -o -l 0:0 -b 0.8 -t 6500:6500

Tip: 西経や南緯の場合は、負の値で入力してください。例えばカリフォルニア州バークレーならば:

    redshift-gtk -l 37.8717:-122.2728

### relight

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

### setpci (最善の注意を払って使用してください)

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

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

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

### Calise

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

- 安定版: calise
- 開発版: calise-git

光センサーを搭載していないノートパソコンのために、ウェブカメラからキャプチャして周りの明るさを計算し、画面のバックライトを設定します。 詳細は calise の wiki を見て下さい: Calise wiki。

このプログラムの主な特徴としては、計算が非常に正確で、リソースの使用量がかなり少なく、デーモンバージョンが存在し (systemd ユーザーのための .service ファイルもあります)、バッテリー持ちにほとんど影響がないことが挙げられます。

### brightd

Macbook にインスパイアされた brightd はユーザーの操作がしばらくないと自動的に画面を薄暗くします (スタンバイ状態にはしません)。さっくり画面をオフにする Display Power Management Signaling と上手く併用することができます。

## KDE

KDE のユーザーは System Settings > Power Management > Energy Saving からバックライトを調整できます。 kdm よりも前にバックライトを設定したい場合は `/usr/share/config/kdm/Xsetup` に次を記述してください:

    xbacklight -inc 10

## NVIDIA の設定

NVIDIA のプロプライエタリドライバーを使っている場合、nvidia-settings ユーティリティの "X Server Color Correction" からディスプレイの輝度を変更することができます。ただし、バックライト (の強さ) には全く変更がされないので注意してください、あくまでカラー出力の調整だけが行われます (この方法で明るさを下げても電力効率は良くならないので他の方法が全て使えない時の最後の手段といったところです。明るさを上げると、露出オーバーの写真と同じように、色味が完全に落ちます)。

## バックライト PWM 変調周波数 (Intel i915 のみ)

LED バックライトを搭載したノートパソコンではときどき画面にちらつきが発生することが知られています。これは直流電流を制御することで　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 を使用してください。

Note: Backlight percentages are wrong informed after this manipulation, and Intel developers do not support this (cf. bug 76217).

You can get the right brightness percentage through the following command:

    # intel_backlight

However, xbacklight -inc and -dec will not work as expected

## トラブルシューティング

### カーネル 3.13 で Intel チップセットでバックライトが調整できない

以下のファイルを追加すると直ります。

    /etc/X11/xorg.conf.d/20-intel.conf

    Section "Device"
            Identifier  "Backlight fix"
            Driver      "intel"
            Option      "Backlight"  "intel_backlight"
    EndSection

Categories:

- Laptops (日本語)
- Power management (日本語)