رفع ورودی اجرای خودکار VPN که فقط روی یک میزکار اجرا میشود
راهانداز VPN که روی یک میزکار اجرا میشود و روی دیگری نه، یک فیلتر در ورودی میزکار است، نه خرابی تونل. ابتدا OnlyShowIn و TryExec و بازنویسی را بخوانید.
کارخواه 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 کهنه بخوانید. اگر هست، راهانداز کار کرده و نماد گمشده مسئلهای جداست در پشتیبانی نشانگر توسط پنل، نه در ورودیای که همین حالا ویرایش کردید.
سه مشاهده را در تیکت ثبت کنید: اجرا شد، دیده میشود، متصل است. این ثبت مانع تکرار همان سردرگمی سهوجهی توسط نفر بعدی میشود و روشن میکند کدام لایه هنوز به کار نیاز دارد.