ホーム

AlertUSB for Linux


 これはLinux版のAlertUSBです。 ログアウト時にUSBメモリの抜き忘れを警告するもので、 公共施設などの不特定多数のユーザが使う端末で役立ちます。


動作

USBメモリが刺さっていなければ、何もしません。 刺さっていると、ビープ音を鳴らしながらコンソールに派手な画面表示を行います。 シェルスクリプトで数十行の、なんの変哲もないプログラムですが、 Windows版との対比で、同等の機能を実現してみました。

純粋にコンソールに出力したい時と、 Xのターミナルエミューレータ上で動作させたい時があるでしょうから、 使い分けができるように2本のスクリプトに分離しています。 1本はUSBメモリが刺さっているかどうかの判定を行い、 もう1本は警告動作を行います。


ダウンロード

いずれも /usr/local/bin/ に保存して chmod +x しておきます。 内容は以下の通りです。

/usr/local/bin/alertusb.sh
#!/bin/sh

OPT=$1
ALERT_CMD=`dirname $0`/alertusb-bell.sh
EXIST=0

# check if USB memory exists
/usr/sbin/lsusb -v 2>&1 | grep -i "Storage"> /dev/null && EXIST=1
# EXIST=1  # for debug

if [ $EXIST = 1 ] ; then
    case $OPT in
        xterm) xterm $ALERT_CMD;;
        gnome) gnome-terminal --disable-factory --hide-menubar --zoom=2 \
                -e $ALERT_CMD;;
        *)     sleep 2; $ALERT_CMD;;
    esac
fi

/usr/local/bin/alertusb-bell.sh
#!/bin/bash

BEEP_CMD="echo -ne '\a'> /dev/console"
#BEEP_CMD=beep

# message & beep
for ((i=1; $i<=10; i++)); do
    eval $BEEP_CMD
    echo "Attention!!: An USB memory is connected."
    for ((j=1; $j<=6; j++)); do
	for ((k=0; $k<$i; k++)); do
	    echo -ne "\033[3${k}mUSB\033[0m "
	    echo -ne "\033[4${k}mmemory\033[0m "
	done
	echo
	usleep 25000
    done
    echo
done

# wait for 5 sec.
for ((i=5; $i>0; i--)); do
    echo -ne "waiting for $i sec.\\r"
    sleep 1
done
echo "                  "


使い方

GDM(Gnomeのログインマネージャ)のログアウトスクリプトなどに実行するよう登録します。 具体的には'/etc/X11/gdm/PostSession/Default'

/usr/local/bin/alertusb.sh gnome

を追記します。 root権限で動作すると、ビープ音を簡単に鳴らせるので、楽ができます。 (GDMはそうなっているようです。) ビープ音を鳴らすコマンドは、スクリプトの先頭部分でシェル変数に登録します。 コマンドはフルパスで記述するのが安心です。 (GDM経由では、PATHの通り方がログインシェルとは異なります。)

Gnomeのメニューからログアウトを選んだ場合は、 当然ながら上で登録したログアウトスクリプトが実行されるのですが、 Gnomeのメニューからシャットダウンを選ぶと、 ログアウトスクリプトは実行されずにシャットダウン動作に入ってしまいます。 なぜかはわかりませんが、バグではなくてGDMの仕様のようですので、工夫が必要です。

シャットダウン時に実行される、サービス停止のスクリプトを借用するのが簡単そうです。 この場合は純粋にコンソールに出力さることにご注意を。 ディストリビューションによって設定ファイルの書き方が異なります。 以下は chkconfig が使える場合の例です。'chkconfig alertusb on' します。

/etc/init.d/alertusb
#!/bin/sh
#
# alertusb      Alert Buzzer for left USB flash memory behind
#
# chkconfig: 345 98 1
# description: Alert Buzzer for left USB flash memory behind

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0

# See how we were called.
case "$1" in
  start)
        ;;
  stop)
        /usr/local/bin/alertusb.sh
        ;;
  *)
        echo $"Usage: $0 {start|stop}"
        RETVAL=3
        ;;
esac

exit $RETVAL


ビープ音回路のないマシン対策

PC/AT規格から実装されてきたハードウェアは、だんだんとレガシー扱いされてきて、 キーボードのPS/2ポートやプリンタのパラレルポートはほぼ姿を消し、 BIOSさえも空前の灯火になっています。 ビープ音回路も、マザーボードメーカーにとっては削除してしまいたいハードウェアの1つのようで、 実際にノートパソコンで省略されている例をよく見かけます。 ボリュームの調節のできないビープ音は、警告音として有用なのですが、 あてにできない時代になってしまいました。

一方で、公共施設のパソコンでサウンドが鳴るとうるさいものです。 YouTubeなどの音声も周囲の人に聞こえないように、 サウンドデバイスのボリュームが0になっているか、 ヘッドフォンが設置されているかの、どちらかになっているでしょう。

このような条件が重なると、AlertUSBの警告音を鳴らす手段がなくなってしまいます。 そこで我々は、警告音を鳴らす専用ハードウェアを設計してみました。 USB接続のデバイスで、普段の操作では鳴らずに、 AlertUSBの警告音のみ鳴るものです。 ただし今のところ、Win版では利用できますが、Linux版からは鳴らすことができません。

なお、音を鳴らすだけであれば、 USB接続の汎用の外部スピーカーを用いることを思いつきますが、 AlertUSBで利用しようとすると不都合があります。 というのも、この手の外部スピーカーは、容易に使えるように、 ドライバ不要でOSのサウンドが鳴るようにしてあります。 つまりAlertUSBの警告音だけでなく、 YouTubeなどの音声が簡単に再生されてしまうということです。 これではヘッドフォンを設置する意味がなくなってしまいます。

類似ソフト


ホーム
土村 展之(tutimura(a)kwansei.ac.jp) '(a)'は'@'に置き換えて
更新日 8/30 13:01, 2014