لماذا لا يصلح اختصار VPN جديد الإعدادات المفقودة
المشغّل يحدّد طريقة بدء البرنامج، لا المكان الذي يحفظ فيه تفضيلاته. قارن سياق الملف التنفيذي والمستخدم والإعدادات قبل أن تلوم الأيقونة.
إدخالات القائمة المفقودة والتفضيلات المتلاشية تُصلَح بالردّ نفسه، وهما مشكلتان لا علاقة بينهما. الأولى تكامل مع سطح المكتب، والثانية حالة التطبيق، والأيقونة الجديدة لا تغيّر أيًّا منهما بحد ذاتها. الفصل بينهما يحتاج تجربة واحدة ويفسّر معظم الالتباس الذي يحمله الناس إلى هذا الموضوع. المشغّل يبدأ برنامجًا؛ والبرنامج يقرّر ما يتذكّره.
وظيفتان تبدوان كأنهما واحدة
تكامل سطح المكتب يعني أن البيئة تستطيع إيجاد ملف تنفيذي، وعرض اسم وأيقونة، وتمرير الوسائط الصحيحة. حالة التطبيق تعني أن البرنامج يكتب ملف تعريف في مكان دائم ويقرأه عند البدء التالي. لا شيء منهما يستلزم الآخر، ولهذا يمكن لاختصار عامل أن يشغّل عميلًا نسي كل شيء.
غيّر تفضيل عرض غير مؤذٍ واحد من خلال عناصر التحكم الخاصة بالتطبيق، ثم أغلقه وأعد فتحه بالطريقة نفسها. إن عاد التفضيل، فالحفظ يعمل، والشكوى المتبقية تتعلق بالعثور على النافذة لا بحفظ البيانات. وإن اختفى، فالاختصار مشتّت والسؤال الحقيقي هو أين يحتفظ ذلك الإجراء بملفاته. اختبر تفضيلًا واحدًا في كل مرة، لأن العميل الذي يطلب كلمة المرور مرة أخرى قد يحمي سرًّا لا أنه يفقد إعدادات.
قارن مدخلات التشغيل قبل إعادة التثبيت
ابدأ من إدخال سطح المكتب واقرأ ما يفعله فعلًا، لأن التشغيل من القائمة ليس تلقائيًا بيئة الإجراء نفسها التي يوفرها التشغيل من الطرفية. المفاتيح التي تهم هي Exec و Path وبشكل غير مباشر البيئة التي توفرها الجلسة. يمكن لسكربت غلاف في Exec أن يضبط متغيرًا أو يغيّر المجلد أو يستدعي مساعدًا مميزًا لا تُظهره القائمة أبدًا. إعادة التثبيت تستبدل ملفات كان التطبيق يملكها بالفعل، وهذا نادرًا ما يكون المتغير الذي تغيّر.
grep -h '^Exec=' ~/.local/share/applications/*.desktop
desktop-file-validate ~/.local/share/applications/client.desktop
انظر إلى الملف تحت ~/.local/share/applications قبل الملف الموجود في /usr/share/applications، لأن نسخة المستخدم تحجب نسخة النظام. شغّل desktop-file-validate عندما يسيء الإدخال التصرف، وابحث عن نسخة قديمة ما زالت تشير إلى مسار محذوف. ما زالت معظم أسطح المكتب تفضّل نسخة مستخدم غير صالحة، لذا يمكن لملف معطوب أن يزيل الإدخال من القائمة بينما يبقى ملف الحزمة صالحًا. ثم شغّل الأمر نفسه يدويًا وقارن ما ينتجه التشغيلان.
أين تعيش التفضيلات فعلًا
التطبيقات التي تتبع قواعد الدليل الأساسي XDG تضع الإعدادات تحت $XDG_CONFIG_HOME، والحالة الدائمة تحت $XDG_STATE_HOME، والبيانات القابلة للإزالة تحت $XDG_CACHE_HOME، وتعود افتراضيًا إلى ~/.config و ~/.local/state و ~/.cache عندما لا تكون تلك المتغيرات مضبوطة. الثلاثة أدوار لا وعود، لذا قد يوثّق منتج VPN معيّن شيئًا آخر تمامًا. قراءة توثيق المورّد نفسه أفضل من تخمين مسار من اسم مجلد. وعندما يكون التوثيق هزيلًا، راقب الإجراء بدل نظام الملفات.
التتبّع المفلتر نحو فتح الملفات يُظهر كل مسار إعدادات يحاوله العميل، بما في ذلك المسار الذي يكتبه عند الخروج. شغّله بالمستخدم نفسه والبيئة نفسها، ثم قارن تلك المسارات بالأدلة التي توقّعتها.
strace -f -e trace=openat,stat -o /tmp/vpn.log vpn-client
للأسرار وملفات التعريف مالكون مختلفون
ملف التعريف المحفوظ وبيانات الاعتماد المحفوظة كائنان منفصلان، وغالبًا لهما تخزين منفصل. قد يعيش أحدهما في ملف إعدادات بينما يجلس الآخر في حلقة مفاتيح تُفتح لكل جلسة، لذا فإن عميلًا يطلب كلمة مرور مرة أخرى قد يفعل ببساطة ما صُمّم له. حذف ملف التعريف لإيقاف الطلب هو الطريقة التي يفقد بها الناس إعدادات عاملة.
التشغيل المميز يزيد الأمر تعقيدًا، لأن التشغيل عبر sudo أو مساعد PolicyKit قد يعرض دليلًا منزليًا مختلفًا وبالتالي مجموعة إعدادات مختلفة. أصلح الملكية على الملف المحدد الذي يوثّقه التطبيق بدلًا من ذلك بشكل تكراري عبر الدليل المنزلي، ثم قرّر أي هوية ينبغي أن تملك ملف التعريف من الآن وأبقِ التشغيلات المستقبلية متوافقة معها.
ما يمكن أن تخبرك به الأيقونة وما لا يمكن
الأيقونة تثبت أن ملف المشغّل يُحلّ، ولا شيء غير ذلك. حالة الاتصال تنتمي إلى العميل، لذا الفحص الموثوق الوحيد هو الواجهة أو المسار أو إخراج الحالة الخاص بالعميل. تطبيق في صينية النظام فشل في البدء يمكنه أن يجعل نفقًا عاملًا يبدو معطلًا، بينما تطبيق قديم يمكنه أن يجعل نفقًا معطلًا يبدو سليمًا. اختبر الاتصال والمشغّل بشكل منفصل، ثم اكتب أيًّا منهما أصلحت فعلًا.
إن كان كلاهما معطلًا، قاوم معالجة الإصلاح كتغيير واحد. أصلح الإدخال، وأكّد التشغيل، ثم أكّد النفق، وسجّل نتيجة كل خطوة. ذلك السجل هو ما يجعل التقرير التالي عن الإعدادات المفقودة قابلًا للتشخيص بدلًا من تكرار هذا التقرير، وهو أيضًا ما يخبر الشخص التالي أي نصف من المشكلة كان حقيقيًا.