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