claude-code-notifier
工作原理 指南 常见问题
◐简体中文
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
开始使用
全部指南

Linux 上的 Claude Code 通知

更新于 2026年10月31日 · 阅读约 6 分钟
本页内容 01Claude Code 自带的通知行为 02安装 notify-send 03Notification hook 04在 Claude 完成时立即得知 05显示真实消息并播放提示音 06没有 notify-send?用转义序列 07notify-send 在 shell 里能用,从 Claude Code 里却不行 08Claude Code Notifier 的定位 09常见问题

在 Linux 上,Claude Code 只在少数终端(如 Ghostty 和 Kitty)里会自己发桌面通知。其他终端下,需要在 ~/.claude/settings.json 里添加一个运行 notify-send 'Claude Code' 'Claude Code needs your attention' 的 Notification hook;如果想在 Claude 完成的第一时间知道,再加一个 Stop hook。notify-send 来自 libnotify(Debian 和 Ubuntu 上的包名是 libnotify-bin),并且需要有正在运行的通知守护进程。GNOME 和 KDE Plasma 自带,无头服务器和 SSH 会话则没有。

01Claude Code 自带的通知行为

当 Claude 完成任务或等待授权、而你看起来不在电脑前时,Claude Code 会触发一个通知事件。根据 Anthropic 的终端配置指南,Ghostty 和 Kitty 会把它变成桌面通知;其他终端,比如 GNOME Terminal、Konsole 或 VS Code 终端,则什么都不显示。

你也可以在任何终端里改用响铃:

{
  "preferredNotifChannel": "terminal_bell"
}

响铃的效果取决于终端和桌面环境,可能是蜂鸣、闪烁,或把窗口标记为紧急。详见终端响铃指南。想要真正的通知,就用 hook。

02安装 notify-send

先检查是否已安装:

notify-send 'Claude Code' 'test'

如果提示找不到命令,就安装它:

sudo apt install libnotify-bin   # Debian, Ubuntu, Mint
sudo dnf install libnotify       # Fedora, RHEL
sudo pacman -S libnotify         # Arch

如果命令能运行但什么都没弹出,说明没有通知守护进程。GNOME、KDE Plasma、Cinnamon 和 Xfce 都自带一个。如果用的是 Sway、i3 或 Hyprland 这类平铺窗口管理器,需要自己安装并启动一个,比如 mako 或 dunst。Wayland 和 X11 都没问题,因为 notify-send 是通过 D-Bus 和守护进程通信的,不直接和显示服务打交道。

03Notification hook

这是 Anthropic hooks 指南里的 Linux 示例。把它加到 ~/.claude/settings.json 里,和已有的配置项并列:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"
          }
        ]
      }
    ]
  }
}

在 Claude Code 里输入 /hooks,就能在 Notification 下看到它。matcher 留空表示对所有通知类型都触发。主要有两种:permission_prompt,在授权请求等待约六秒且你没有输入后触发;idle_prompt,在 Claude 完成约 60 秒后触发。完整列表见 Notification hook 指南。

04在 Claude 完成时立即得知

idle_prompt 会晚一分钟才来。Stop hook 则在 Claude 结束本轮时立即运行,不需要 matcher:

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "notify-send -a 'Claude Code' 'Claude Code' 'Claude has finished'"
          }
        ]
      }
    ]
  }
}

-a 设置守护进程显示的应用名。其他实用选项:-u critical 在大多数守护进程上会让通知一直留在屏幕上,直到你手动关闭;-i dialog-information 可以加个图标。关于这个事件的更多内容,见 Stop hook 指南。

05显示真实消息并播放提示音

hook 会从标准输入收到 JSON,Notification 的输入里有一个 message 字段。用脚本就能显示这段文字并播放提示音。把下面内容保存为 ~/.claude/hooks/notify-linux.sh:

#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
notify-send -a 'Claude Code' 'Claude Code' "$msg"
paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null || true

用 chmod +x ~/.claude/hooks/notify-linux.sh 加上可执行权限,然后把 ~/.claude/hooks/notify-linux.sh 作为 hook 命令。各发行版的软件源里都有 jq。paplay 支持 PulseAudio 以及 PipeWire 的 PulseAudio 兼容层,音效文件来自 freedesktop 声音主题(Debian 和 Ubuntu 上的包名是 sound-theme-freedesktop)。也可以换成任意 .oga 或 .wav 文件。

06没有 notify-send?用转义序列

如果你的终端支持通知转义序列,hook 可以让 Claude Code 帮忙发送。hook 本身没有终端,所以要把序列放在 terminalSequence 字段里返回,由 Claude Code 写入终端。Anthropic 的参考文档列出:Ghostty、urxvt 和 Warp 用 OSC 777,Kitty 用 OSC 99。例如:

#!/bin/bash
body=$(jq -r '.message // "Needs your attention"')
seq=$(printf '\033]777;notify;%s;%s\007' "Claude Code" "$body")
jq -nc --arg seq "$seq" '{terminalSequence: $seq}'

这种方式不需要 Claude Code 所在机器上有守护进程,所以也适用于通过 SSH 连接的远程服务器。

07notify-send 在 shell 里能用,从 Claude Code 里却不行

notify-send 需要你桌面登录会话的 D-Bus 地址。hook 继承 Claude Code 的环境变量,所以从桌面终端启动的 Claude Code 没问题。而通过 SSH、systemd 服务、容器,或在最初由 SSH 启动的 tmux server 里启动的 Claude Code,可能拿不到这个地址,通知也就无处可去。在启动 claude 的同一个 shell 里运行 echo $DBUS_SESSION_BUS_ADDRESS;如果输出为空,这个会话就发不出桌面通知。这些场景可以参考 tmux 指南和 SSH 指南。

08Claude Code Notifier 的定位

人在电脑前时,上面这些 hook 就够用了。但离开座位后它们就通知不到你,而且桌面通知也没法回复 Claude。

Claude Code Notifier 是一个基于 Claude Code hook 的独立工具(由 TouchTap 开发,并非 Anthropic 出品)。它的免费命令行工具 ccn 支持 Mac、Windows 和 Linux。在 Linux 上:

curl -fsSL https://claudecodenotifier.com/install.sh | sh

装了 Node.js 的话也可以用 npx @touchtap/ccn。它会把自己的 hook 配置加到 ~/.claude/settings.json,其他内容保持不动,并留一份备份。之后每当 Claude 完成任务、需要授权或提出问题时,都会弹出 Linux 桌面通知。这部分不需要联网,也不需要手机。每个事件只运行几毫秒,不会有常驻后台的进程。

配对一台 iPhone 或 Android 手机后,同样的事件会以 push 通知的形式发到手机上,即使机器根本没有桌面环境也可以。在手机上可以批准或拒绝授权、选择 Claude 所提问题的答案,并在 Claude 完成后发送下一条指令。手机 App 的相关信息见配对手机、ccn 页面和价格。在 Linux 上,ccn 会把 token 存放在只有你能读取的文件里。

如果装了 ccn,记得删掉自己配置的 notify-send hook,免得收到重复通知。

09常见问题

为什么 notify-send 在终端里能用,在 hook 里却不行?

通常是因为 hook 拿不到 D-Bus 会话地址:Claude Code 是通过 SSH、在容器里,或在一个启动时没有该地址的 tmux server 中启动的。可以改从桌面 terminal 启动 Claude Code,或者改用手机 push。

notify-send 由哪个包提供?

Debian 和 Ubuntu 上是 libnotify-bin,Fedora 和 Arch 上是 libnotify。另外还需要一个通知守护进程,完整的桌面环境都自带。

在 Wayland 上能用吗?

能。notify-send 走的是 D-Bus,所以只要有通知守护进程在运行,在 Wayland 和 X11 上表现一样。

怎么让通知一直显示,直到我看到为止?

给 notify-send 命令加上 -u critical。大多数守护进程会把 critical 级别的通知一直留在屏幕上,直到你手动关闭。

能在无桌面的 Linux 服务器上收到 Claude Code 通知吗?

桌面通知不行,因为根本没有桌面。可以通过 SSH terminal 使用转义序列,或者用 push 服务,比如 ccn 的手机 app。SSH 指南对这几种方案做了对比。

Claude Code Notifier Claude Code 完成任务或需要你介入时,手机会收到 push,你可以直接在手机上批准、拒绝或回复。ccn 命令行工具在 Mac、Windows 和 Linux 上均可免费使用。
下载 iOS 版 下载 Android 版 安装 ccn

相关指南

  • Claude Code Notification hook:何时触发、如何使用Claude Code 的 Notification hook 何时触发,permission_prompt 和 idle_prompt 的含义,它接收的输入,以及为什么会延迟触发。
  • Claude Code Stop hook:在 Claude 完成时执行命令介绍 Claude Code 的 Stop hook 如何工作、接收哪些输入、如何在 Claude 完成时执行命令,以及如何安全地让 Claude 继续工作。
  • 通过 SSH 在远程服务器上接收 Claude Code 通知通过 SSH 在 VPS 或远程服务器上运行 Claude Code,照样能收到通知:用能经 SSH 传回的 terminal 转义序列,或者用 ccn 推送到手机。
  • 在 tmux 或 screen 中运行 Claude Code:从 detached 会话接收通知tmux 或 screen 中的 Claude Code 完成任务或需要你处理时及时收到通知:allow-passthrough、bell 提醒、会话命名,以及 detached 时的手机 push。
claude-code-notifier

Claude Code Notifier 是一款独立的第三方应用,与 Anthropic, PBC 无关联,亦未获其认可或赞助。“Claude”和“Claude Code”是 Anthropic, PBC 的商标。

应用 iOS 应用 Android 应用 适用于 macOS、Windows 和 Linux 的 ccn 全部指南
法律信息 隐私政策 服务条款 其他语言 © 2026 touchtap。保留所有权利。 TouchTap Ltd 注册于英格兰和威尔士,公司编号 13942589。