linuxでbeep(bell)を鳴らしたい場合・止めたい場合の設定方法をまとめます
beepコマンドで permission errorが出る場合
beepデバイスは,デバイスファイル /dev/input/by-path/platform-pcspkr-event-spkr で管理されています.このファイルはシンボリックリンクです.readlink -f で実際のデバイスファイルを確認します
$ readlink -f /dev/input/by-path/platform-pcspkr-event-spkr
手元の環境では以下の一行が出力されました
/dev/input/event21
このファイル名が実際のデバイスファイルです.とりあえずchmodコマンドでパーミッションを変更します.
$ sudo chmod a+w
これでbeepコマンドで音が出る場合は,パーミッション・アクセス制限の問題です.
通常パーミッションは udev で管理されています.設定ファイルは debianの場合 /lib/udev/rules.d/70-pcspkr-beep.rules になります
この設定ファイルの中身は,debainの場合,以下のようになっています.
# Give write access to the PC speaker to "beep" group so they can run "beep" ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", TAG+="uaccess"
応急措置としては,このファイルを編集して,例えば
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", TAG+="uaccess",MODE="666"
という感じで MODE="666"を追加すれば,パーミッションの問題は回避できます.
システムレベルでbeepを止めたい場合
beepデバイスはカーネルモジュール(Windowsでいうデバイスドライバ)pcspkr が制御しています.
以下のコマンドでモジュールをunloadするとbeep音が出なくなります.
sudo modprobe -r pcskpr
再起動後もbeep音を無効にしたい場合は, pcskpr をブラックリストに入れて,pcskpr がカーネルに組み込まれないようにします.
具体的には,/etc/modprobe.d/nobeep.conf というテキストファイルを作成し,設定として以下の一行を加えます.
blacklist pcspkr
システムレベルでbeepを許可したい場合
音が出ない場合は pcspkr モジュールがロードされているか確認します.
$ /sbin/lsmod |grep pcspkr
pcspkr で始まる行が1行出力されればモジュールはロードされています.
pcspkr 16384 0
モジュールがロードされてない場合は手動でロードしてみます
$ sudo modprobe pcspkr
再度,/sbin/lsmod |grep pcspkr を実行してモジュールがロードされていればOKです
モジュールがロードされない場合は,設定ファイルで pcspkr が無効化されている可能性があります.
設定ファイルは /etc/modprobe.d/ の下にあります.pcspkr を無効化する設定は以下の一行です
blacklist pcspkr
以下のコマンドで blacklist pcspkr の設定を探してみます
$ cd /etc/modprobe.d $ grep pcspkr . -r
設定がある場合は,その一行を削除すればbeep音が鳴るはずです.