Linux では、Claude Code が自らデスクトップ通知を送るのは Ghostty や Kitty など一部のターミナルだけです。それ以外の環境では、notify-send 'Claude Code' 'Claude Code needs your attention' を実行する Notification hook を ~/.claude/settings.json に追加してください。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 を使いましょう。
02notify-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 などを自分でインストールして起動する必要があります。notify-send はディスプレイではなく D-Bus 経由でデーモンと通信するため、Wayland でも X11 でも動作します。
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 が空なので、すべての種類の通知で発火します。主なものは、承認待ちのまま約 6 秒入力がなかったときの permission_prompt と、Claude の処理完了から約 60 秒後の idle_prompt です。全種類は Notification hook ガイドに記載されています。
04Claude の完了をすぐに知る
idle_prompt は 1 分遅れて届きます。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 で実行権限を付け、hook のコマンドに ~/.claude/hooks/notify-linux.sh を指定します。jq はどのディストリビューションでもパッケージで入手できます。paplay は PulseAudio でも PipeWire の PulseAudio 互換レイヤーでも動作し、サウンドファイルは freedesktop のサウンドテーマ(Debian や Ubuntu では sound-theme-freedesktop)に含まれています。.oga や .wav なら好きなファイルを使えます。
06notify-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 がシェルでは動くのに Claude Code からは動かない場合
notify-send にはデスクトップログインの D-Bus セッションアドレスが必要です。hook は Claude Code の環境を引き継ぐため、デスクトップのターミナルから Claude Code を起動していれば問題ありません。しかし、SSH 経由、systemd サービス、コンテナ内、あるいは SSH から最初に起動した tmux サーバー内で Claude Code を起動した場合はアドレスがないことがあり、通知はどこにも届きません。claude を起動するのと同じシェルで echo $DBUS_SESSION_BUS_ADDRESS を実行し、空であればそのセッションからのデスクトップ通知は表示されません。こうした構成については tmux ガイドと SSH ガイドで解説しています。
08Claude Code Notifier の位置づけ
マシンの前で作業しているなら、上記の hook で十分です。ただし、席を離れると通知は届きませんし、デスクトップ通知から Claude に返答することもできません。
Claude Code Notifier は、Claude Code の hooks を利用した独立系ツールです(開発は Anthropic ではなく TouchTap)。無料のコマンドラインツール ccn は Mac、Windows、Linux で動作します。Linux の場合:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
Node.js があれば npx @touchtap/ccn でも構いません。~/.claude/settings.json に hook のエントリを追加し、他の設定はそのまま残してバックアップも作成します。以降は、Claude の処理完了時、権限が必要なとき、質問があるときに Linux のデスクトップ通知が表示されます。この機能にはネットワークもスマホも不要です。実行時間はイベントごとに数ミリ秒で、バックグラウンドに常駐するものはありません。
iPhone または Android スマホをペアリングすれば、デスクトップ環境のないマシンでも同じイベントが push 通知で届きます。スマホから権限を許可・拒否したり、Claude の質問への回答を選んだり、処理完了後に次の指示を送ったりできます。スマホアプリについては、スマホのペアリング、ccn のページ、料金を参照してください。Linux では、ccn はトークンを本人だけが読み取れるファイルに保存します。
ccn をインストールする場合は、通知が重複しないよう、自分で設定した notify-send の hook を削除してください。
09よくある質問
notify-send がターミナルでは動くのに hook では動かないのはなぜですか?
多くの場合、hook に D-Bus セッションアドレスがないことが原因です。Claude Code を SSH 経由やコンテナ内、あるいはセッションアドレスなしで起動した tmux サーバー内で起動していると、このようになります。デスクトップの 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 を通じたエスケープシーケンスか、ccn のスマートフォンアプリのような push サービスを使ってください。各方法の比較は SSH ガイドを参照してください。