13
15

More than 5 years have passed since last update.

Linuxでマザーボードのブザーを鳴らす方法

Last updated at Posted at 2018-02-15

古いPCの時から、マザーボード上にはほとんどブザーがついており、BIOSなどが使うことがあります。
そのブザー、「なにかの用途に使えるかも」って思ったりしたことはないですか?
でも調べてみてもあまり有力な情報がありません。(実際、ブザーの需要はないので)
ですが、ちょっとコマンドを打てば、ブザーはLinux上から鳴らせるようになります。

ブザーがあるか調べるには

Ubuntuなどを導入している場合、GRUBなどのブートローダーで、「memtest86+」という項目があると思います。
memtest86+というのはご存知の通り、メモリ診断ツールです。
これを起動するとき、マザーボードにブザーがあると「ピポッ」となるのです。
それを利用して、チェックしてみてください。
※ベルを鳴らすecho -e '\a'というのがありますが、それはPulseAudioなどで模擬的に鳴らしています。

導入方法

ここではUbuntuを前提に説明します。
まず、端末を開いてから

sudo apt install beep

と入力してください。beepというパッケージがインストールされます。
※aptコマンドがエラーになる場合は、従来のapt-getを使ってください。

これで利用可能になりました。

beepコマンドを使う

先ほどのbeepパッケージをインストールすると、beepというコマンドが利用可能になります。
ただ普通にbeepと打つと、440Hzくらいの音がブザーから出ます。
※鳴らない場合は、最後のトラブルシューティングをご覧ください
でもこれだけでは面白くありませんね。
beepコマンドでは、パラメータをいじると、周波数や鳴らす時間も変えることができます。
詳しいヘルプはbeep --helpを実行してください。

周波数を変えるには

周波数を指定するには -f [周波数(Hz)] を指定します。
ただし、大抵の場合は50Hzくらいからしか音は出ません。
何回かbeep -f 200とかbeep -f 1400などとやって遊んでみてください。
ちなみに、beep -f 2000; beep -f 1000を実行すると、なつかしいあの音が出ます。
Pythonで次のようなプログラムを作ると、一気に鳴らせます。

beep.py
#!/usr/bin/python3
import os, time
Hzs = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1500, 2000, 2500]
for i in Hzs:
 os.system("beep -f " + str(i) + " -l 50")

鳴らす時間を変えるには

周波数は変えられるようになりましたが、長さはデフォルトなので「ピーピーピー」とあまりかっこよくありません。
もちろん、変えることができます。-l [長さ(ミリ秒)] で変えられます。
例えばbeep -f 300 -l 2000を実行すると、2秒間鳴りっぱなしになります。
逆にbeep -f 300 -l 100とすれば、「ピッ」という短い音にすることができます。
10ms以下はあまり聞こえません。

まとめ

ブザーを鳴らすにはbeep
周波数を変えるにはbeep -f [周波数(Hz)]
鳴らす時間を変えるにはbeep -l [時間(ミリ秒)]
100Hzを1.5秒鳴らしたいときはbeep -f 100 -l 1500

このコマンドを使って、通知に使ったり、エラー発生時などに鳴らすように工夫してみてください。

トラブルシューティング:beepコマンドで音が鳴らない

筆者も経験していますが、ほとんどのLinuxでは、beepコマンドが使えても鳴らない場合があります。
原因はモジュールが読み込まれていないからです。
ブザーを鳴らすときは、pcspkrというモジュールが仲介しています。そのため、pcspkrがロードされていないと鳴りません。
Ubuntuなどではデフォルトでpcspkrを読み込まない設定になっているので、設定を変える必要があります。
モジュールなどを読み込むかは、/etc/modprobe.d にあるファイル群で管理されています。
そのうちのblacklist.confのブラックリストにpcspkrが登録されているので、コメントアウトしましょう。
nanoエディタが使える人は端末を開き、sudo nano /etc/modprobe.d/blacklist.confを実行し、/etc/modprobe.d/blacklist.confをroot権限で編集してください。
49行目にblacklist pcspkrという行があるはずです。それを#blacklist pcspkrに変えて、保存します。
これにより、PC起動時に自動でpcspkrが読み込まれます。

それから、sudo modprobe pcspkrを実行します。
modprobeコマンドはモジュールを読み込むコマンドです。

これでbeepコマンドでなるようになりました。
それでも鳴らない場合はマザーボードにブザーがないか、壊れています。
またはpcspkrモジュールがI/Oコントローラーとうまく通信できていないとか、ブザーを見つけられなかった、ということかもしれません。

アンロード(無効化)するにはsudo modprobe -r pcspkrとします。
さきほどのブラックリストでコメントアウトしましたが、それを元に戻せばPC起動時にpcspkrは読み込まれません。

13
15
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
13
15