Горячая клавиша VPN в NetworkManager: подключение и отключение по отдельности
Назначьте одной сохранённой VPN в NetworkManager два сочетания клавиш вместо переключателя. Привяжите UUID, оставьте запрос аутентификации видимым и проверьте готовность.
Два сочетания клавиш убирают догадки, которые должен учитывать один переключатель VPN: одно всегда подключает, другое всегда отключает. Два сочетания клавиш убирают неоднозначность: одно всегда запрашивает подключение, другое всегда запрашивает отключение. Оба указывают на один и тот же сохранённый профиль через его UUID.
Выполняйте настройку в указанном ниже порядке. Проверьте каждую команду в терминале, прежде чем привязывать её, потому что сочетание клавиш — плохое место, чтобы обнаружить запрос, которого вы не видите.
Найдите UUID, а не имя профиля
Перечислите сохранённые подключения в обычном сеансе рабочего стола и скопируйте UUID нужной VPN. Имя предназначено для людей; два сохранённых профиля могут делить одно, а профиль, удалённый и импортированный заново, получает новый идентификатор.
nmcli connection show
nmcli connection show "Office VPN" | grep -i uuid
Храните UUID в определении сочетания клавиш, а не отображаемое имя. Если профиль позже заменят, обновите оба сочетания сразу, потому что устаревший идентификатор даёт действие «Подключить», которое завершается ошибкой, тогда как «Отключить» по-прежнему нацелено на старый объект. Именно поэтому оба действия используют одно и то же значение. Считайте UUID идентичностью профиля.
Убедитесь, что профиль — это VPN NetworkManager, а не демон поставщика с собственной службой. Клиенту поставщика нужен собственный поддерживаемый интерфейс управления; nmcli не будет управлять туннелем, который ему не принадлежит. Проверьте тип подключения, если имя неоднозначно. Туннель, принадлежащий другому демону, в том же списке не появится.
Сначала проверьте обе команды в терминале
Запросите подключение в интерактивном режиме, завершите одобренный вход и достигните частного ресурса, который вам действительно нужен. Затем отключитесь соответствующей командой и убедитесь, что VPN опускается, не унося с собой нижележащее соединение Wi-Fi или Ethernet.
nmcli --ask connection up uuid 11111111-2222-4333-8444-555555555555
nmcli connection down uuid 11111111-2222-4333-8444-555555555555
Запускайте их как два отдельных действия. Они меняют состояние подключения; они не удаляют профиль и не редактируют его настройки. Сохраните вывод терминала первого запуска, чтобы знать, как выглядит обычная последовательность запросов. Эта запись делает поведение сочетания предсказуемым.
Не проверяйте отключение через единственный канал удалённого администрирования. Если VPN несёт ваш сеанс, успешное отключение также завершает ваш доступ, а восстановление требует пути, не зависящего от туннеля. Держите под рукой локальную консоль или второе соединение.
Привяжите два именованных сочетания к одному UUID
В настройках клавиатуры рабочего стола создайте два понятно названных действия, например «Подключить офисную VPN» и «Отключить офисную VPN». Назначьте разные сочетания клавиш и вставьте проверенный UUID в обе команды.
Называйте их по намерению, а не по состоянию. Сочетание с названием «Переключить» делает следующее нажатие непредсказуемым; «Подключить» и «Отключить» точно описывают, что будет запрошено. Это делает список сочетаний самодокументируемым. Случайное нажатие всё равно делает что-то предсказуемое.
Если рабочий стол использует лаунчеры desktop-entry, помните, что лаунчер не выделяет терминал автоматически. Команда, которой нужен интерактивный ввод, будет ждать там, где никто не сможет ответить.
Разместите запрос аутентификации там, где вы его видите
Без --ask, nmcli запрашивает у работающего агента секретов недостающие учётные данные. Это правильный путь, когда рабочий стол уже обрабатывает аутентификацию этой VPN и агент может показать собственный запрос. Проверьте простую команду «Подключить» прямо из сочетания, прежде чем считать, что она работает.
Если VPN требует взаимодействия в терминале, настройте сочетание так, чтобы оно открывало терминальное приложение рабочего стола и запускало там интерактивную команду. Аргументы запуска различаются у терминальных приложений, поэтому используйте документированную форму установленного.
Для записи рабочего стола Terminal=true запрашивает окно терминала, а Terminal=false не запрашивает. Ни одна из настроек не является причиной помещать пароль в командную строку, выдавать sudo без пароля или обходить политику аутентификации организации.
Проверьте готовность после нажатия клавиши
Нажатие клавиши означает, что вы запросили активацию. Оно не доказывает, что аутентификация завершилась, маршруты установлены или частный DNS отвечает. Проверьте состояние подключения, а затем фактический частный ресурс.
Читайте состояние через владеющий клиент, а не сравнивая переведённую фразу. Читаемый человеком текст меняется с языком, и на машине может быть больше одной VPN, поэтому совпадение строки может сообщить о неверном профиле или пропустить переходное состояние.
Если другая автоматизация переподключает VPN, согласуйте её с сочетанием «Отключить». Два владельца, которые отменяют друг друга, создают подключение, которое как будто игнорирует нажатие клавиши, тогда как настоящая проблема — конкурирующие политики.
Запишите UUID, обе команды и проверку готовности в свои заметки. Следующая замена профиля или обновление рабочего стола диагностируется гораздо легче, когда идентификатор и предполагаемый путь запроса уже записаны.