如何模拟PC扬声器?

如何模拟PC扬声器?

我买了一台现代笔记本电脑,它似乎缺少硬件扬声器。是否有一些内核模块可以通过 ALSA 来模拟它?我只能找到一些 90 年代末的非常旧的修补模块,这些模块几乎无法在现代内核版本上运行。

答案1

我在使用廉价的 AMD 迷你电脑时也遇到了同样的问题。我年纪大了,视力不好,所以我喜欢编辑或使用终端时的蜂鸣声。当我在键盘上打瞌睡时,蜂鸣声可以叫醒我:)

与 bodqhrohro 讨论后,他建议我应该在这里回答他的问题。我找到了两种解决方案,但都不是完美的。

我寻找一种方法来恢复蜂鸣声。 Lennart Poettering 在 2002 年使用 LD_PRELOAD 方法编写了 softbeep。我尝试过,但对我来说效果不佳。

然后我发现https://github.com/mozzwald/Fancy-Beeper-Daemon在修补和测试之后,编写了一个 arch linux AUR 将其构建为 dkms 模块。 https://aur.archlinux.org/packages/fancybeep-dkms 我添加了一个简单的 alsa 蜂鸣声程序来创建合理的蜂鸣声。此方法有效,但由于守护程序挂在模块创建的设备之一 (/dev/beep) 上,因此 modprobe -r fancybeep 失败,因为模块正忙。所以你必须先杀死用户空间的蜂鸣守护进程。

我将守护进程更改为在收到 SIGUSR1 信号时发出蜂鸣声,并消除了额外的设备 /dev/beep。该模块有一个参数,守护进程可以将其 PID 发送到该参数。然后,该模块可以在需要发出蜂鸣声时向守护进程发出信号。这种方法https://aur.archlinux.org/packages/alsabeep-dkms也可以,但显然有点不安全,就像守护进程在没有清除模块的 PID 参数的情况下被杀死一样,模块留下的 PID 信号已经过时,可能会成为未来的问题。

我想正确的方法是直接启动守护进程的模块,它可以获取 PID 并使用信号或使用 netlink 来请求蜂鸣声。我还不够核心,无法弄清楚如何做到这一点。

相关内容