在 *n*x 面向 GUI 的程序中生成铃声/蜂鸣声的最佳实践

在 *n*x 面向 GUI 的程序中生成铃声/蜂鸣声的最佳实践

我已经设法让自己在其他地方陷入争论,试图阻止某人编写一个调用 aplay 的库,以便让 GUI 程序发出简单的噪音:在文本控制台上由 \a 完成的那种事情

我的理解是,ALSA 作为一个子系统相当普遍,而 libasound.so 作为客户端库似乎可以安装在任何能够运行面向 GUI 的程序的(Linux)主机上,即使它没有完整的桌面环境(即程序依赖于通过 SSH 建立隧道的 X11 等)。

另一方面,我注意到https://www.gnu.org/software/emacs/manual/html_node/elisp/Desktop-Notifications.html这意味着至少 Emacs 能够通过 D-Bus 发出声音警报,并且看起来 KDE 的 konsole 也做了类似的事情,尽管我还没有详细查看消息内部。在这些情况下,我不知道是否可以依赖主题选择的默认警报声音这一事实。

我还没有找到任何等效的东西,例如使用wmctrl。

社区是否认为最佳实践是通过 libasound 与 ALSA 交互,或者实际上是否有更好的方法,例如使用 D-Bus 或其他与桌面环境(窗口管理器等)进行协调的方法?

答案1

没有什么比程序发出你无法控制的声音更烦人的了。如果您想对键入或单击的内容提供即时反馈,请使用视觉内容。在最基本的层面上,相当于终端响铃的 X11 是 function XBell(),它可以在任何 X11 连接上工作。 xkb 添加了更多功能XkbBell()XkbForceBell()

否则,如果您想发出某些后台或长期操作已更改状态的通知,请使用libnotify并让用户配置通知守护程序。

侏儒规格有提示,例如,您可以指定

  • "sound-file" 弹出通知时播放的声音文件的路径, 或者
  • "sound-name" 来自 freedesktop.org 的名为 sound 的主题声音命名规范弹出通知时播放。

但在服务器中实现提示是可选的。测试一下

notify-send --hint string:sound-name:dialog-ok myheader 'my msg'

相关内容