على Linux، لا يرسل Claude Code إشعار سطح مكتب بنفسه إلا في عدد قليل من الـ terminals، مثل Ghostty وKitty. وفي غيرها، أضف إلى ~/.claude/settings.json hook من نوع Notification يشغّل notify-send 'Claude Code' 'Claude Code needs your attention'، إضافةً إلى hook من نوع Stop إن أردت أن تعرف لحظة انتهاء Claude. يأتي notify-send من libnotify (الحزمة libnotify-bin على Debian وUbuntu)، ويحتاج إلى notification daemon قيد التشغيل، وهو متوفر في GNOME وKDE Plasma وغير متوفر في الخوادم بلا واجهة رسومية وجلسات SSH.
01ما يفعله Claude Code تلقائيًا
عندما ينهي Claude مهمة أو ينتظر إذنًا ويبدو أنك غير موجود، يطلق Claude Code حدث إشعار. ويذكر دليل الـ terminal من Anthropic أن Ghostty وKitty يحوّلان هذا الحدث إلى إشعار سطح مكتب؛ أما الـ terminals الأخرى، مثل GNOME Terminal وKonsole و terminal VS Code، فلا تعرض شيئًا.
بدلًا من ذلك، يمكنك طلب جرس (bell) في أي terminal:
{
"preferredNotifChannel": "terminal_bell"
}
يختلف تأثير الجرس باختلاف الـ terminal وبيئة سطح المكتب: فقد يصدر صوتًا، أو يومض، أو يضع علامة «عاجل» على النافذة. يشرح دليل جرس الـ terminal ذلك. وللحصول على إشعار حقيقي، استخدم 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
إذا عمل الأمر دون أن يظهر شيء، فليس لديك notification daemon. تتضمّن GNOME وKDE Plasma وCinnamon وXfce واحدًا. أما مع tiling window manager مثل Sway أو i3 أو Hyprland، فثبّت واحدًا وشغّله بنفسك، مثل mako أو dunst. يعمل كلٌّ من Wayland وX11، لأن notify-send يتواصل مع الـ daemon عبر D-Bus وليس مع خادم العرض.
03Notification hook
هذا مثال Linux من دليل hooks لدى Anthropic. أضفه إلى ~/.claude/settings.json إلى جانب المفاتيح الموجودة لديك:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "notify-send 'Claude Code' 'Claude Code needs your attention'"
}
]
}
]
}
}
اكتب /hooks في Claude Code لتراه مُدرجًا تحت Notification. الـ matcher الفارغ يُطلق الـ hook لكل أنواع الإشعارات. وأهمها permission_prompt، بعد انتظار طلب موافقة نحو ست ثوانٍ دون أن تكتب شيئًا، وidle_prompt، بعد نحو 60 ثانية من انتهاء Claude. تجد القائمة الكاملة في دليل Notification hook.
04اعرف لحظة انتهاء Claude
يتأخر idle_prompt دقيقة كاملة. أما hook Stop فيعمل فور إنهاء Claude لدوره، ولا يحتاج إلى matcher:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "notify-send -a 'Claude Code' 'Claude Code' 'Claude has finished'"
}
]
}
]
}
}
يحدّد -a اسم التطبيق الذي يعرضه الـ daemon. ومن الخيارات المفيدة الأخرى: -u critical يُبقي الإشعار على الشاشة حتى تغلقه في معظم الـ daemons، و-i dialog-information يضيف أيقونة. المزيد عن هذا الحدث في دليل Stop hook.
05عرض الرسالة الفعلية مع صوت
تستقبل hooks بيانات JSON عبر standard input، وتتضمّن مدخلات 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 ومع طبقة PulseAudio في PipeWire، وملف الصوت مأخوذ من freedesktop sound theme (الحزمة sound-theme-freedesktop على Debian وUbuntu). ويمكنك استخدام أي ملف .oga أو .wav تريده.
06لا يوجد notify-send؟ استخدم escape sequence
إذا كان الـ terminal لديك يفهم escape sequences الخاصة بالإشعارات، فيمكن لـ hook أن يطلب من Claude Code إرسال واحدة. لا تملك hooks terminal خاصًا بها، لذا تُعيد الـ sequence في الحقل terminalSequence ويتولى Claude Code كتابتها. يذكر مرجع Anthropic OSC 777 لـ Ghostty وurxvt وWarp، وOSC 99 لـ Kitty. على سبيل المثال:
#!/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}'
لا يحتاج هذا إلى daemon على الجهاز الذي يعمل عليه Claude Code، ولهذا فهو أيضًا الحل المناسب لـ الخوادم البعيدة عبر SSH.
07عندما يعمل notify-send في الـ shell ولا يعمل من Claude Code
يحتاج notify-send إلى عنوان جلسة D-Bus الخاص بتسجيل دخولك إلى سطح المكتب. ترث hooks بيئة Claude Code، لذا لا مشكلة إذا شغّلت Claude Code من terminal على سطح المكتب. أما إذا شُغّل Claude Code عبر SSH، أو من خدمة systemd، أو داخل container، أو داخل خادم tmux بدأ أول مرة من SSH، فقد لا يتوفر له هذا العنوان، فيضيع الإشعار. شغّل echo $DBUS_SESSION_BUS_ADDRESS في الـ shell نفسه الذي تشغّل منه claude؛ فإذا كانت النتيجة فارغة، فلن تظهر إشعارات سطح المكتب من تلك الجلسة. يغطي دليل tmux ودليل SSH هذه الإعدادات.
08أين يأتي دور Claude Code Notifier
تُعد hooks أعلاه خيارًا جيدًا حين تعمل على الجهاز مباشرة. لكنها لا تصل إليك بعد أن تبتعد عن مكتبك، كما أن إشعار سطح المكتب لا يتيح لك الرد على Claude.
Claude Code Notifier أداة مستقلة (من تطوير TouchTap، وليست من Anthropic) مبنية على hooks في Claude Code. أداة سطر الأوامر المجانية الخاصة بها، ccn، تعمل على Mac وWindows وLinux. على Linux:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
أو npx @touchtap/ccn إذا كان لديك Node.js. تضيف الأداة إدخالات hooks الخاصة بها إلى ~/.claude/settings.json دون المساس بأي شيء آخر، وتحتفظ بنسخة احتياطية. ومن ثم تعرض إشعار سطح مكتب في Linux عندما ينتهي Claude أو يحتاج إلى إذن أو يطرح سؤالًا. هذا الجزء لا يحتاج إلى شبكة ولا إلى هاتف. تعمل الأداة بضعة أجزاء من الثانية لكل حدث، ولا يبقى شيء قيد التشغيل في الخلفية.
اربط هاتف iPhone أو Android لتصلك الأحداث نفسها كإشعارات push، حتى على جهاز بلا سطح مكتب إطلاقًا. ومن الهاتف يمكنك منح إذن أو رفضه، واختيار إجابة عن سؤال Claude، وإرسال التعليمة التالية بعد انتهاء Claude. راجع ربط الهاتف وصفحة ccn والأسعار لمعرفة المزيد عن تطبيقات الهاتف. على Linux، يحفظ ccn الـ token الخاص به في ملف لا يقرؤه أحد سواك.
إذا ثبّتَّ ccn، فاحذف hooks notify-send الخاصة بك لتجنّب تكرار الإشعارات.
09الأسئلة الشائعة
لماذا يعمل notify-send في الـ terminal لديّ ولا يعمل في الـ hook؟
غالبًا لا يتوفر لدى الـ hook عنوان جلسة D-Bus، لأن Claude Code شُغّل عبر SSH أو داخل حاوية أو في خادم tmux بدأ دون هذا العنوان. شغّل Claude Code من terminal على سطح المكتب، أو استخدم إشعار push على الهاتف بدلًا من ذلك.
ما الحزمة التي توفّر notify-send؟
الحزمة libnotify-bin على Debian وUbuntu، وlibnotify على Fedora وArch. تحتاج أيضًا إلى خدمة إشعارات (notification daemon)، وهي مضمّنة في بيئات سطح المكتب الكاملة.
هل يعمل هذا على Wayland؟
نعم. يستخدم notify-send نظام D-Bus، لذا يعمل بالطريقة نفسها على Wayland وX11 ما دامت خدمة الإشعارات قيد التشغيل.
كيف أجعل الإشعار يبقى ظاهرًا حتى أراه؟
أضف -u critical إلى أمر notify-send. تُبقي معظم خدمات الإشعارات الإشعارات الحرجة على الشاشة حتى تغلقها بنفسك.
هل يمكنني تلقّي إشعارات Claude Code على خادم Linux بلا واجهة رسومية؟
ليس كإشعارات سطح مكتب، إذ لا يوجد سطح مكتب أصلًا. استخدم escape sequence عبر terminal الخاص بجلسة SSH، أو خدمة push مثل تطبيق الهاتف من ccn. يقارن دليل SSH بين الخيارات.