Linuxでブルーライトカット その2

以前、Linuxでブルーライトカット - turgenev’s blog を書いたときの僕は、xgamma -bgamma 0.7で満足していたようですが、冷静に考えてこれ、ちょっと青い部分がほとんど青くなくなっただけで、めちゃめちゃ青い部分(白い部分など)はそのままなので、やっぱり不満になってきました。

Windowsで出来てるみたいに画面全体が黄色っぽくなる感じでブルーライトを減らしたい。ということで再挑戦しました。

そもそもそういうことがLinuxの機能でできるのかどうかという疑問もありましたが、以前の記事でも言及したRedshiftは起動するとちゃんと画面全体が赤っぽくなります。どうやったらこれができるんだろう、と考えたときにまず思いつくのはソースコードを見ることです。しかし色温度を変更していそうな部分をざっとみても比較的コードの量が多く、そもそも慣れないことなので断念しました。

そこで思いついたのが、もうRedshiftのソースコードはそのまま使ってパラメータだけ変えてビルドしよう、ということです。OSSなので気兼ねなくこういうことができていいですね。

Releases · jonls/redshift · GitHub

からソースコードをダウンロードし、colorramp.cに列挙してある色温度のパラメーターの3700K(なんとなく選んだ)の部分だけを変えて、もともとRGBがそれぞれ1.00000000, 0.80053332, 0.58884417だったのを1.00000000, 0.90053332, 0.58884417に変更し、より「ブルーライトカット」に近い値にしました。あとはCONTRIBUTING.mdに従い、必要なライブラリなどを入れてビルド。普通はrandrモードで動作してるっぽかったのでその関係のもの(libxcbとlibxcb-randrの-devパッケージ)は指示に従って入れました。また./configureのオプションには--enable-randrをつけます。

さて、無事ビルドが終わったら、3700Kを指定されたときだけブルーライトカットっぽくなるredshiftの実行ファイルができているので、あとは~/.config/redshift.confを作成(編集)し

[redshift]
temp-day=3700
temp-night=3700
transition=1
gamma=1.0:1.0:1.0
location-provider=manual
adjustment-method=randr

; The location provider and adjustment method settings
; are in their own sections.
[manual]
lat=35.0
lon=140.0

などと書いておけばredshiftをいつ起動しても(昼夜にかかわらず)ブルーライトカットしてくれます。

redshiftの実行ファイルと同じディレクトリにシェルスクリプトを作成し

#!/bin/sh
cd `dirname $0`
./redshift -x
./redshift -o

などと書き込んでおけば、これを実行するだけで、既に起動していたredshiftなどによる補正をリセットし、ブルーライトカットの状態になります。

このシェルスクリプトへショートカットをlxshortcutで作成し、ついでにログオン時の自動実行にも登録しておきました。

快適です。