Claude Code 音频提示音配置指南
文章目录
- [Claude Code 音频提示音配置指南](#Claude Code 音频提示音配置指南)
-
- 前言
- 前提条件
- [1. 打开 Claude Code 配置文件](#1. 打开 Claude Code 配置文件)
- [2. 添加音频 hooks 配置](#2. 添加音频 hooks 配置)
- [3. 添加自动权限(避免每次弹确认)](#3. 添加自动权限(避免每次弹确认))
- [4. 重启 Claude Code](#4. 重启 Claude Code)
- [5. 验证配置](#5. 验证配置)
- [6. 音效选择指南](#6. 音效选择指南)
- 关键说明
-
- [为什么必须用 `setsid`?](#为什么必须用
setsid?) - [PulseAudio (`paplay`) vs ALSA (`aplay`)](#PulseAudio (
paplay) vs ALSA (aplay)) - 多会话注意
- [为什么必须用 `setsid`?](#为什么必须用
前言
使用 Claude Code 时,最烦人的事情之一就是它经常需要你停下来操作------授权命令、确认执行、等待回复。如果你不盯着屏幕,它就一直卡在那里;如果你盯着屏幕,又浪费了宝贵的摸鱼时间。
Claude Code 提供了 hooks(钩子)机制,可以在特定事件发生时自动执行 shell 命令。利用这个机制,我们可以在 Claude 需要你操作时播放一声提示音,在任务完成时再播放一声,这样你完全可以不用盯着屏幕。
本文介绍如何在 Linux 环境下,使用 Claude Code 原生 hooks 配置音频提示音,无需额外脚本或 Node.js 环境。
前提条件
- Linux 系统,已安装 PulseAudio(Ubuntu 默认自带)
- 已安装 Claude Code CLI
- 系统音效目录存在(
/usr/share/sounds/freedesktop/stereo/)
可以先验证一下音频播放工具是否可用:
bash
# 检查 paplay 是否存在(PulseAudio 的命令行播放工具)
which paplay
# 测试播放一个音效
paplay /usr/share/sounds/freedesktop/stereo/bell.oga
如果能听到叮咚声,说明环境没问题,可以继续下一步。
1. 打开 Claude Code 配置文件
Claude Code 的全局配置文件位于 ~/.claude/settings.json,所有会话都会读取这个文件中的 hooks 配置。
bash
vim ~/.claude/settings.json
如果你之前没有配置过 hooks,文件中可能只有 permissions 等字段,没有 hooks 字段。如果已经有过其他 hooks 配置(比如飞书通知),你可以在现有基础上添加音频 hooks,它们会并行触发,互不影响。
2. 添加音频 hooks 配置
在 hooks 字段中添加 Stop 和 Notification 两个事件。这两个事件的含义:
| 事件 | 触发时机 | 作用 |
|---|---|---|
| Stop | Claude 需要你操作时(等待授权、确认命令等) | 提醒你回来处理 |
| Notification | 任务完成时 | 告诉你事情做完了 |
在 hooks 下添加以下内容:
json
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "setsid paplay /usr/share/sounds/freedesktop/stereo/bell.oga"
}
]
}
],
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "setsid paplay /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga"
}
]
}
]
}
}
各字段说明:
"type": "command"--- 表示执行一个 shell 命令"command"--- 具体要执行的命令setsid--- 让播放进程脱离当前终端的进程组,防止 hook 等待播放结束(必须加,否则会卡住)paplay--- PulseAudio 的命令行播放工具,播放指定的音频文件bell.oga/audio-volume-change.oga--- 音效文件路径,可以替换成你喜欢的音效
如果你的配置文件中已经有其他 hooks,只需在 Stop 和 Notification 数组中追加新的条目即可,例如:
json
{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "your-existing-hook-command" },
{ "type": "command", "command": "setsid paplay /usr/share/sounds/freedesktop/stereo/bell.oga" }
]
}
]
}
}
3. 添加自动权限(避免每次弹确认)
每次触发 hook 时,Claude Code 默认会弹出权限确认框,问你是否允许执行该命令。如果不想每次都手动确认,可以把 paplay 加入自动允许列表。
编辑 ~/.claude/settings.local.json(如果不存在就创建),在 permissions.allow 数组中加入:
json
{
"permissions": {
"allow": [
"Bash(setsid paplay *)"
]
}
}
这个配置的含义是:匹配所有以 setsid paplay 开头的 Bash 命令,自动允许执行,不再弹确认框。
注意 :
settings.local.json不会被同步到其他设备,只影响本机。如果你在多台机器上使用 Claude Code,每台都需要单独配置。
4. 重启 Claude Code
配置修改后,需要重启 Claude Code 才能生效。关闭当前会话,重新启动即可:
bash
# 直接退出当前会话,然后重新启动
exit
claude
5. 验证配置
启动新的 Claude Code 会话后,可以手动触发一下 Stop 事件来验证:
- 在 Claude Code 中输入一个需要授权的命令(比如
rm某个文件),当它弹出确认框时,你应该能听到bell.oga的提示音 - 当 Claude 完成一个较长的任务时,你应该能听到
audio-volume-change.oga的完成音
如果没听到声音,检查以下几点:
- PulseAudio 是否正常运行 :
pactl info | grep "Server Name" - 音效文件是否存在 :
ls /usr/share/sounds/freedesktop/stereo/bell.oga - setsid 是否安装 :
which setsid(通常属于util-linux包,系统自带) - 是否重启了 Claude Code:修改配置后必须重启才生效
6. 音效选择指南
试听方法
系统自带的音效都在 /usr/share/sounds/freedesktop/stereo/ 目录下,可以用以下脚本逐个试听:
bash
for f in /usr/share/sounds/freedesktop/stereo/*.oga; do
echo "$(basename $f)"
setsid paplay "$f"
sleep 2
done
每播放一个会停 2 秒,方便你判断哪个好听。
事件与音效搭配建议
| 事件 | 含义 | 推荐风格 | 当前配置 |
|---|---|---|---|
| Stop | Claude 停下来等你操作 | 清脆短促,提醒你回来 | bell.oga |
| Notification | 任务完成 | 轻快柔和,表示结束 | audio-volume-change.oga |
常用音效速查
| 音效文件 | 描述 | 适合场景 |
|---|---|---|
bell.oga |
叮咚声 | 操作提醒、权限确认 |
audio-volume-change.oga |
音量变化声 | 任务完成、柔和提醒 |
complete.oga |
完成提示音 | 任务结束 |
dialog-warning.oga |
警告声 | 错误、异常 |
dialog-information.oga |
信息提示 | 普通通知 |
message-new-instant.oga |
新消息声 | 新消息到达 |
camera-shutter.oga |
快门声 | 截图、捕获 |
trash-empty.oga |
清空回收站 | 清理完成 |
screen-capture.oga |
截屏声 | 截图相关 |
| 在这里插入图片描述 |
自定义音效
如果系统音效不满足需求,可以使用自己的音频文件。paplay 支持 WAV、OGG、FLAC 等格式:
bash
# WAV 和 OGG 格式直接支持
setsid paplay /path/to/your-sound.wav
setsid paplay /path/to/your-sound.ogg
# MP3 需要先用 ffmpeg 转换为 WAV
ffmpeg -i input.mp3 output.wav
setsid paplay /path/to/output.wav

关键说明
为什么必须用 setsid?
Claude Code 的 hook 机制会等待命令执行完毕后才继续。如果直接运行 paplay,它会同步播放音频,播放期间 hook 一直显示 "running stop hooks" 转圈,直到播放结束才释放。
setsid 的作用是创建一个新的会话(session),让 paplay 进程完全脱离当前终端的进程组。这样 hook 命令会立即返回,界面不会卡住。
如果用 &(后台运行)是不够的,因为 hook 的 shell 仍然会等待所有后台子进程结束。只有 setsid 能真正让进程脱离。
PulseAudio (paplay) vs ALSA (aplay)
| 特性 | paplay (PulseAudio) |
aplay (ALSA) |
|---|---|---|
| 默认安装 | Ubuntu 等主流发行版自带 | 需要安装 alsa-utils |
| 多路混音 | 支持,多个程序可同时播放 | 不支持,同时只能一个程序播放 |
| 桌面环境兼容 | 好,与桌面音量控制集成 | 可能与 PulseAudio 冲突 |
| 延迟 | 略高(经过 PulseAudio 服务) | 更低(直接操作硬件) |
推荐使用 paplay,兼容性更好。
多会话注意
如果你同时运行多个 Claude Code 会话(比如开了多个终端),每个会话完成任务时都会触发 Notification hooks。这意味着你可能会在没有操作的时候听到声音------那是其他会话触发的。
解决办法:关掉不需要的 Claude Code 会话,只保留当前在用的。
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://shandianchengzi.blog.csdn.net/article/details/161525403。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。