シェルスクリプトのビープ音が機能しない


87

シェルスクリプトでビープ音を使用したいと思います。残念ながら、Googleで見つけた方法はどれも役に立ちません。

私は試した

echo -e '\a'

echo -ne '\007'

そして、beepapt経由でインストールした後のコマンド。

理由は何でしょうか?


このバグレポートを参照してください:bugs.launchpad.net/ubuntu/+source/unity/+bug/769314
Flimm 14

回答:


93

最初に実行してsudo modprobe pcspkrから動作するbeepはずです。

これが行われない理由は、デフォルトでは、Ubuntuがビープ音を発するハードウェアドライバーをロードしないためです。

これがあなたのために働くなら、pcspkrのロードを有効にするには、/etc/modprobe.d/blacklist.confファイルを永久に編集し(gksudo geditおそらく使用して)、blacklist pcspkr次のような行をコメントアウトしてください:

#andい大きな音、みんなの神経に乗る; これは
#nice pulseaudio bing(Ubuntu:#77010)
#ブラックリストpcspkr

3
私がコメントした場合、私はそれを機能させるためblacklist pcspkrにやらなければならないmodprobe -r pcspkr && modprobe pcspkr。また、ビープ音を鳴らすことは、可聴ベルを鳴らすことと同じではないため、askubuntu.com / questions / 22168 / how-do-i-enable-the-terminal-bellはまだ開いている必要があります。
daithib8

3
これは、Ubuntuの14で私のために動作しません
Cerin

90

pcspkrのビープ音のファンではないので、インストールされたpulseaudioサーバーのpaplayコマンドでシステムサウンドのビープ音を使用します。

まず、好きなサウンドを見つけて(たとえば、/ usr / share / soundsを参照して、使用可能なサウンドを探してください)、それへの参照を作成します

export BEEP=/usr/share/sounds/ubuntu/ringtones/Harmonics.ogg

次に、コマンドとして使用可能にします

alias beep='paplay $BEEP'

beep必要なときにいつでも実行できます。たとえば、コマンドが終了したときに警告するには:

find . | grep treasure ; beep

1
誰かが走ったときにこの音を鳴らすことができますかecho -e '\a'
-Flimm 14

whileループの読み取りコマンドや、キーストロークを監視できる他のライブラリが必要になる場合があります。
yuvilio 14

2
これは素晴らしい解決策です!これでrun-my-long-test-suite.sh; beep、システムの準備ができるまでstackoverflow を実行して読み取ることができます。
ジェームズ

3
いいね!私が使用しexport BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggalias beep='paplay $BEEP --volume=32768'今、それは私のためにうまく機能します。(ボリュームをbeepエイリアスで上書きできることに注意してくださいbeep --volume=15000。たとえば、-12dBのボリュームで再生します。)
leftaroundabout

3
これらのoggファイルを再生すると、内部PCスピーカーのビープ音よりも大きなレイテンシーのオーダーが発生する可能性があります。それだけでなく、レイテンシーは非常に変化しやすいようです。ほとんどの人は気にしませんが、リアルタイムまたはほぼリアルタイムの応答性が必要な場合は、PCスピーカーがおそらく可聴フィードバックのための最良のオプションです。
H2ONaCl

21

この問題を永続的に修正するには:

  • 実行gconf-editorし、desktop | gnome | peripherals | keyboard | bell_mode設定が存在する場合は、からoffに変更しますon
  • 実行dconf-editorし、org | gnome | settings-daemon | peripherals | keyboard | bell-mode設定が存在する場合は、からoffに変更しますon
  • pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggファイルに追加します~/.xprofile(に必要gnome-control-center-dataですglass.ogg
  • [ "$DISPLAY" ] && xset b 100ファイルに追加する~/.bashrc

このソリューションをアクティブにする最も簡単な方法は、再起動することです。

さらに、既に開いているターミナルウィンドウに対してこのソリューションをすぐに実装するには、pactlコマンドを実行し、xset問題のターミナルウィンドウでコマンドを実行します。


pactl upload-sampleコマンドをシェルスクリプトに入れましたが、メソッドはより体系化されています。ありがとう!
JoBu1324

あなたが入れた場合pactlにコマンドを~/.xprofileそれGUIセッションの開始時に実行されます。
jdthood

設定のdconf-editorバージョンはのbell-modeようorg.gnome.settings-daemon.peripherals.keyboardです。
lgarzo

@lgarzo:ヒントをありがとう。答えを更新します。
jdthood

1
@ Hibou57:パッケージを含むパッケージがglass.oggインストールされていることを確認してください
Janus Troelsen 14年

21

これはGoogleで非常に高い評価の質問なので、コンソールとX11の両方でビープ音を再度有効にするために行った手順を追加します。


Linuxコンソール(CTRL+ ALT+ F1... F6)の場合:

デフォルトで機能しない理由

すでに答えpcspkrPCスピーカーのためのカーネルドライバは、Ubuntuの中でブラックリストに載っています。

再起動するまで一時的に有効にします。

sudo modprobe pcspkr

起動時に自動的に有効にする:

sudo nano /etc/modprobe.d/blacklist.conf

pcspkr行を削除してコメント行を追加します#


X11端末の場合(デフォルトなどgnome-terminal

デフォルトで機能しない理由

Xの下では、Unity、KDE、Gnome Shellを使用するときのように、ビープイベントはPulseAudioによってキャプチャmodule-x11-bellされます/usr/bin/start-pulseaudio-x11。これは、デフォルトでにロードされます。また、PulseAudioがビープ音で再生するサウンドサンプルbell.oggは、デフォルトでは空白です。さらに、ベルの音量がミュートされる場合があります。

現在のセッションを一時的に有効にするには、

xset b 100  # perhaps not needed, on my system it was 40 by default
pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

で試すことができる他の適切なサンプルがあります。/usr/share/soundsたとえば、/usr/share/sounds/gnome/default/alerts/

beepプログラムは実際には必要ないことに注意してください。ただし、インストールされている場合は、PCスピーカーが使用されます。Xでブザーを有効にできる唯一の方法でした。

sudo apt-get install beep

起動時に自動的に有効にするには、上記の行をに追加する~/.profileか、システム全体で/etc/profile


テストするには:

printf '\a'

ビープ!

beep

バズ!


ブート時にPCスピーカーのビープ音を自動的に有効にするには、/ etc / modprobe.d / blacklist.confのコメントを解除せずに実際にコメントする必要があります(ブラックリストを無効にする必要があります。
z33k

1
どちらのソリューションもUbuntu 16.04で動作します注:pcspkrおよびbell.oggは独立したアプローチです。beepたとえば、ioctl(console_fd, KIOCSOUND, period)使用pcspkr(マザーボード上のPCスピーカーから音が聞こえる)などのさまざまなアプローチを使用してビープ音を鳴らそうとしますが、printf '\a'ベースの方法は、それだけでは使用できませんbell.ogg(音は通常のスピーカーからのものです)。2番目の方法は、pulseaudioサービスが開始および/またはxset b on実行されるまで機能し
-jfs

pactl upload-sample ...私のための黄金のでした。サンプルの読み込みを再度恒久的に設定する方法は何ですか?
ulidtko

@ulidtko:これらの行をに追加する~/.profileか、またはシステム全体で/etc/profile
MestreLion

@MestreLionが間違っています。load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.ogg/etc/pulseaudio/default.pa
ulidtko

15

以前にこの問題に遭遇しました。私が覚えていることから、問題は、ターミナルベルが内部コンピューターのスピーカーを鳴らそうとすることです(古い学校のデスクトップのように)が、ラップトップやいくつかの新しいコンピューターにはそのようなものがありません。

私は一度に見つけた唯一の解決策はしたsudo apt-get install soxし、

play -n synth <duration in seconds> sine <freq in Hz> vol <volume (0-1)>

例えば

 play -n synth 0.1 sine 880 vol 0.5

私の解決策を試してください-それがあなたのために働くかどうかを知りたいです!
JoBu1324

あなたも、このためのスピーカ・テストを使用することができます
ヤヌスTroelsen

1
素敵なギターのプラッキングトーンも使用できますplay -q -n synth 2 pluck C5。C5が注です。
パブロA

3

私はついにalsamixer、PC Beepオプションを必要としないソリューションを見つけました。私は私のすべての変更を覚えていると思います:

以下のコメントを外します/etc/pulse/default.pa

load-sample-lazy x11-bell /usr/share/sounds/ubuntu/stereo/bell.ogg
load-module module-x11-bell sample=bell-windowing-system

このバグごとに、実行pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


これを試してみました、pactlは私に与えてくれましたConnection failure: Connection refused pa_context_connect() failed: Connection refused
YodaDaCoda

たぶん、このスレッドは役立つでしょう-もしあなたがrootとしてpulseaudioを実行したことがあるなら。
JoBu1324

実際、私は別の問題を抱えています。PulseaudioがスローしFailed to open module "module-esound-protocol-unix": file not foundます。私は13.04を実行しているので、おそらくここで議論する価値はありませんが、あなたのソリューションを検証できるようになりたいです。
YodaDaCoda

素晴らしい、15.04のわずかに異なる行。
VRR

2

コンピューターに実際のスピーカーが接続されていて、ビープ音が鳴らない場合は、compizを使用している可能性があります。Compizは、pulsecityがビープ音をキャッチして再生し、metacityが通常のセットアップをバイパスし、libcanberraを使用してビープ音を再生することに依存しています。それがメタシティで動作し、compizではなく問題である場合、それ以外の場合、htorqueの答えはcorrentです。


2

3
ただ:「デフォルトで有効になっていない」壊れたという意味ではありませんし、何の「英雄的な努力は、」必要とされていないmodprobe pcsprk(コンソールで)またはpactl upload-sample ...:) X11にし、迷惑なビープ音が帰ってきた
MestreLion

2

ビープ音は、PCに「スピーカー」が搭載されている場合にのみ機能します。多くの最新のラップトップ/小型デバイスには搭載されていません」。

このようなサウンドを再生してみてください。 短くて甘いと思われるplay xxxxx.wav 素敵なwavファイルを見つけましたが、自分で選択することもできます。他のすべてが失敗したときに私のために働く。


おかげで:tredegarhk_centos


1

別のアプローチ-xterm / consoleを「Visual Bell」に設定して、ビープ音が鳴ったときに、ウィンドウの色が短時間だけ反転するようにします。

コマンドが終了したら注意を引くために、beepというbash関数があります。

beep ()  { while true; do  echo -en '\a'; sleep 1; done }

そして、それはこのように使用されます

longrun-command ; beep

0

将来的にはこれを探している人のために、それは遅くなるかもしれません:

printf '\x07'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.