コンソールのスクリーンセーバーを切りたい。つまり画面がブラックアウトしないようにしたい。RHEL5 では、/etc/rc.d/rc.local に次の 1 行を入れていた。
setterm -blank 0 -powerdown 0
しかし RHEL6 では動かない。恐らく Upstart になったことで、rc.local を実行する端末が tty1 ではなくなったのだろう。方法は幾つかあるだろうが、次を参考に、
SystemV 形式の init script を登録することにする。端末を明示的に指定しているので、どの端末から実行しようと確実にコンソールに作用する。
/etc/rc.d/init.d/mytty:
#!/bin/bash
# mytty This is the init script for tty configuration
#
# chkconfig: 2345 99 01
# description: Configures tty
# Source function library.
. /etc/rc.d/init.d/functions
# Find the name of the script
NAME=$(basename $0)
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ] ; then
NAME=${NAME:3}
fi
start() {
local errors=0
echo -n "Starting $NAME: "
local term
for term in /dev/tty[1-6] ; do
[ -e "$term" ] || continue
setterm -blank 0 -powerdown 0 >$term <$term || let errors+=1
done
if [ $errors -eq 0 ] ; then
success
else
failure
fi
echo
return $errors
}
# See how we were called.
case "$1" in
start) $1 ;;
*) ! echo "Usage: $0 {start}" ;;
esac
この理屈でいけば、rc.local に次を書くだけでも良いが、
setterm -blank 0 -powerdown 0 >/dev/tty1 </dev/tty1
ファイルを「編集」するよりもファイルを「追加」する方が、私の好み。その方が作業の自動化という面で都合が良い。
「編集」の場合、インストール(追加)は良くてもアンインストール(削除)が難しい。人が手で同種の設定を追加していた場合、それは削除せずにそのまま残すのが望ましい(でないと「勝手に消された」と言われる)が、それを確実に判断する方法がない。「追加」の場合は、追加したファイルを削除するだけで済む。
同様の処理を Upstart (/etc/init)に登録する方法もあるが、わざわざ SystemV (/etc/rc.d/init.d)に登録するのは、RHEL5 でも動くようにするため。
2017-05-09 追記
残念ながら、以上は RHEL7 では動かない。
May 09 16:17:23 rhel7 systemd[1]: Starting SYSV: Configures tty...
May 09 16:17:23 rhel7 mytty[1357]: Starting mytty: setterm: $TERM is not defined.
May 09 16:17:23 rhel7 mytty[1357]: setterm: $TERM is not defined.
May 09 16:17:23 rhel7 mytty[1357]: setterm: $TERM is not defined.
May 09 16:17:23 rhel7 mytty[1357]: setterm: $TERM is not defined.
May 09 16:17:23 rhel7 mytty[1357]: setterm: $TERM is not defined.
May 09 16:17:23 rhel7 mytty[1357]: setterm: $TERM is not defined.
May 09 16:17:23 rhel7 mytty[1357]: [失敗]
May 09 16:17:23 rhel7 systemd[1]: mytty.service: control process exited, code=exited status=6
May 09 16:17:23 rhel7 systemd[1]: Failed to start SYSV: Configures tty.
May 09 16:17:23 rhel7 systemd[1]: Unit mytty.service entered failed state.
May 09 16:17:23 rhel7 systemd[1]: mytty.service failed.
TERM が未定義、と言われて setterm が失敗する。これはオプション -term linux で解決できるが、
May 09 16:25:19 rhel7 systemd[1]: Stopping SYSV: Configures tty...
May 09 16:25:19 rhel7 mytty[3513]: Usage: /etc/rc.d/init.d/mytty {start}
May 09 16:25:19 rhel7 systemd[1]: mytty.service: control process exited, code=exited status=1
May 09 16:25:19 rhel7 systemd[1]: Stopped SYSV: Configures tty.
May 09 16:25:19 rhel7 systemd[1]: Unit mytty.service entered failed state.
May 09 16:25:19 rhel7 systemd[1]: mytty.service failed.
今度はシャットダウン時に未実装の stop を呼ばれて失敗する。なので stop も実装する必要がある。
以下、RHEL7 対応版。
/etc/rc.d/init.d/mytty:
#!/bin/bash
# mytty This is the init script for tty configuration
#
# chkconfig: 2345 99 01
# description: Configures tty
# Source function library.
. /etc/rc.d/init.d/functions
# Find the name of the script
NAME=$(basename $0)
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ] ; then
NAME=${NAME:3}
fi
start() {
local errors=0
echo -n "Starting $NAME: "
local term
for term in /dev/tty[1-6] ; do
[ -e "$term" ] || continue
setterm -term linux -blank 0 -powerdown 0 >$term <$term \
|| let errors+=1
done
if [ $errors -eq 0 ] ; then
success
else
failure
fi
echo
return $errors
}
# See how we were called.
case "$1" in
start) $1 ;;
stop) : ;;
*) ! echo "Usage: $0 {start|stop}" ;;
esac
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。