识别产生声音的应用程序

识别产生声音的应用程序

我在一天中的随机时间听到 Ubuntu 上的通知声音。

检查了常见的嫌疑因素(停用 Thunderbird 中的所有通知、在设置中将所有系统声音静音等)后,我不知道是哪个应用程序导致了这些声音?

声音可能只有 1-2 秒长。因此,在播放声音时无法启动应用程序。记录所有声音输出的最佳方法是什么,以便我可以识别应用程序(并将其停用)?


编辑:

以下是我目前为追查问题所采取的措施:

(1)检查它是否是使用pulseaudio的应用程序:

使用下面@terdon 提供的有用脚本,我可以确认声音是通过 pulseaudio 播放的

(2)检查pulseaudio的应用使用情况

使用此代码片段

$ while true; do p1=$p2; p2=$(pactl list clients | grep application.name);      dwdiff -1 -3 -c <(echo "$p1") <(echo "$p2"); sleep 1; done |  tee sound.log 

我已经确认,播放声音时没有其他应用程序连接到 pulseaudio。因此,声音必须由已连接的应用程序之一播放。

(3)逐个禁用通知

与 pulseaudio 连接的应用程序有:

        application.name = "Login Session 1"
        application.name = "evolution-alarm-notify"
        application.name = "Mutter"
        application.name = "Terminal"
        application.name = "Thunderbird"
        application.name = "Thunderbird"
        application.name = "Zotero"
        application.name = "GNOME Shell Volume Control"
        application.name = "GNOME Volume Control Media Keys"
        application.name = "Firefox"
        application.name = "Firefox"
        application.name = "Firefox"
        application.name = "org.gnome.Nautilus"
        application.name = "pactl"

在通知设置中,我禁用了以下声音通知:

  • 火狐
  • 雷鸟
  • 佐特罗
  • 文件管理器
  • 演化警报通知

但我仍然会偶尔听到声音 - 而且奇怪的是没有任何可见的通知或类似的东西。

如果有人有其他想法如何追踪实际声音输出,我们将非常欢迎。

答案1

我发现监控 pulseaudio 实际接收器的解决方案是:

last=""; while true; do cur="$(pacmd list-sink-inputs)"; if ! [ "$cur" = "$last" ]; then last="$cur"; echo "$(date) $cur"; fi; sleep 1; done | tee sound-inputs.log

事实证明,该声音是由于系统随机识别外部驱动器然后播放声音而引起的/usr/share/sounds/Yaru/stereo/device-added.oga。由于我没有找到一个优雅的解决方案来禁用声音,所以我只是删除了声音文件。

答案2

您可以尝试监控声卡。我不确定这些/dev/snd东西今天是否相关,但把它们包括进去也没什么坏处。试试这个(您可以直接将其复制/粘贴到终端中):

( 
  lsof /dev/snd/* 2>/dev/null | 
    grep -v '^COMMAND' | 
      awk '{print $2}'
  pw-dump | grep -oP 'application.process.id": \K\d+'
) | 
  sort -u | 
   xargs -I{} ps -p {} -o cmd= |
     sort -u

这使用lsof /dev/snd/*pw-dump来获取正在访问声音系统的进程列表。然后,我们解析这两个命令的输出,以便提取进程 ID (PID) 列表,然后将其通过管道传输到xargs并用于运行ps -p $PID,将输出设置为命令名称。然后,这些将通过sort -u,从而得到使用声音的那些命令的名称列表。例如,在我的系统上,我得到:

$ (    lsof /dev/snd/* 2>/dev/null |      grep -v '^COMMAND' |        awk '{print $2}';   pw-dump | grep -oP 'application.process.id": \K\d+'; ) |    sort -u |     xargs -I{} ps -p {} -o cmd= |      sort -u
cinnamon --replace
csd-media-keys
/home/terdon/.local/share/Steam/ubuntu12_32/steam
/opt/brave-bin/brave --type=utility --utility-sub-type=audio.mojom.AudioService --lang=en-US --service-sandbox-type=none --crashpad-handler-pid=794818 --enable-crash-reporter=, --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,2837077814463129096,8659860663691947099,262144
/opt/enpass/Enpass
/opt/spotify/spotify --uri
/usr/bin/pipewire
/usr/bin/pipewire-pulse
/usr/bin/wireplumber
/usr/lib/chromium/chromium --type=utility --utility-sub-type=audio.mojom.AudioService --lang=en-US --service-sandbox-type=none --crashpad-handler-pid=799438 --enable-crash-reporter=,Arch Linux --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,5619683321696231452,8577485665950155815,262144
/usr/lib/xdg-desktop-portal

您可以将其写成一个小脚本:

#!/bin/bash
( 
  lsof /dev/snd/* 2>/dev/null | 
    grep -v '^COMMAND' | 
      awk '{print $2}'
  pw-dump | grep -oP 'application.process.id": \K\d+'
) | 
  sort -u | 
   xargs -I{} ps -p {} -o cmd= |
     sort -u

使其可执行,然后以无限循环的方式运行它,并传递第二个对输出进行重复数据删除的脚本(foo.sh即脚本):

while :; do foo.sh ; sleep 0.1; done | awk '++a[$1]==1'

最后awk确保我们只能看到每个命令名称一次。让它运行一段时间,监视输出,你也许能够找到罪魁祸首。你还可以将输出重定向到文件:

while :; do foo.sh ; sleep 0.1; done | awk '++a[$1]==1' > file

然后用来tail -f file监控,同时仍保留永久记录。

答案3

我遇到了同样的问题,但原因不同。我试图识别的声音是:

  • 声音悦耳,且播放频率高,但随机,所以我确信这是一种警报。
  • 当声音响起时,浏览器选项卡中没有出现“声音图标”。
  • 当声音响起时,任何通知托盘中都没有出现“铃铛图标”。

我尝试了问题本身建议的操作,以及terdon 的回答. 没有快乐。

我的主要线索来自Olf 接受自己的答案,当我去探索/usr/share/sounds/

$ ls -l /usr/share/sounds/Yaru/stereo/
total 760
-rw-r--r-- 1 root root   8078 Jun  9  2023 audio-volume-change.oga
-rw-r--r-- 1 root root  23389 Jun  9  2023 battery-low.oga
-rw-r--r-- 1 root root  15813 Jun  9  2023 bell.oga
-rw-r--r-- 1 root root  48977 Jun  9  2023 complete.oga
-rw-r--r-- 1 root root 159288 Jun  9  2023 desktop-login.oga
-rw-r--r-- 1 root root  73320 Jun  9  2023 desktop-logoff.oga
-rw-r--r-- 1 root root  21799 Jun  9  2023 device-added.oga
-rw-r--r-- 1 root root  20096 Jun  9  2023 device-removed.oga
-rw-r--r-- 1 root root  18476 Jun  9  2023 dialog-error.oga
-rw-r--r-- 1 root root  20936 Jun  9  2023 dialog-question.oga
-rw-r--r-- 1 root root  16992 Jun  9  2023 dialog-warning.oga
-rw-r--r-- 1 root root  19100 Jun  9  2023 message-new-email.oga
-rw-r--r-- 1 root root  20907 Jun  9  2023 message-new-instant.oga
-rw-r--r-- 1 root root  19100 Jun  9  2023 message.oga
-rw-r--r-- 1 root root  21799 Jun  9  2023 power-plug.oga
-rw-r--r-- 1 root root  20096 Jun  9  2023 power-unplug.oga
-rw-r--r-- 1 root root 159288 Jun  9  2023 system-ready.oga
-rw-r--r-- 1 root root  63914 Jun  9  2023 trash-empty.oga

我的想法是逐一播放这些声音,但为每个声音启动整个媒体应用程序(例如 Rhythmbox)会很烦人。

本文给了我我需要的工具:Vorbis。

sudo apt install vorbis-tools
ogg123 trash-empty.oga
ogg123 system-ready.oga
ogg123 power-unplug.oga
Etc, etc ....

原来是我的电源线松了,而它却一次又一次地检测到power-unplug并伴随一个即时事件,而这些事件都是由我在桌子上或桌子上移动重心时触发的!power-plug

相关内容