我在一天中的随机时间听到 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