LoginSignup
6
2

More than 1 year has passed since last update.

Linuxコンソールでスクリーンセーバー

Last updated at Posted at 2021-11-30

みなさま、お久しぶりの、技術の無駄遣いシリーズです。

なぜスクリーンセーバー?!

うちの会社はセキュリティにも力を入れているのですが、社内のルールに、パスワードによって保護されたスクリーンセーバーを設定する、というのがあります。
ちょっと席を離れたときなどに、他の人に端末の画面を見られるリスクと、操作されるリスクを軽減することが目的だと思われます。

Windowsの場合、スクリーンセーバーの設定に「再開時にログオン画面に戻る」というのがあるので、これを設定しておけば実現できます。

しかし、うちのチームで管理しているパソコンの中にLinuxを入れたデスクトップマシンがあり、しかも、それはGUIを持っていないものでした。
なんとか、社内のセキュリティ要件を満たすべく、いろいろと調べてみました。

やるべきことは?

まず、要件を整理しましょう。やりたいことは、

  • 一定時間が経過したら、スクリーンセーバーを表示してほしい
  • スクリーンセーバー表示後に端末を操作した場合、パスワード入力をさせてほしい

この2点です。

スクリーンセーバーの目的は、CRT画面の焼き付きを防止することではなく、画面を見られないようにすることですので、現在の画面が見えるようなタイプのスクリーンセーバーはNGです。

スクリーンセーバーを探す

実は、探さなくてもLinuxのコンソールには既にスクリーンセーバーが用意されています。
単位は分です。

setterm -blank 10

で10分後に画面が真っ黒になるようなスクリーンセーバーが発動します。

しかし、これ、復帰したときに元の画面が丸見えなんですよね。
これでは、要件を満たしません。

ちょっとググってみると、なんかすごいのがありました。

ソースがいろいろありますが、pipes.shだけ持ってくれば動くようです。
適当に実行権限を付けて/usr/binあたりに置いておきます。

しかし、これは、スクリーンセーバーが動くだけのプログラムで、時間が経過したら起動するようなものではありません。
これについては、後で考えます。

一定時間経過後にログアウトさせる

bashにはTMOUTという環境変数があります。
単位は秒です。
ここで設定した時間が過ぎると、ログアウトされます。
/etc/profileあたりに書いておきましょう。
ついでに、readonlyで変更できないようにしておきます。

/etc/profile
TMOUT=600
readonly TMOUT
export TMOUT

ログアウト時にスクリーンセーバーを動かす

さて、スクリーンセーバーの起動ですが、ログアウト時に実行させると、パスワード付きスクリーンセーバーになって都合がよさそうです。

ログアウト時にはEXITというシグナルが発呼されます。
これをトラップすることにしましょう。

/etc/profile
trap /usr/bin/pipes.sh EXIT

タイムアウトを5秒に設定したら、こんな感じになりました。

screensaver.gif

いい感じです。

コンソール以外では動かないようにする

sshでつないだときとかターミナル側でもパイプが暴れまくってうざいので、コンソールでだけ動くようにしておきます。
最終形はこんな感じです。

etc/profile
if /usr/bin/tty | grep /dev/tty > /dev/null; then
    TMOUT=600
    readonly TMOUT
    export TMOUT
    trap /usr/bin/pipes.sh EXIT
fi

さいごに

セキュリティを担保したいだけなら無理にスクリーンセーバーっぽいのを動かさなくても、ログアウト時に画面をクリアするだけでいいような気もしてきました。
なんか、無駄なことをしたような気がします。

それより、コマンド実行中はタイムアウトされないので、vi開きっぱなしとかはしないようにしないといけませんねぇ。

*本記事は @qualitia_cdevの中の一人、@hirachanさんに書いていただきました。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2