Пропавшие пункты меню и исчезающие предпочтения чинят одним и тем же рефлексом, хотя это несвязанные проблемы. Одно — интеграция с рабочим столом, другое — состояние приложения, и новый значок сам по себе не меняет ни того, ни другого. Разделить их стоит одного эксперимента и объясняет большую часть путаницы, которую люди приносят в эту тему. Запускающая программа запускает приложение; приложение решает, что оно помнит.

Две задачи, которые только кажутся одной

Интеграция с рабочим столом означает, что среда может найти исполняемый файл, показать имя и значок и передать правильные аргументы. Состояние приложения означает, что программа записывает профиль в надёжном месте и читает его при следующем запуске. Ни одно не подразумевает другое, поэтому работающий ярлык может запустить клиент, который всё забыл.

Измените одну безобидную настройку отображения через собственные элементы управления приложения, затем закройте и откройте его тем же способом. Если настройка возвращается, сохранение работает, а оставшаяся жалоба касается поиска окна, а не сохранения данных. Если она исчезает, ярлык — отвлечение, и настоящий вопрос в том, где этот процесс держит свои файлы. Проверяйте по одной настройке за раз, потому что клиент, снова спрашивающий пароль, может защищать секрет, а не терять конфигурацию.

Сравните входные данные запуска перед переустановкой

Начните с записи рабочего стола и прочитайте, что она на самом деле делает, потому что запуск из меню не обязательно то же окружение процесса, что запуск из терминала. Важны ключи 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 может показать другой домашний каталог и, следовательно, другой набор конфигурации. Исправьте владельца у конкретного файла, который документирует приложение, а не рекурсивно по всему домашнему каталогу, затем решите, какая учётная запись должна владеть профилем в дальнейшем, и держите будущие запуски согласованными с ней.

Что значок может сказать вам, а что нет

Значок доказывает, что файл запускающей программы разрешается, и ничего больше. Состояние соединения принадлежит клиенту, поэтому единственная надёжная проверка — это интерфейс, маршрут или собственный вывод состояния клиента. Апплет лотка, который не запустился, может заставить работающий туннель выглядеть сломанным, а устаревший апплет — заставить сломанный выглядеть исправным. Проверяйте соединение и запускающую программу по отдельности, а затем запишите, что именно вы починили.

Если оба были сломаны, сопротивляйтесь искушению считать починку одним изменением. Исправьте запись, подтвердите запуск, затем подтвердите туннель и запишите результат каждого шага. Именно эта запись делает следующий отчёт о потерянных настройках диагностируемым, а не повторением этого, и она же говорит следующему человеку, какая половина проблемы была настоящей.

Похожие статьи