2013年11月28日木曜日

WindowsやMacなら当たり前にできること、それは輝度の維持 [追記あり]

[追記:2014/03/04]

この記事に書いた内容は古くなりました。こちらの記事をお読み下さい。→輝度を維持できるinitスクリプト書きました

[追記おわり]


なんでか知らないですけど出来ないですよね、なんでか知らないですけど。


いや、ディストリビューションによって違うかもしれませんが、少なくともUbuntu13.04やDebian Sidでは勝手にやってくれません。多分。再起動すると輝度がMAXで目が、目がぁ〜状態になるのホント嫌です。

前々から気になっていたので調べたりはしたんですよ?でも輝度のパラメータを決め打ちで起動時に指定するって、全然解決できてないと思うんですよ。

夜中で暗めの明るさで作業していて仕方なく再起動していたら、昼間に使う明るめの明るさで起動されるとか。目がやられます。やっぱり再起動してもそのまま暗めの明るさでいて欲しいんですよ。

そういうことでシャットダウン、再起動の時の時点の輝度をどこかに保存しておいて、ログイン時に復元するという感じに出来ました。(参考:Tips: (Linuxで)コンピュータの終了時にコマンドを実行する - disklessfun’s Wiki*)

まず、xbacklightが必要なので入れて下さい。

# aptitude install xbacklight

次に、シャットダウンか再起動の時に/sys/class/backlight/acpi_video0/brightnessから輝度の数値をとってきて保存、それ以外の時にxbacklightでその数値を指定するシェルスクリプトを書きます。実行権限も付与して下さいね。

/usr/local/bin/save_brightness.sh

#!/bin/sh

BRIGHTNESS=`cat /usr/local/share/backlight/brightness`

if test x$RUNLEVEL = x0 -o x$RUNLEVEL = x6 ; then
 cat '/sys/class/backlight/acpi_video0/brightness' > '/usr/local/share/backlight/brightness'
else
 xbacklight -display ':0.0' -set $BRIGHTNESS
fi

/usr/local/share/backlight/も作っておきます。

# mkdir /usr/local/share/backlight

シャットダウンや再起動する時、つまりランレベルが切り替わる時に実行されて欲しいので、/etc/init.d/rcにスクリプトを書いておきます。PATHを通してあるところ以降に書いて下さい。

/etc/init.d/rc

#! /bin/sh
#
# rc
#
# Starts/stops services on runlevel changes.
#
# Optimization: A start script is not run when the service was already
# configured to run in the previous runlevel.  A stop script is not run
# when the the service was already configured not to run in the previous
# runlevel.
#
# Authors:
#  Miquel van Smoorenburg 
#  Bruce Perens 

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

/usr/local/bin/save_brightness.sh

(後略)

あとは.profileにもスクリプトを実行するように書いておきます。

$ echo '/usr/local/bin/save_brightness.sh' >> ~/.profile

これで終わりです。その時の気分でちょうど良い輝度にして、再起動してみて下さい。ログインした瞬間に暗くなってくれます。

ログイン前から暗くなってくれないと困るという人は、/etc/rc.localに

cat '/usr/local/share/backlight/brightness' > /sys/class/backlight/acpi_video0/brightness
を追加とかすればいいんじゃないかと思います。


これで寝パソが捗ります。では。


[追記:2013/12/03]

程なくsave_brightness.shを修正しました。今度は起動時に輝度が変わるようにしました。色々試しすぎてなんでこれでうまく行かないと思ったのかは謎です。

以前のものではディスプレイマネージャを使ってログインしている場合にしか動かないので、変えたほうが良いと思います。

尚、xbacklightは不要です。

/usr/local/bin/save_brightness.sh

#!/bin/sh

BRIGHTNESS=`cat '/usr/local/share/backlight/brightness'`

if test x$RUNLEVEL = x0 -o x$RUNLEVEL = x6 ; then
 cat '/sys/class/backlight/acpi_video0/brightness' > '/usr/local/share/backlight/brightness'
else
 echo $BRIGHTNESS > '/sys/class/backlight/acpi_video0/brightness'
fi

/etc/init.d/rcは同様に、あと~/.profileではなく/etc/rc.localで実行するようにして下さい。

/etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/local/bin/save_brightness.sh

exit 0

これで終わりです。こっちのほうが色々不自然じゃないと思います。