Два аккаунта VPN, один шлюз и значок на рабочем столе, который подключается от имени последнего пользователя. Обычная причина — лаунчер, который непосредственно перед подключением переписывает имя пользователя общего профиля, или тот, который ищет отображаемое имя, случайно совпадающее у обоих профилей. NetworkManager уже различает профили по UUID, поэтому значок может назвать ровно один из них и не трогать личность. Чего он не должен нести — это пароль.

Лаунчер — это указатель, а не хранилище учётных данных.

Найдите UUID и подтвердите личность

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

Используйте UUID в лаунчере. Поиск по отображаемому имени работает, пока кто-нибудь не переименует профиль, и тогда значок подключается как неверный аккаунт или как ничто.

Напишите запись рабочего стола

Записи рабочего стола нужны тип, имя и исполняемая строка. Команда должна поднять этот UUID и позволить NetworkManager запросить секрет — для этого и служит nmcli --ask connection up uuid .... Сохраните Terminal=true, чтобы запрос был виден, когда нужен секрет. Замените заполнитель на UUID, который вы действительно наблюдали, и не добавляйте обёртку оболочки только для того, чтобы скрыть запрос.

Спецификация Desktop Entry определяет Exec как программу и её аргументы. Это не сценарий оболочки, и он не нуждается в нём.

Пусть агент хранит секрет

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

--ask интерактивен по замыслу. Это не рецепт для автоматизации без присмотра, и он не гарантирует, что каждый вызов аутентификации или плагин вообще можно перевести в сценарий.

Не хватайтесь за sudo

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

Два активных профиля для одного шлюза могут также конкурировать за маршруты или нарушать правило одновременности. Это вопрос политики, а не ошибка лаунчера.

Проверьте всё действие

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

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

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