蜂鸣声在shell脚本中不起作用?


87

我想在shell脚本中使用提示音。不幸的是,我在Google上发现的所有方法都无法满足我的要求。

我试过了

echo -e '\a'

echo -ne '\007'

beep通过apt安装后的命令。

可能是什么原因?



Answers:


93

首先运行sudo modprobe pcspkr,然后beep应该可以工作。

这样做不是因为默认情况下,Ubuntu不再加载会发出哔声的硬件驱动程序。

如果这对您有用,则要启用pcspkr的加载,请永久编辑该/etc/modprobe.d/blacklist.conf文件(gksudo gedit也许使用)并注释掉提示如下的行blacklist pcspkr

#丑陋而响亮的声音,触动所有人的神经;这应该由
#不错的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 2011年

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 2014年

您可能需要在while循环中使用一些读取命令或其他一些可以监视击键的库。
yuvilio 2014年

2
这是一个很好的解决方案!现在,我可以run-my-long-test-suite.sh; beep读取系统中的stackoverflow,直到系统就绪为止。
jamesc 2015年

3
真好!我现在使用export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggalias beep='paplay $BEEP --volume=32768'对我来说效果很好。(请注意,您可以使用beep别名覆盖音量,例如beep --volume=15000以-12dB的音量播放。)
大约

3
播放这些ogg文件可能会导致延迟幅度大于内部PC扬声器的哔哔声。不仅延迟似乎变化很大。我承认大多数人都不在乎,但是当您需要实时或接近实时的响应能力时,PC扬声器可能是可听反馈的最佳选择。
H2ONaCl

21

要永久解决此问题:

  • 运行gconf-editor,如果存在desktop | gnome | peripherals | keyboard | bell_mode设置,则将其从更改offon
  • 运行dconf-editor,如果存在org | gnome | settings-daemon | peripherals | keyboard | bell-mode设置,则将其从更改offon
  • 添加pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.ogg到文件~/.xprofile(你需要gnome-control-center-dataglass.ogg
  • 添加[ "$DISPLAY" ] && xset b 100到文件~/.bashrc

激活此解决方案的最简单方法是重新启动。

此外,要为已经打开的终端窗口立即实施此解决方案,请运行pactl命令并xset在相关的终端窗口中运行命令。


我将pactl upload-sample命令放在shell脚本中,但是您的方法更加井井有条。谢谢!
JoBu1324

如果将pactl命令放入其中,~/.xprofile则它将在GUI会话开始时执行。
jdthood 2012年

该设置的dconf-editor版本bell-mode似乎是org.gnome.settings-daemon.peripherals.keyboard
lgarzo 2013年

@lgarzo:谢谢小费。我将更新答案。
jdthood 2013年

1
@ Hibou57:确保已glass.ogg安装包含软件包
Janus Troelsen 2014年

21

由于这是Google上的一个非常高评分的问题,我将添加我在控制台和X11中重新启用蜂鸣声的步骤:


对于Linux控制台(CTRL+ ALT+ F1... F6):

为什么默认情况下不起作用

正如已经回答的那样pcspkr在Ubuntu中将PC Speaker 的内核驱动程序列入黑名单。

暂时启用直到重启:

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。并且bell.ogg默认情况下,声音样本PulseAudio会发出哔哔声,为空白。此外,铃声音量可能会静音。

要暂时启用当前会话,

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的工作:pcspkrbell.ogg是独立的方法。beep尝试使用各种方法(例如,ioctl(console_fd, KIOCSOUND, period)使用pcspkr(声音来自主板上的PC扬声器)发出蜂鸣声),而printf '\a'基于方法的方法可能不使用它而仅使用bell.ogg(声音来自普通扬声器)。在pulseaudio服务启动和/或xset b on运行之前
jfs

pactl upload-sample ...对我来说是黄金。永久重新配置样品加载的方式是什么?
ulidtko '16

@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

您也可以使用扬声器测试
Janus Troelsen 2014年

1
您还可以使用一个不错的吉他弹奏音:play -q -n synth 2 pluck C5。C5是笔记。
Pablo A

3

我终于找到了一种解决方案,不需要alsamixerPC 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


试了一下,帕克特给了我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 2012年

不错,15.04的行略有不同。
VRR 2015年

2

如果您有与计算机连接的实际扬声器,但没有发出哔声,则可能是因为您正在使用compiz。Compiz依靠Pulseaudio捕捉蜂鸣声并播放蜂鸣声,而metacity绕过常规设置并使用libcanberra播放蜂鸣声。如果它适用于metacity而不是compiz,那是您的问题,否则htorque给出的答案是正确的。



2

只有当您的PC带有扬声器时,蜂鸣器才能工作。许多现代笔记本电脑/小型设备没有。”

尝试播放如下声音: play xxxxx.wav 我发现了一个不错的wav文件,它看起来又短又甜,但是您也可以选择自己的文件。当其他所有方法都失败时,为我工作。


感谢:特里迪加hk_centos


1

一种替代方法-将xterm /控制台设置为“ Visual Bell”,以便在发出蜂鸣声时,窗口仅在短时间内反转其颜色。

我有一个叫做bep的bash函数,可以在命令完成后引起我的注意。

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

并以此方式使用

longrun-command ; beep

0

但是可能要迟到了,对于将来寻找这个的人:

printf '\x07'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.