Ubuntu で ディスプレイの色温度を変更する

ノートPCによってはディスプレイの照度の幅が大きく、もっと暗い画面が欲しいのに...ということがあります。
私の使っている VersaPro"VY12M/C-3"は問題ないのですが、"VK27M/B-G"は室内だと画面が明るすぎます。
まぁ、好みもあるとは思いますが。

そこで、ディスプレイの色温度の変更ができるソフトウェア Redshift を導入してみました。

色温度とは

色温度とは、光の色の尺度です。
電球売り場では、暖色系や寒色系・昼光色・昼白色などと表記されていたりします。

base on 色温度(イロオンド)とは - コトバンク

光の色を数値で表現するもので、単位はK(ケルビン)を使う。
物質を燃やしたとき、高温になるほど炎の色が青くなるように、暖色系は色温度が低く、寒色系の色は色温度が高い。
自然光は、5000K~6000Kで、パソコンのディスプレーは9300Kが標準。

base on 色温度とは - 広告用語 Weblio辞書

タングステン電球(白熱灯)は3200K、蛍光灯は4200K前後、太陽の平均直射光は5400K前後となっている。
また、NTSCでは、色の基準となる白色は6774K(CIE標準光源C)と定めているが、欧米においてはモニターの基準の白色を6500K、日本では9300Kにしている。HDTVは国際的に6500Kである。

色温度調節ソフトウェア

Ubuntu では Redshift が注名なようです。
公式サイトを確認すると、2016年にバージョン1.11がリリースされています。
また、設定ファイルは各自で用意する必要があるようです。

base on Redshift

Download
Latest release is Redshift 1.11 published on 2016-01-02.

Configuration file
You’ll have to create it manually and put it in ~/.config/redshift.conf. The following is an example of a configuration file:

設定ファイル
手動で作成して ~/.config/redshift.conf に入れなければなりません。次に、構成ファイルの例を示します。

構成ファイルの例は下記「設定ファイル作成」に表示します。

Redshift 導入

標準リポジトリから導入可能です。

$ sudo apt-get install redshift-gtk

以下の追加パッケージがインストールされます:
  at-spi2-core avahi-daemon geoclue-2.0 iio-sensor-proxy libavahi-core7
  libdaemon0 libgeoclue-2-0 libnss-mdns python-cairo python-gobject-2
  python-gtk2 python3-xdg redshift
提案パッケージ:
  avahi-autoipd avahi-autoipd | zeroconf python-gobject-2-dbg python-gtk2-doc
以下のパッケージが新たにインストールされます:
  at-spi2-core avahi-daemon geoclue-2.0 iio-sensor-proxy libavahi-core7
  libdaemon0 libgeoclue-2-0 libnss-mdns python-cairo python-gobject-2
  python-gtk2 python3-xdg redshift redshift-gtk
アップグレード: 0 個、新規インストール: 14 個、削除: 0 個、保留: 0 個。

Lubuntu 16.04.4 だと、バージョン1.10になるんですね。
2015.1.4 リリース版です。

$ redshift -V
redshift 1.10

最新版のリリースページを見る限り、セキュリティ絡みの問題はなさそうなのでOKでしょう。

base on Redshift 1.11 released

  • Add option preserve for gamma adjustment methods (randr, vidmode, quartz, w32gdi) to apply redness on top of current gamma correction.
  • Fix #158: Add redshift.desktop file to resolve an issue where Geoclue2 would not allow redshift to obtain the current location (Laurent Bigonville)
  • Fix #263: Make sure that the child process is terminated when redshift-gtk exits.
  • Fix #284: A sample configuration file has been added to the distribution tarball.
  • Fix warning message in redshift-gtk that is some cases caused redshift-gtk to fail (#271) (Christian Stadelmann, Javier Cantero)
  • Fix #174: Use nanosleep() for sleeping to avoid high CPU load on platforms (NetBSD, …) with limitations in usleep() (Piotr Meyer)
  • Various updates to man page and translations.

使い方

ヘルプ

ヘルプを表示すると、引数を確認できます。

$ redshift -help
Usage: redshift -l LAT:LON -t DAY:NIGHT [OPTIONS...]

Set color temperature of display according to time of day.

  -h        Display this help message
  -v        Verbose output
  -V        Show program version

  -b DAY:NIGHT  Screen brightness to apply (between 0.1 and 1.0)
  -c FILE   Load settings from specified configuration file
  -g R:G:B  Additional gamma correction to apply
  -l LAT:LON    Your current location
  -l PROVIDER   Select provider for automatic location updates
        (Type `list' to see available providers)
  -m METHOD Method to use to set color temperature
        (Type `list' to see available methods)
  -o        One shot mode (do not continuously adjust color temperature)
  -O TEMP   One shot manual mode (set color temperature)
  -p        Print mode (only print parameters and exit)
  -x        Reset mode (remove adjustment from screen)
  -r        Disable temperature transitions
  -t DAY:NIGHT  Color temperature to set at daytime/night

The neutral temperature is 6500K. Using this value will not
change the color temperature of the display. Setting the
color temperature to a value higher than this results in
more blue light, and setting a lower value will result in
more red light.

Default values:

  Daytime temperature: 5500K
  Night temperature: 3500K

オプション

よく使う(そして、よく忘れる)オプションを列記します。

  • Redshift オフ(元に戻る)

    $ redshift -x
  • 現在の状態の表示

    $ redshift -p

試してみる

適当(適切)な引数を割り当てて起動してみます。
なお、Redshift 実行時に設定の反映・解除が繰り返されることがあります。
その場合は、前回起動した Redshift が終了していないので「killall redshift」で終わらせてください。

$ redshift -b 0.5:0.3 -r -t 1500:1500 -l 35:139 -m randr -v
Location: 35.00 N, 139.00 E
Temperatures: 1500K at day, 1500K at night
Solar elevations: day above 3.0, night below -6.0
Brightness: 0.50:0.30
Gamma (Daytime): 1.000, 1.000, 1.000
Gamma (Night): 1.000, 1.000, 1.000
Status: Enabled
Period: Daytime
Color temperature: 1500K
Brightness: 0.50

$ killall redshift
redshift: no process found

※Redshift のプロセスが正常終了していると「redshift: no process found」と表示されます

設定ファイル

前述のようにコマンドに引数を与えて使うこともできますが、設定ファイルを作成して使うこともできます。

設定ファイルの作成

設定ファイルは、Redshift 公式ページConfiguration fileに記載があるとおり、「~/.config/redshift.conf」に作成します。
※無いので、新規作成します

~/.config/redshift.conf

公式ページのリファレンスを転載します。
特徴や変更可能な項目としては、

  • 昼・夜ごとに設定ができる
  • ブライトネス(輝度 / きど)の調節
  • ガンマ補正値の設定
  • 昼・夜に関連した緯度経度の設定
  • 適用するディスプレイ番
    などがあります。

ちなみに、ガンマとは中間調(グレー)の明るさを調節するためのもので、補正値として1未満を指定すると暗くなるようです。

base on 第7回 "曲線美"が色再現性の決め手になる?――液晶ディスプレイの「ガンマ」を知ろう | EIZO株式会社

ディスプレイの「ガンマ」とは一体何なのか?
普段の生活で見かけることも少なくないガンマだが、コンピュータの画像処理においては「中間調(グレー)の明るさ」を示す用語として使われるのが一般的だ。

base on ガンマについて - コンポジゴク

色調補正のガンマ
中間調だけを変えるので、白飛びや黒潰れが増えない(クリッピングが発生しない)というメリットがあります。
[レベル補正]のガンマ値は標準で1ですが、2にすると明るくなり、0.5にすると暗くなります。

リファレンス

公式サイトそのままの転載ですが参考までに。
次に、私の設定ファイルを掲載します。

; Global settings for redshift
[redshift]
; Set the day and night screen temperatures
temp-day=5700
temp-night=3500

; Enable/Disable a smooth transition between day and night
; 0 will cause a direct change from day to night screen temperature.
; 1 will gradually increase or decrease the screen temperature.
transition=1

; Set the screen brightness. Default is 1.0.
;brightness=0.9
; It is also possible to use different settings for day and night
; since version 1.8.
;brightness-day=0.7
;brightness-night=0.4
; Set the screen gamma (for all colors, or each color channel
; individually)
gamma=0.8
;gamma=0.8:0.7:0.8
; This can also be set individually for day and night since
; version 1.10.
;gamma-day=0.8:0.7:0.8
;gamma-night=0.6

; Set the location-provider: 'geoclue', 'geoclue2', 'manual'
; type 'redshift -l list' to see possible values.
; The location provider settings are in a different section.
location-provider=manual

; Set the adjustment-method: 'randr', 'vidmode'
; type 'redshift -m list' to see all possible values.
; 'randr' is the preferred method, 'vidmode' is an older API.
; but works in some cases when 'randr' does not.
; The adjustment method settings are in a different section.
adjustment-method=randr

; Configuration of the location-provider:
; type 'redshift -l PROVIDER:help' to see the settings.
; ex: 'redshift -l manual:help'
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.
[manual]
lat=48.1
lon=11.6

; Configuration of the adjustment-method
; type 'redshift -m METHOD:help' to see the settings.
; ex: 'redshift -m randr:help'
; In this example, randr is configured to adjust screen 1.
; Note that the numbering starts from 0, so this is actually the
; second screen. If this option is not specified, Redshift will try
; to adjust _all_ screens.
[randr]
screen=1

個人的サンプルファイル

白熱灯は3200K、蛍光灯は4200K前後ということなので、昼・夜で 4000:3000 にしました。
また、ブライトネス(輝度)も低めに設定し、ガンマ補正値はブルーのみ 0.7 にしています。

[redshift]
;昼の色温度
temp-day=4000
;夜の色温度
temp-night=3000

;色温度の変更方法(0:即時反映、1:段階的に反映)
transition=0

;昼の明るさ
brightness-day=0.7
;夜の明るさ
brightness-night=0.5
gamma=1.0:1.0:0.7

;位置情報を手動で設定(例:東京)
location-provider=manual

[manual]
;緯度
lat=35.68
;経度
lon=139.76

[randr]
;デフォルトは、randr(その他は -m 参照)
;adjustment-method=vidmode
screen=0

設定ファイルの利用

設定ファイル「~/.config/redshift.conf」を作成すると、引数なしで redshift を起動すると読み込んで反映してくれます。

$ redshift 
Using method `randr'.

※設定ファイル作成後でも redshift に引数を指定して実行することが可能です。
(その場合は、もちろん引数が優先されます)。