2007/09/10

Linux kernel 2.6 で Beep が鳴らない


先日、CentOS4.5にて、heartbeat/DRBDによるサーバ冗長化の作業がありました。

その際、障害発生によりプライマリサーバからセカンダリサーバに切り替わるときは、音を鳴らして知らせることになりました。

そこで、良くあるBeep音(ピーピーと鳴く、アレです)を鳴らすことにしたのですが、VBのようにBeepというコマンドでもあって簡単に鳴らせるのだろうと思っていたのですが、なかなか鳴らずに躓いてしまったので、メモしておきます。



まず、Beepというコマンドはないのか?と調べたところ、けんども日記: Linux でビープ音を鳴らすにて、紹介されていました。

これをテストマシンのCentOS4.4にて試してみたのですが、別段エラーログもなく、音は鳴りませんでした。



beepコマンド
$ wget http://johnath.com/beep/beep-1.2.2-1.src.rpm
# rpmbuild --rebuild beep-1.2.2-1.src.rpm
# rpm -ihv /usr/src/redhat/RPMS/i386/beep-1.2.2-1.i386.rpm

$ sudo beep -f 2500 -l 240


では、単純にスピーカから音を出すにはどうしたらいいのか?

と、たどり着いたのが、 [BEL] コマンドの終了を音で知らせる

さっそく、

printf "\7"

としましたが、これでも音は鳴らず・・・



これはおかしいと思い、他のマシン(RHEL3)で試してみるとあっさり音が鳴りました。

両サーバの違いは何かと、サウンドの設定等色々調べてみると、結局、Linux kernel 2.6からは、デフォルトでPCスピーカーはOFFになっている。ということでした。

どうりで、kernel 2.4のRHEL3では鳴ったわけです。


# sudo modprobe pcspkr
# printf "\7"
リブート後も有効に
# vi /etc/rc.local
/sbin/modprobe pcspkr


これで、先にインストールしたBeepコマンドでも音がなり、カエルの歌をBeepで演奏することができるようになりましたw



余談ですが、「Linux Beep」で調べると、目的とは逆の「Beepを消す」といったものがガンガンヒットしました。

たまにコンソールから作業するときにTab補完失敗でピーピーうるさい件をどうにかする方法がありました。


LinuxコンソールのBEEP音を消す! (技術メモ)

vi /etc/inputrc

#set bell-style none


これで静かに作業することができます。思わぬ収穫でした。