كيف تستخدم Claude Code من هاتفك عبر VPS
شغّل Claude Code داخل tmux على VPS، واستخدم SSH ومفاتيح الدخول وmosh لاتصال ثابت من الهاتف، مع إصلاحات لوحة المفاتيح التي تحتاجها فعلاً.
Claude Code من هاتفك: كيف يعمل فعلياً
يستخدم هذا الدليل تطبيق طرفية على هاتفك. يعمل Claude Code على VPS (خادم خاص افتراضي)، داخل جلسة tmux تظل مفتوحة، ويفتح هاتفك اتصال SSH (صدفة آمنة) بهذه الجلسة ما دمت تنظر إليها. أغلق التطبيق، وسيواصل الوكيل عمله، لأن العملية لم تكن تعمل على الهاتف أصلاً.
يوفّر Claude Code أيضاً Remote Control: شغّل /remote-control داخل جلسة لاستخدامه عبر تطبيق Claude على الهاتف أو عبر متصفح، بينما تظل العملية تعمل على الخادم.
هذا الفصل بين المكونات هو جوهر التصميم. يعلّق نظام تشغيل الهاتف التطبيق بعد ثوانٍ من الانتقال بعيداً عنه، لذلك تتوقف أي مهمة طويلة بدأت على الهاتف. كما يحصل الهاتف على عنوان شبكة جديد في كل مرة تنتقل فيها من wifi إلى بيانات الهاتف. تختفي المشكلتان عندما تعمل العملية على خادم، ويكتفي الهاتف بعرض الشاشة.
تحتاج إلى أربعة أشياء على الخادم: tmux للحفاظ على الجلسة، ومفاتيح SSH لتسجيل الدخول، وmosh للتعامل مع تغيّر الشبكة، وClaude Code نفسه. أما في الهاتف، فتحتاج إلى تطبيق طرفية واحد يتضمن صف مفاتيح يمكنك الوصول إليه.
ما تحتاج إليه على VPS
يكفي خادم Ubuntu 24.04 صغير لأجزاء SSH وtmux. أما Claude Code فيتطلب المزيد. المتطلبات الرسمية اعتباراً من October 2026 هي Ubuntu 20.04 أو أحدث على معالج x64 أو ARM64، مع 4 GB من RAM أو أكثر. يحتاج Claude Code أيضاً إلى حساب Claude مدفوع (Pro أو Max أو Team أو Enterprise)، أو حساب Console مع إمكانية الوصول إلى API، أو الوصول عبر موفّر سحابي مدعوم مثل Amazon Bedrock، لأن خطة Claude.ai المجانية لا تتضمنه.
أعدّ الخادم كمستخدم عادي لديه sudo، وليس كـroot. إذا كان الخادم جديداً، نفّذ أولاً الدقائق العشر الأولى على VPS جديد، لأن تغييرات SSH اللاحقة في هذا الدليل تصبح أسهل بعد إنشاء المستخدم والجدار الناري.
sudo apt update && sudo apt install -y tmux mosh
curl -fsSL https://claude.ai/install.sh | bash
claude --versionيضع المثبّت الملف التنفيذي في ~/.local/bin/claude، ويطبع claude --version سطراً مثل 2.1.211 (Claude Code). إذا طبع command not found، فهذا الدليل ليس موجوداً في PATH لديك بعد: سجّل الخروج، ثم سجّل الدخول مجدداً، وبعد ذلك تحقّق باستخدام command -v claude. يطبع claude doctor تشخيصات التثبيت والإعدادات من دون بدء جلسة.
سجّل الدخول مرة واحدة الآن من حاسوب محمول، قبل الاعتماد على الهاتف. شغّل claude داخل دليل مشروع واتبع مطالبة تسجيل الدخول. تطلب العملية فتح URL في متصفح وإعادة code إلى الطرفية، والتبديل بين تطبيقين على شاشة الهاتف لتنفيذ ذلك بطيء. نفّذها مرة واحدة باستخدام لوحة مفاتيح فعلية، وستبقى بيانات الاعتماد على الخادم.
شغّل Claude Code داخل tmux حتى لا يؤدي انقطاع الاتصال إلى إيقافه
tmux new -s claude
cd ~/projects/api
claudeافصل الجلسة باستخدام Ctrl-b ثم d. يطبع tmux [detached (from session claude)] ويعيدك إلى الصدفة. يمكنك الآن إغلاق التطبيق أو فقدان الإشارة أو وضع الهاتف في جيبك. سيواصل الجزء تشغيله.
tmux ls
tmux attach -t claudeيطبع tmux ls سطراً واحداً لكل جلسة، مثل claude: 1 windows (created Thu Jul 30 09:14:02 2026). يعيدك tmux attach -t claude إلى الموضع الذي تركته فيه تماماً، بما في ذلك التعديل غير المكتمل.
يعمل ذلك لأن tmux يشغّل عملية خادم مستقلة، وتكون الصدفة وClaude Code أبناءً لذلك الخادم، لا أبناء sshd. عند انتهاء اتصال SSH، ترسل النواة إشارة التعليق، SIGHUP، إلى العمليات المرتبطة بذلك الاتصال، ولا يكون خادم tmux من بينها. من دون tmux، يؤدي قفل الشاشة نفسه الذي يقطع اتصالك إلى إيقاف Claude Code أثناء تنفيذ استدعاء أداة. يشرح تشغيل Claude Code على VPS داخل tmux تخطيط الجلسة بمزيد من التفصيل.
شغّل tmux على الخادم، وليس على الهاتف. تؤدي كتابة tmux داخل جلسة متصل بها بالفعل إلى طباعة sessions should be nested with care, unset $TMUX to force، كما أن فرض ذلك يترك لديك مفتاحي بادئة يتنافسان.
إرفاق الجلسة تلقائياً عند كل تسجيل دخول
تكرار كتابة أمر الإرفاق باستخدام لوحة مفاتيح لمسية يصبح مزعجاً. أضف هذا في نهاية ~/.profile على الخادم:
if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ] && [ -t 1 ]; then
exec tmux new-session -A -s claude
fiيُرفق new-session -A -s claude بالجلسة المسماة claude إذا كانت موجودة، وينشئها إذا لم تكن موجودة، لذلك يغطي أمر واحد الحالتين. يستبدل exec shell تسجيل الدخول بـtmux، لذلك يؤدي الخروج من tmux إلى إغلاق الاتصال بدلاً من إرجاعك إلى موجه أوامر فارغ. عندما تحتاج إلى shell عادي، تخطَّ الملف باستخدام: ssh you@server -t "bash --noprofile".
ضعه في ~/.profile وليس في ~/.bashrc. يقرأ Bash أيضاً ~/.bashrc لأوامر SSH غير التفاعلية، لكن الحارس [ -t 1 ] أعلاه يمنع هذه الكتلة من تشغيل tmux أثناء نقل الملفات. تؤدي أوامر بدء التشغيل غير المحمية التي تطبع مخرجات إلى كسر بروتوكولات النقل، وتظهر أخطاء مثل Received message too long. يعمل ~/.profile مع shells تسجيل الدخول فقط، وهذا هو نوع جلسة SSH التفاعلية.
يُستخدم ~/.profile أيضاً في الموضع الذي يضيف فيه Ubuntu ~/.local/bin إلى PATH. إذا كان claude يعمل مباشرة بعد تسجيل الدخول، لكن shell داخل tmux يعرض command not found، فهذا الترتيب هو السبب. لذلك شغّل tmux من shell تسجيل دخول كما سبق، بدلاً من تشغيله من script يتخطى profile.
iOS: Termius أو Blink Shell
يدعم كلا التطبيقين SSH وmosh، ويخزّنان المفاتيح داخل التطبيق. ويكمن الفرق في الواجهة.
يعتمد Blink Shell على الأوامر. عند ظهور المطالبة، اكتب ssh you@server أو mosh you@server، باستخدام الصياغة نفسها الموجودة في الطرفية على سطح المكتب. افتح الإعدادات بكتابة config، ثم أنشئ زوجاً من المفاتيح من قسم Keys.
يعتمد Termius على النماذج. املأ إدخال المضيف، ثم غيّر اتصال ذلك المضيف من SSH إلى Mosh ضمن تفاصيل المضيف. يتضمن Termius تطبيقاً خاصاً به لـmosh، ويدعم mosh 1.3.0 والإصدارات الأحدث، لذلك يجب أن تكون حزمة mosh مثبّتة على الخادم.
أنشئ المفتاح داخل التطبيق في كلتا الحالتين، ولا تنسخ مفتاحاً خاصاً موجوداً إلى الهاتف. يعرض التطبيق الجزء العام من المفتاح، وهو السطر الوحيد الذي تضيفه إلى ~/.ssh/authorized_keys على الخادم. يشرح مفاتيح SSH لكل جهاز وكيفية إلغاء أحدها طريقة التسمية وخطوة الإلغاء، وهي أهم للهاتف منها للحاسوب المحمول.
فعّل قفل التطبيق الطرفي نفسه باستخدام القياسات الحيوية أو رمز المرور. من دونه، يصبح الهاتف غير المقفل shell مفتوحاً على خادمك طوال بقاء الشاشة قيد التشغيل.
Android: Termux
pkg upgrade
pkg install openssh mosh
ssh-keygen -t ed25519 -C "pixel"
cat ~/.ssh/id_ed25519.pubتوفّر Termux حزمتي OpenSSH وmosh في مستودعها الخاص، لذلك تعمل ssh وssh-keygen وmosh كما تعمل على جهاز مكتبي. أضف سطر المفتاح العام المطبوع إلى ~/.ssh/authorized_keys على الخادم، ثم اتصل باستخدام mosh you@server.
لا تحتوي لوحة المفاتيح الظاهرة على شاشة Android على مفتاح Esc أو مفتاح Ctrl، ويحتاج Claude Code إلى كليهما. يستطيع Termux عرض صف مفاتيح خاص به. أضف سطراً واحداً إلى ~/.termux/termux.properties:
extra-keys = [['ESC','|','/','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]ثم شغّل termux-reload-settings، وسيظهر الصف فوق لوحة المفاتيح. يحمّل الأمر نفسه عند إعادة التحميل أيضاً خط TrueType أحادي المسافة إذا وضعته في ~/.termux/font.ttf.
قد يوقف Android تطبيق Termux عندما يبقى في الخلفية، ولا يترتب على ذلك هنا سوى إعادة الاتصال. تبقى الجلسة والوكيل على الخادم.
لماذا تتجمد الطرفية عند مغادرة شبكة wifi، وما المشكلة التي يحلها mosh؟
اتصال SSH هو اتصال TCP (بروتوكول التحكم في الإرسال)، ويُحدَّد اتصال TCP بالعنوانين والمنفذين معاً. عندما تخرج من نطاق wifi، يحصل الهاتف على عنوان جديد من شبكة الهاتف المحمول، لذلك لا يعود الاتصال القديم مطابقاً لأي طرف. لا يُعلَن عن ذلك بأي طريقة. تتوقف الطرفية ببساطة عن الاستجابة إلى أن يتخلى TCP عن الاتصال، ثم يطبع ssh الرسالة client_loop: send disconnect: Broken pipe. لإنهاء جلسة متجمدة فوراً، اضغط Enter، ثم ~، ثم ..
يزيل mosh (قشرة الهاتف المحمول) هذا النوع من الأعطال. يستخدم SSH مرة واحدة لتسجيل الدخول وبدء عملية mosh-server، ثم يقرأ منفذ UDP (بروتوكول مخططات بيانات المستخدم) الذي اختاره الخادم، ويغلق اتصال SSH. بعد ذلك، يتبادل الطرفان مخططات UDP للمستخدم موثَّقة بمفتاح جلسة مشترك، لذلك تُحدَّد الجلسة بهذا المفتاح لا بعنوانك. ويستمر الاتصال عند تغيّر العنوان. يعرض mosh أيضاً ما تكتبه محلياً ويعيد رسم الشاشة عندما يختلف الخادم معه، ولذلك يظل قابلاً للاستخدام عبر اتصال محمول بطيء.
يستخدم mosh منفذاً من 60000 إلى 61000 عبر UDP، لذلك افتح هذا النطاق:
sudo ufw allow 60000:61000/udp
sudo ufw statusفتح المنافذ باستخدام ufw يوضّح بقية إعدادات الجدار الناري. إذا كان مزود الخدمة يوفّر جداراً نارياً منفصلاً للشبكة في لوحة التحكم، فأضف النطاق نفسه هناك أيضاً، لأن قاعدة ufw لا يمكنها التأثير في عامل تصفية يقع أمام الجهاز.
تشيع حالتان من أعطال mosh. إذا نجح تسجيل الدخول ثم علِق الاتصال وظهرت الرسالة Nothing received from server on UDP port 60001.، فهذا يعني أن mosh-server بدأ، لكن العميل لا يستطيع الوصول إليه على منفذ UDP ذاك. ويعني ذلك عادةً أن جداراً نارياً في مكان ما بين الهاتف والخادم يحظر UDP ضمن نطاق mosh. وإذا أبلغ الاتصال عن عدم العثور على mosh-server، فهذا يعني أن الحزمة غير مثبتة على الخادم أو أنها غير موجودة في PATH الخاص بتسجيل الدخول. ثبّتها، أو حدّد مسارها مباشرةً باستخدام mosh --server=/usr/bin/mosh-server you@server.
إذا لم تكن لغة منطقة تسجيل الدخول في الخادم UTF-8، يحاول mosh-server استخدام إعدادات اللغة التي يرسلها العميل ثم يتحقق مرة أخرى. ويرفض التشغيل فقط إذا لم تؤدِّ هذه المحاولة أيضاً إلى توفير UTF-8، ويعرض الرسالة mosh-server needs a UTF-8 native locale to run. أصلح اللغة على الخادم أولاً.
locale
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8يحتاج الطرفان إلى لغة UTF-8، كما يطبّق mosh-server إعدادات اللغة التي يرسلها العميل. إذا استمر الخطأ بعد إصلاح الخادم، فاضبط LANG على قيمة UTF-8 في تطبيق الطرفية على الهاتف أيضاً؛ إذ تشير الأسئلة الشائعة الخاصة بـmosh إلى أن mosh-client قد يحتاج إلى ذلك.
هناك أمران لا ينفذهما mosh. يذكر README الخاص به أن mosh لا يدعم إعادة توجيه X أو الاستخدامات غير التفاعلية لـSSH، بما في ذلك إعادة توجيه المنافذ، لذلك يتطلب استعراض تطبيق ويب بدأه Claude Code للتو استخدام ssh -L 8080:127.0.0.1:8080 you@server العادي. كما أنه يزامن الشاشة المرئية فقط، لذلك لا يملك سجل تمرير خاصاً به. ولا يسبب هذا القيد مشكلة هنا، لأن tmux يحتفظ بسجل التمرير: يدخل Ctrl-b ثم [ إلى وضع النسخ، ويمكنك التمرير بالسحب أو بمفاتيح الأسهم، ويخرج q من هذا الوضع.
اجعل شاشة الهاتف عملية للاستخدام
تنفّذ أربعة أسطر في ~/.tmux.conf على الخادم معظم العمل:
set -g mouse on
set -g status-position top
set -g default-terminal "tmux-256color"
set -g history-limit 20000يحوّل mouse on السحب باللمس إلى تمرير، والنقر إلى تحديد pane أو window، وهذا يغني عن معظم مفاتيح prefix التي يصعب كتابتها. وينقل status-position top سطر حالة tmux بعيداً عن الحافة السفلية، حيث تغطيه لوحة المفاتيح على الشاشة وشريط الاقتراحات الخاص بها. ويثبّت default-terminal اسم الطرفية الذي يعلنه tmux إلى Claude Code. من دون ذلك السطر، يعلن tmux أي اسم اختاره الإصدار الذي بُني منه. يبدأ نص الإعداد في tmux 3.4 من screen، ثم يختبر screen-256color وtmux وtmux-256color بهذا الترتيب، ويُبقي الاختبار الفاشل الاختيار السابق. لذلك ينتهي الإصدار الذي لم يجد إدخال tmux-256color في terminfo إلى tmux أو screen-256color أو screen العادي، وقد تظهر الألوان ورسم المربعات عندئذ بجودة أسوأ مما يلزم.
تعلّم أربعة مفاتيح، وسيصبح استخدام الباقي مريحاً.
- يقاطع
EscClaude أثناء الرد ويحافظ على العمل المنجز حتى تلك اللحظة، لذلك هو المفتاح الذي تريد أن يكون الأقرب إلى إبهامك. - يقاطع
Ctrl+Cعملية قيد التشغيل أيضاً. عند وجود مطالبة خاملة، يمسح الضغط الأول الإدخال، ويخرج الضغط الثاني من Claude Code، لذلك فهو الأداة الأشد مباشرة. - يمسح
Escمرتين مسودة المطالبة، ويفتح قائمة rewind بدلاً من ذلك عند وجود مطالبة فارغة. - للمطالبة متعددة الأسطر، اكتب
\ثم اضغط Enter. تعمل هذه الصيغة في كل طرفية. أما Shift+Enter فهو أصلي فقط في قائمة قصيرة من الطرفيات المكتبية، ولا تشمل هذه القائمة عملاء الهاتف المحمول.
تجنب الأجزاء المقسّمة. يكون عرض الهاتف في الوضع العمودي نحو 40 عموداً، لذلك يترك التقسيم العمودي 20 عموداً لكل pane، ويلتف كل diff حتى يصبح نصاً مشوشاً. استخدم windows في tmux بدلاً من ذلك: ينشئ Ctrl-b c واحداً، وينتقل Ctrl-b n إلى التالي. إذا انتهى الأمر بامتلاك window ثانية لجلسة Claude Code مستقلة، فيمكن لـالجلسَتين تمرير العمل بينهما مباشرة بدلاً من نسخ النص بين windows على شاشة لمس. أدر الهاتف أفقياً عندما تحتاج إلى قراءة diff بوضوح.
من المفيد ضبط كمية النص التي تظهر على هذه الشاشة عمداً، لأن نمط الإخراج يحرّر مطالبة النظام خلف كل رد، والنمط الأكثر اختصاراً يعني صفحات شاشة أقل للتمرير على الهاتف.
تكون الجلسة الطويلة على شاشة صغيرة في معظمها مشكلة سياق، لذلك من المفيد قراءة إدارة نافذة سياق Claude Code قبل محاولة تنفيذ يوم عمل كامل من داخل قطار.
شدِّد الحماية: المفاتيح فقط، بلا كلمات مرور
يحتوي الهاتف الآن على مفتاح إلى جهاز يحرّر شيفرتك وينفّذ الأوامر. عطّل مصادقة كلمات المرور. يكون ملف drop-in أكثر أماناً من تعديل sshd_config مباشرةً، لأن Ubuntu يضمّن /etc/ssh/sshd_config.d/*.conf في أعلى sshd_config، وتُستخدم أول قيمة يعثر عليها النظام للإعداد.
sudo tee /etc/ssh/sshd_config.d/00-phone.conf >/dev/null <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload sshتُقرأ ملفات drop-in وفق ترتيب أسماء الملفات. افحص sudo sshd -T بحثاً عن passwordauthentication no وkbdinteractiveauthentication no وpubkeyauthentication yes وpermitrootlogin no؛ فإذا كان ملف أسبق يضبط أحد هذه الإعدادات، فإنه يتقدّم عليها ويجب تصحيحه هناك.
يحلّل sshd -t الإعداد ويطبع nothing عندما يكون صحيحاً. إذا تجاوزت هذه الخطوة، فقد يؤدي خطأ مطبعي واحد إلى فشل sshd عند إعادة التحميل. أبقِ جلسة العمل الحالية مفتوحة واختبر من اتصال ثانٍ قبل إغلاق أي شيء، لأن استخدام مفتاح خاطئ سيمنحك Permission denied (publickey). الآن، ومع تعطيل كلمات المرور لن يكون هناك بديل. عندئذٍ يكون مسار الاسترداد هو وحدة التحكم التي يوفّرها مزوّد الخدمة. إذا فشل اتصال الاختبار، فأعد الاتصال باستخدام ssh -v وأصلح المشكلة بينما لا تزال الجلسة الأولى مفتوحة، لأن رسالة الخطأ الواحدة تلك تغطي خمسة أعطال منفصلة، ويخبرك الإخراج التفصيلي بأي عطل منها تواجهه.
امنح كل جهاز مفتاحه الخاص. عندها يعني فقدان الهاتف حذف سطر واحد من ~/.ssh/authorized_keys، بينما يواصل الحاسوب المحمول العمل. أما استخدام مفتاح مشترك واحد فيعني تغيير المفتاح على كل جهاز تملكه.
إذا نقلت SSH إلى منفذ آخر على Ubuntu 24.04، فلاحظ أن المستمع يتبع ssh.socket. ينشئ مولّد systemd ذلك المقبس من سطر Port في إعداد SSH، لذلك لا تحتاج إلى تجاوز ListenStream، لكن إعادة تشغيل ssh وحده تُبقي الخادم مستمعاً على المنفذ 22. ضع سطر Port في ملف drop-in، واسمح بالمنفذ الجديد في ufw، ثم شغّل sudo systemctl daemon-reload متبوعاً بـsudo systemctl restart ssh.socket. تغطي تقوية حماية SSH على VPS ذلك وبقية سطح الهجوم.
لا يضيف fail2ban لـSSH أماناً كبيراً بعد تعطيل كلمات المرور، لأن النظام لا يستطيع قبول كلمة مرور مُخمّنة أصلاً. لكنه يضيف سجلات أكثر هدوءاً، ما يجعل رصد محاولة دخول حقيقية أسهل.
الخيار الأقوى هو إبقاء SSH خارج الإنترنت العام. ضع الخادم خلف شبكة WireGuard VPN تستضيفها بنفسك، وشغّل النفق على الهاتف عند الطلب، واجعل sshd يستمع إلى ListenAddress على النفق فقط. يعمل mosh عبر النفق لأن الطرفين يستخدمان UDP. لكن انتبه إلى أن النفق يضيف حمولة إلى الحزم؛ فإذا توقفت عمليات النقل الكبيرة، فخفّض MTU (وحدة النقل القصوى) في إعداد WireGuard على الهاتف.
هناك نقطة أخيرة بشأن العمل بهذه الطريقة. من الهاتف، توافق على طلبات الأذونات في شاشة تعرض بضعة أسطر من diff في كل مرة. وهذا سبب للإبقاء على ضوابط الحماية، لا لتعطيلها. تحقّق أيضاً من وضع الأذونات الذي تبدأ به جلساتك، لأن الوضع التلقائي هو الآن وضع البدء المضمّن لجلسات الطرفية التفاعلية منذ Claude Code v2.1.283، وهو ينفّذ تعديلات الملفات في دليل العمل من دون التوقف لطلب موافقتك. وتغطي تشغيل Claude Code بأمان على VPS حدود المستخدم والدليل التي يجدر بضبطها قبل أن تصبح شاشة اللمس وسيلتك الأساسية للدخول.
عندما تعيد الاتصال وتجد مشكلة
tmux attach يعني ظهور no server running on /tmp/tmux-1000/default أن tmux لم يعثر على خادم في ذلك الـsocket. غالباً يكون الخادم قد توقف، وهذا يعني في معظم الحالات أن الجهاز أعيد تشغيله. تحقّق باستخدام uptime. إذا لم يُعَد تشغيل الجهاز، وما زال pgrep tmux يعرض خادماً، فهذا لا يعني وحده أن ملف الـsocket حُذف، لأن الرايتين -L و-S تتيحان للخادم الاستماع على socket مختلف. إذا بدأت tmux باستخدام إحدى هاتين الرايتين، فمرّر الراية نفسها إلى tmux attach. إذا حُذف الـsocket فعلاً عن طريق الخطأ، يطلب pkill -USR1 tmux من الخادم إعادة إنشائه. ويذكر دليل tmux أن ذلك يفشل إذا كان أي مجلد أب مفقوداً. تتطلب تحديثات النواة من التحديثات الأمنية التلقائية إعادة تشغيل الجهاز حتى تصبح نافذة المفعول، لكن unattended-upgrades لا يعيد التشغيل تلقائياً إلا عند تفعيل Unattended-Upgrade::Automatic-Reboot؛ والقيمة الافتراضية له هي false. لا تحتوي الأجهزة التي أُعيد تشغيلها على جلسة tmux، لذلك تعامل مع أي تشغيل لـClaude Code باعتباره قابلاً لإعادة التشغيل.
يختلف can't find session: claude عن ذلك. يكون خادم tmux قيد التشغيل، لكن ذلك الاسم غير موجود. يعرض tmux ls ما هو موجود فعلاً.
إذا اتصلت ووجدت موجه shell عاديّاً حيث كان Claude Code يعمل، فهذا يعني أن العملية انتهت من دون انتهاء الجلسة. انظر إلى dmesg -T | tail وابحث عن سطر مثل Out of memory: Killed process 4821 (claude)، فهذا يؤكد أن العملية أُنهِيت بسبب نفاد الذاكرة. افحص سجل التمرير في shell فوق الموجه بحثاً عن رسائل خروج أخرى.
إذا عادت النافذة بحجم غير صحيح، أو اقتُطع طرفها، أو ظهرت مساحة غير مستخدمة حولها، فهذا يعني أن عميلين متصلان بأحجام مختلفة. يضبط tmux 3.4 حجم النافذة افتراضياً وفق العميل الذي شهد أحدث نشاط (window-size latest)، لذلك يتناوب حاسوبك المحمول، المتصل بعرض 200 عمود، والهاتف، بعرض 40، على تغيير حجمها. افصل العملاء الآخرين أثناء الاتصال باستخدام tmux attach -d -t claude.
FAQ
هل يمكنني تشغيل Claude Code على الهاتف نفسه بدلاً من تشغيله على VPS؟
لا تدعم واجهة سطر الأوامر الطرفية نظامي Android أو iOS. والمنصات المدعومة اعتباراً من October 2026 هي macOS وWindows وUbuntu 20.04 أو أحدث، وDebian 10 أو أحدث، وAlpine 3.19 أو أحدث، مع ذاكرة RAM بسعة 4 GB أو أكثر. لا يندرج Android وiOS ضمن هذه القائمة. كما يضع الهاتف تطبيقاته في وضع السكون ويغيّر عنوان الشبكة باستمرار، وهذا لا يناسب جلسة agent طويلة. شغّله على خادم، واستخدم الهاتف كشاشة عرض.
هل تستمر الجلسة إذا أغلقت التطبيق أو فقدت الإشارة؟
نعم، ويتولى ذلك مكوّنان منفصلان. يحافظ tmux على تشغيل العملية على الخادم، لذلك لا تتوقف عند انتهاء الاتصال. ويحافظ mosh على الاتصال نفسه عند تغيّر العنوان، لذلك لا يتطلب الانتقال من wifi إلى بيانات الهاتف إعادة الاتصال حتى. مع SSH العادي ومن دون tmux، يرسل انقطاع الاتصال الإشارة SIGHUP، ويتوقف Claude Code في منتصف المهمة.
لماذا يتصل mosh ثم لا يعرض شيئاً؟
يعني نجاح تسجيل الدخول ثم توقفه مع Nothing received from server on UDP port 60001. أن العميل لا يستطيع الوصول إلى mosh-server على ذلك المنفذ عبر UDP. ويعني ذلك عادةً أن جداراً نارياً يحظر UDP على النطاق 60000 إلى 61000. أضف النطاق في ufw، ثم أضفه مرة أخرى في جدار الشبكة الناري لدى مزود الخدمة، وهو عنصر تحكم منفصل في معظم لوحات التحكم. إذا أبلغ mosh بدلاً من ذلك أن mosh-server غير موجود، فالحزمة مفقودة من الخادم أو أن PATH الخاص بتسجيل الدخول لا يتضمنها. ثبّتها باستخدام sudo apt install mosh، أو استخدم mosh --server=/usr/bin/mosh-server you@server.
كيف أقاطع Claude Code من لوحة مفاتيح لا تحتوي على مفتاح Esc؟
أضف صفاً للمفاتيح. يهيّئ Termux هذا الصف باستخدام extra-keys في ~/.termux/termux.properties، كما يوفّر كل من Termius وBlink صفاً يمكنك تحريره من الإعدادات. يقاطع Esc الاستجابة الجارية ويحافظ على العمل المنجز حتى تلك اللحظة. يقاطع Ctrl+C الاستجابة أيضاً، لكن الضغط عليه مرتين عند ظهور مطالبة خاملة يخرج من Claude Code، لذلك استخدم Esc أولاً.
هل يكفي فتح SSH على الإنترنت من ناحية الأمان؟
عند تعطيل المصادقة بكلمة مرور، يكون الاعتماد الوحيد القادر على النجاح هو مفتاح لا يغادر أجهزتك. وهذا مستوى مخاطر معقول لجهاز يمكنك إعادة بنائه. امنح كل جهاز مفتاحاً خاصاً به، حتى لا يكلفك فقدان الهاتف سوى سطر واحد في authorized_keys. إذا كنت تفضّل عدم الاستجابة على منفذ عام إطلاقاً، فضع الجهاز خلف WireGuard واجعل sshd يستمع على عنوان النفق.