←→ Underneath: Background Apps · كل أدلة Mac
كيف تعطّل وكلاء التشغيل على Mac بأمان
حذف ملف .plist من LaunchAgents هو النصيحة الأكثر انتشارًا. وهو أيضًا أسوأ طريقة: تستمر المهمة في العمل حتى تعيد التشغيل، ولا يمكنك التراجع. إليك الطريقة الآمنة القابلة للتراجع.
الإجابة المختصرة: اعثر على معرّف المهمة (label)، ثم نفّذ
launchctl bootout gui/$(id -u)/com.example.label
launchctl disable gui/$(id -u)/com.example.label
الأمر الأول يوقفها الآن. والثاني يبقيها معطّلة بعد إعادة التشغيل. والأمر launchctl enable يتراجع عن ذلك.
قبل أن تبدأ: لا تلمس أي شيء في /System/Library ولا أي معرّف يبدأ بـ com.apple.. فهي تابعة لـ macOS. واترك أدوات VPN والنسخ الاحتياطي والأمان وبرامج التشغيل وشأنها ما لم تكن تزيل الأداة.
الخطوة 1: اعثر على المهمة
توجد وكلاء التشغيل والخدمات الخلفية في ثلاثة مجلدات يمكنك تعديلها:
~/Library/LaunchAgents: وكلاؤك أنت. لا حاجة إلى كلمة سر./Library/LaunchAgents: وكلاء لكل المستخدمين. يتطلب تعديل الملف كلمة سر المسؤول./Library/LaunchDaemons: خدمات النظام الخلفية، تعمل بصلاحيات root. تتطلبsudo.
اعرض ما هو محمّل الآن، دون مهام Apple نفسها:
launchctl list | grep -v com.apple
الأعمدة هي معرّف العملية (- إذا لم تكن تعمل)، وحالة آخر خروج، والمعرّف (label). تحتاج إلى المعرّف.
الخطوة 2: تحقق مما تفعله
plutil -p ~/Library/LaunchAgents/com.example.label.plist
ProgramArgumentsأوProgram: ما الذي تشغّله. هل يشير المسار إلى تطبيق تعرفه؟ وهل ما زال هذا التطبيق موجودًا؟RunAtLoad: تبدأ عند كل تسجيل دخول.KeepAlive: تُعاد تشغيلها عندما تتوقف.StartInterval/StartCalendarInterval: تعمل وفق جدول زمني.
إذا كان مسار البرنامج يشير إلى تطبيق حذفته، فالمهمة من البقايا وإزالتها آمنة. وإذا كانت أداة تحديث، فتعطيلها يعني أن التطبيق لن يُحدَّث من تلقاء نفسه.
الخطوة 3: انسخها احتياطيًا
mkdir -p ~/LaunchAgents-backup
cp ~/Library/LaunchAgents/com.example.label.plist ~/LaunchAgents-backup/
الخطوة 4: أوقفها الآن
لوكيل تشغيل (في أي من مجلدَي LaunchAgents):
launchctl bootout gui/$(id -u)/com.example.label
لخدمة خلفية في /Library/LaunchDaemons:
sudo launchctl bootout system/com.example.label
هذا يُلغي تحميل المهمة ويُنهي عمليتها. لكنه لا يصمد بعد إعادة التشغيل إذا كان للمهمة RunAtLoad.
الخطوة 5: أبقِها معطّلة
اختر طريقة واحدة.
الخيار أ: launchctl disable (موصى به)
launchctl disable gui/$(id -u)/com.example.label
لخدمة خلفية: sudo launchctl disable system/com.example.label.
يحفظ macOS المعرّف في قائمته الخاصة بالمهام المعطّلة، فتبقى المهمة معطّلة حتى لو كتب التطبيق ملف plist من جديد. تحقق من القائمة باستخدام:
launchctl print-disabled gui/$(id -u)
الخيار ب: انقل ملف plist بعيدًا
mkdir -p ~/Library/LaunchAgents/Disabled
mv ~/Library/LaunchAgents/com.example.label.plist ~/Library/LaunchAgents/Disabled/
لا يقرأ launchd إلا الملفات الموجودة مباشرة في مجلد LaunchAgents، لا في المجلدات الفرعية، لذا لن تُحمَّل المهمة عند تسجيل الدخول التالي. ويبقى الملف موجودًا إذا احتجت إليه. وإذا أعاد التطبيق إنشاء ملف plist، تعود المهمة؛ والخيار أ يتجنب ذلك.
الخيار ج: إعدادات النظام
تظهر مهام كثيرة أيضًا في إعدادات النظام › عام › عناصر تسجيل الدخول والامتدادات › السماح في الخلفية. إيقاف المفتاح هناك يفي بالغرض أيضًا، لكن مفتاحًا واحدًا قد يغطي عدة مهام من المطوّر نفسه. راجع ماذا يعني «السماح في الخلفية».
الخطوة 6: تحقق من نجاح العملية
launchctl list | grep com.example.label
عدم ظهور أي ناتج يعني أنها غير محمّلة. أعد التشغيل، ثم نفّذ الأمر مجددًا للتأكد.
التراجع
إذا استخدمت الخيار أ:
launchctl enable gui/$(id -u)/com.example.label
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.label.plist
إذا استخدمت الخيار ب، فأعد الملف إلى مكانه ونفّذ سطر bootstrap نفسه. وللخدمات الخلفية استخدم sudo وsystem بدلًا من gui/$(id -u).
أوامر قديمة ستراها على الإنترنت
الأمران launchctl unload -w file.plist وlaunchctl load -w file.plist ما زالا يعملان، لكن Apple تصنّفهما على أنهما قديمان (legacy). أما bootout وbootstrap وdisable وenable فهي الأوامر الحالية وتعطي رسائل خطأ أوضح.
الأسئلة الشائعة
هل حذف الملفات في LaunchAgents آمن؟
التعطيل أكثر أمانًا من الحذف. فحذف ملف plist لا يوقف مهمة محمّلة بالفعل، وستفقد الملف إذا احتجت إليه لاحقًا. استخدم launchctl bootout وlaunchctl disable، أو انقل الملف إلى مجلد نسخ احتياطي.
هل أستخدم launchctl unload -w؟
ما زال يعمل، لكن Apple تصنّف load وunload على أنهما قديمان (legacy). في macOS الحالي استخدم launchctl bootout لإيقاف مهمة، وlaunchctl disable لإبقائها معطّلة.
هل يمكنني تعطيل وكلاء تشغيل Apple في /System/Library؟
لا تفعل. فهي جزء من macOS، وتحمي «حماية سلامة النظام» (System Integrity Protection) ملفاتها، وقد يؤدي تعطيلها إلى تعطّل ميزات مثل iCloud أو Spotlight أو التحديثات.
كيف أتراجع عن launchctl disable؟
نفّذ launchctl enable gui/$(id -u)/<label>، ثم launchctl bootstrap gui/$(id -u) مع مسار ملف plist، أو سجّل الخروج ثم سجّل الدخول مجددًا.
أعاد التطبيق وكيل التشغيل الخاص به. ماذا الآن؟
استخدم launchctl disable. فهو يعطّل المعرّف (label)، فيبقى معطّلًا حتى لو كتب التطبيق ملف plist من جديد. وأوقف أيضًا إعداد «التشغيل عند تسجيل الدخول» الخاص بالتطبيق.