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

שלוש עובדות נפרדות: עלייה, סמל, מנהרה

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

המנהרה היא שוב עובדה שלישית. סמל חסר אינו ראיה לכך שהחיבור נפל, והריגה והפעלה מחדש של הלקוח כדי «לתקן» את הסמל היא בדיוק הדרך שבה מנהרה עובדת נקטעת בלי סיבה. משתמשים מדווחים על הסמל החסר ועל המנהרה השבורה באותה משפט, וזו בדיוק הסיבה שיש להפריד בין השניים על הנייר.

הפרידו ביניהם לפני שתשנו משהו. בדקו אם התהליך קיים, אחר כך אם הפאנל תומך בחיווי, ולבסוף אם הממשק מדווח על חיבור. כל תשובה מצביעה על שכבה אחרת ועל בעל אחריות אחר.

מצאו את הרשומה שההפעלה קוראת בפועל

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

ls -l ~/.config/autostart/ /etc/xdg/autostart/
echo "$XDG_CURRENT_DESKTOP"
grep -H -E '^(OnlyShowIn|NotShowIn|TryExec|Hidden|Exec)=' ~/.config/autostart/*.desktop /etc/xdg/autostart/*.desktop

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

אם אותו שם קובץ קיים בשתי התיקיות, העותק של המשתמש הוא זה שקובע. עריכה של קובץ המערכת ותהייה מדוע דבר לא השתנה היא שעה אבודה נפוצה מאוד.

קראו את מפתחות הסינון, לפי הסדר

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

[Desktop Entry]
Type=Application
Name=Example VPN
Exec=/opt/example-vpn/client --minimized
TryExec=/opt/example-vpn/client
OnlyShowIn=GNOME;

OnlyShowIn מגביל את הרשומה לסביבות המפורטות ו-NotShowIn שולל את המפורטות. המפרט אינו מגדיר התנהגות שימושית כאשר שניהם מופיעים ברשומה אחת, ולכן התייחסו לקובץ שמכיל את שניהם כאל פגם ולא כאל שילוב חכם. הסירו את המפתח שאינו נחוץ לכם במקום להוסיף את השני ולקוות לכלל קדימות.

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

עקפו ברמת המשתמש, לא ברמת המערכת

כאשר המסנן באמת שגוי עבור המחשב הזה, העתיקו את רשומת המערכת לתיקיית המשתמש ושנו את העותק. לפי כללי ההפעלה האוטומטית של XDG, לרשומת משתמש בעלת אותו שם יש קדימות, ו-Hidden=true משבית רשומה בלי למחוק את קובץ המערכת.

mkdir -p ~/.config/autostart
cp /etc/xdg/autostart/example-vpn.desktop ~/.config/autostart/
sed -i '/^OnlyShowIn=/d' ~/.config/autostart/example-vpn.desktop
desktop-file-validate ~/.config/autostart/example-vpn.desktop

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

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

אמתו את העלייה בלי לגעת במנהרה

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

pgrep -af example-vpn
systemctl --user status example-vpn.service
journalctl --user -b --no-pager | grep -i example-vpn | tail -20

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

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

מאמרים קשורים