当前位置: 首页>>技术教程>>正文


sound – 在 shell 脚本中发出哔哔声不起作用?

, ,

问题描述

我想在 shell 脚本中使用哔声。不幸的是,我通过 Google 找到的任何方法都不适合我。

我试过

echo -e '\a'

echo -ne '\007'

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

可能是什么原因?

最佳回答

我不是 pcspkr 哔哔声的粉丝,我使用来自系统声音之一的哔哔声和已安装的pulseaudio 服务器的 paplay 命令。

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

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

然后将其作为命令使用

alias beep='paplay $BEEP'

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

find . | grep treasure ; beep

次佳回答

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

这不是因为默认情况下 Ubuntu 不再加载产生蜂鸣声的硬件驱动程序。

如果这对您有用,那么启用 pcspkr 的加载永久编辑 /etc/modprobe.d/blacklist.conf 文件(可能使用 gksudo gedit)并注释掉 blacklist pcspkr 的行,使其看起来像这样:

# ugly and loud noise, getting on everyone's nerves; this should be done by a
# nice pulseaudio bing (Ubuntu: #77010)
# blacklist pcspkr

第三种回答

由于这是一个在 google 上评分非常高的问题,我将在控制台和 X11 中添加我对 re-enable beep 所做的步骤:


对于 Linux 控制台( CTRL + ALT + F1F6 ):

为什么它默认不起作用

作为 already answered ,PC Speaker 的 pcspkr 内核驱动程序在 Ubuntu 中被列入黑名单。

暂时启用直到重新启动:

sudo modprobe pcspkr

在启动时自动启用:

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

(删除或注释 pcspkr 行,在它前面加上 # )


对于 X11 终端(例如默认的 gnome-terminal )

为什么它默认不起作用

在 X 下,就像使用 Unity、KDE、Gnome Shell 时一样,由于 module-x11-bell 其默认加载在 /usr/bin/start-pulseaudio-x11 处,因此 PulseAudio 会捕获哔声事件。并且声音样本 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 的 system-wide 中添加上述行


要测试它:

printf '\a'

嘟!

beep

嗡嗡声!

第四种回答

要持久解决此问题:

  • 运行 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-dataglass.ogg )

  • [ "$DISPLAY" ] && xset b 100 添加到文件 ~/.bashrc

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

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

第五种回答

我以前遇到过这个问题。据我所知,问题是终端铃试图使内部计算机扬声器响起(如在 old-school 台式机中),但笔记本电脑和一些较新的计算机缺少这样的东西。

我当时找到的唯一解决方案是

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

第六种回答

“只有当您的 PC 具有传统的旧式 “speaker” 时,Beep 才能工作,而且可能大多数(如果不是所有)笔记本电脑和小型设备都没有。

然而,他们通常拥有的是一个声音芯片和一个或多个扬声器,可用于发出您想要的任何声音。

因此,当您没有旧式扬声器硬件时,安装 beep 命令和/或内核模块 pcspkr 的过时建议将永远不会起作用。

相反:当您想要哔哔声时尝试播放这样的声音:

paplay /usr/share/sounds/sound-icons/capital

请注意,这使用了 paplay(脉冲音频播放)命令,它可以与系统上的其他用户级别(用户应用程序)声音更好地混合,而不是旧的 aplay(ALSA 播放)命令,它通常只能同时播放一种声音。但请注意,PulseAudio 调用 ALSA 来实际播放声音。

我之前使用 play 的建议可能仍然有效,但运行其中播放的 SoX 是矫枉过正的。


当所有其他方法都失败时,它对我有用。感谢:tredegar & hk_centos 等。

第七种回答

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

每个 this bug ,运行 pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12291.html,未经允许,请勿转载。