Hatena::ブログ(Diary)

kazekaoru

2013-02-07

setterm

ほほーー。

setterm -blank 0 > /dev/tty1 < /dev/tty1

という、redirect をつかったハック。
http://serverfault.com/questions/137728/how-do-i-permanently-disable-linuxs-console-screen-saver-system-wide



setterm のソースを見て初めてなっとく。


ソースを見ると、setterm というやつは、こんなことしてた。
例 -blank 0 のとき:
char ioctlarg = TIOCL_UNBLANKSCREEN;
if (ioctl(0,TIOCLINUX,&ioctlarg))



つまり、file descripter 0 (標準入力) に対して、ioctl() でコントロールしていたと。


なので、googleさまで検索するとたまに出てくる
「rc.local に setterm 書いたけど動かない」
というのは、
setterm コマンドを実行している端末(デバイス)と、実際のコンソール画面のデバイスが違う可能性が高い。
どいうことかというと、
boot時には /dev/console を使っているけど、boot完了したら /dev/tty1 をコンソールにする、という場合だ。
このとき、rc.local は /dev/console 上で実行されているわけだから、
setterm が ioctl(0 として見ているのは /dev/console となる。
そりゃ、/dev/tty1 には影響無い。



リダイレクトを使うと、こういう事態を回避できる。
なるほどーーーーーー。



で、
一般的には
/etc/rc.local にでも、
setterm -blank 0 -powerdown 0 -powersave off > /dev/tty1 < /dev/tty1

と書いておけばよい。



が、Ubuntuupstart の場合は、/etc/init/tty1.conf に書くのがよろしかろう、ということらしい。
/etc/init/tty1.conf
post-start exec setterm -blank 0 -powerdown 0 -powersave off > /dev/tty1 < /dev/tty1

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/kaze-kaoru/20130207/1360188547
リンク元