shell 脚本中的 Beep 不起作用?

shell 脚本中的 Beep 不起作用?

我想在 shell 脚本中使用蜂鸣声。不幸的是,我通过 Google 找到的所有方法都不起作用。

我试过

echo -e '\a'

echo -ne '\007'

beep以及我通过 apt 安装后的命令。

可能是什么原因?

答案1

由于不喜欢 pcspkr 蜂鸣声,我使用已安装的 pulseaudio 服务器的 paplay 命令发出系统声音之一的蜂鸣声。

首先找到你喜欢的声音(例如,你可以浏览 /usr/share/sounds 查找一些可用的声音)并创建对它的引用

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

然后将其作为命令使用

alias beep='paplay $BEEP'

现在,只要您需要它,就可以运行beep。例如,当命令完成时提醒您:

find . | grep treasure ; beep

答案2

第一次运行sudo modprobe pcspkr然后就beep应该可以工作了。

之所以不会出现这种情况,是因为默认情况下 Ubuntu 不再加载产生蜂鸣声的硬件驱动程序。

如果这对你有用,那么为了永久启用 pcspkr 的加载,请编辑该/etc/modprobe.d/blacklist.conf文件(gksudo gedit也许使用)并注释掉blacklist pcspkr如下所示的行:

# 丑陋而嘈杂的噪音,让每个人都心烦意乱;这应该由一个
# 不错的 pulseaudio bing(Ubuntu:#77010)
# 黑名单 pcspkr

答案3

由于这是 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 时,由于module-x11-bell,PulseAudio 会捕获蜂鸣事件,默认情况下它会在 加载/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

嗡!

答案4

要永久修复此问题:

  • 运行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-data需要glass.ogg
  • 添加[ "$DISPLAY" ] && xset b 100到文件~/.bashrc

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

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

相关内容