Поправяне на запис за автоматично стартиране на 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 път. Ако е налице, стартерът е сработил и липсващата икона е отделен проблем с поддръжката на индикатора в панела, а не със записа, който току-що редактирахте.
Запишете трите наблюдения в тикета: стартиран, видим, свързан. Този запис пречи на следващия човек да повтори същото тройно объркване и показва кой слой още се нуждае от работа.