←→ 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: מצאו את המשימה

סוכני הפעלה ו‑daemons נמצאים בשלוש תיקיות שמותר לכם לשנות:

הציגו מה טעון עכשיו, בלי המשימות של Apple עצמה:

launchctl list | grep -v com.apple

העמודות הן מזהה התהליך (- אם הוא לא פועל), סטטוס היציאה האחרון, והתווית. אתם צריכים את התווית.

שלב 2: בדקו מה היא עושה

plutil -p ~/Library/LaunchAgents/com.example.label.plist

אם נתיב התוכנית מוביל ליישום שמחקתם, המשימה היא שארית ובטוח להסיר אותה. אם זה כלי עדכון, השבתה שלו אומרת שהיישום לא יתעדכן מעצמו.

שלב 3: גבו אותה

mkdir -p ~/LaunchAgents-backup
cp ~/Library/LaunchAgents/com.example.label.plist ~/LaunchAgents-backup/

שלב 4: עצרו אותה עכשיו

עבור סוכן (בכל אחת מתיקיות LaunchAgents):

launchctl bootout gui/$(id -u)/com.example.label

עבור daemon ב‑/Library/LaunchDaemons:

sudo launchctl bootout system/com.example.label

זה פורק את המשימה ומסיים את התהליך שלה. זה לא שורד הפעלה מחדש אם למשימה יש RunAtLoad.

שלב 5: השאירו אותה כבויה

בחרו אפשרות אחת.

אפשרות א׳: launchctl disable (מומלץ)

launchctl disable gui/$(id -u)/com.example.label

עבור daemon: 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. עבור daemons השתמשו ב‑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. הפקודה משביתה את התווית, כך שהמשימה נשארת כבויה גם אם היישום כותב את ה‑plist מחדש. כבו גם את הגדרת ״הפעלה בעת התחברות״ של היישום עצמו.