컴퓨터를 깨우면 인터넷이 자동으로 다시 연결되지만 VPN은 그렇지 않습니다.
자동으로 다시 연결되도록 할 수 있습니까(KDE의 네트워크 관리자를 사용하거나 최소한 VPN을 통해 연결되어 있는지 네트워크 관리자가 아는 방식으로)?
답변1
Ubuntu 포럼에서 이 솔루션을 찾았습니다(예:여기):
높은 권한으로 텍스트 편집기를 시작합니다. 예를 들어 명령 프롬프트에 다음을 입력합니다.
gksudo gedit
"일반" 액세스 수준을 사용하여 변경할 수 없는 폴더에 파일을 저장하고 있으므로 높은 권한으로 편집기를 실행해야 합니다.
라는 파일을 만들어서
autovpn
디렉토리에 저장합니다/etc/NetworkManager/dispatcher.d
. 이autovpn
파일에 다음 코드를 배치합니다.#!/usr/bin/python import sys import os import dbus import gobject from dbus.mainloop.glib import DBusGMainLoop # The uuid of the VPN connection to activate VPN_CONNECTION_UUID = "FILL IN YOUR OWN" # The uuid of the connection that needs to be active to start the VPN connection ACTIVE_CONNECTION_UUID = "FILL IN YOUR OWN" # some service, path and interface constants NM_DBUS_SERVICE = "org.freedesktop.NetworkManager" NM_DBUS_PATH = "/org/freedesktop/NetworkManager" NM_DBUS_INTERFACE = "org.freedesktop.NetworkManager" NM_DBUS_IFACE_CONNECTION_ACTIVE = "org.freedesktop.NetworkManager.Connection.Active" NM_DBUS_SERVICE_SYSTEM_SETTINGS = "org.freedesktop.NetworkManagerSystemSettings" NM_DBUS_SERVICE_USER_SETTINGS = "org.freedesktop.NetworkManagerUserSettings" NM_DBUS_IFACE_SETTINGS = "org.freedesktop.NetworkManagerSettings" NM_DBUS_PATH_SETTINGS = "/org/freedesktop/NetworkManagerSettings" NM_DBUS_IFACE_SETTINGS_CONNECTION = "org.freedesktop.NetworkManagerSettings.Connection" DBusGMainLoop(set_as_default=True) nm_dbus_settings_services = (NM_DBUS_SERVICE_SYSTEM_SETTINGS, NM_DBUS_SERVICE_USER_SETTINGS) def get_connections(bus, service): proxy = bus.get_object(service, NM_DBUS_PATH_SETTINGS) iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS) return iface.ListConnections() def get_connection_by_uuid(bus, uuid): for service in nm_dbus_settings_services: for c in get_connections(bus, service): proxy = bus.get_object(service, c) iface = dbus.Interface(proxy, dbus_interface = NM_DBUS_IFACE_SETTINGS_CONNECTION) settings = iface.GetSettings() if settings['connection']['uuid'] == uuid: return (c, service) return None def list_uuids(bus): for service in nm_dbus_settings_services: for c in get_connections(bus, service): proxy = bus.get_object(service, c) iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION) settings = iface.GetSettings() conn = settings['connection'] print " %s: %s - %s (%s)" % (service, conn['uuid'], conn['id'], conn['type']) def get_active_connection_path(bus, uuid): proxy = bus.get_object(NM_DBUS_SERVICE, NM_DBUS_PATH) iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties') active_connections = iface.Get(NM_DBUS_INTERFACE, 'ActiveConnections') connection_and_service = get_connection_by_uuid(bus, uuid) if connection_and_service == None: return None for a in active_connections: proxy = bus.get_object(NM_DBUS_SERVICE, a) iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties') path = iface.Get(NM_DBUS_IFACE_CONNECTION_ACTIVE, 'Connection') service = iface.Get(NM_DBUS_IFACE_CONNECTION_ACTIVE, 'ServiceName') if service != connection_and_service[1]: continue proxy = bus.get_object(connection_and_service[1], path) iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION) settings = iface.GetSettings() if settings['connection']['uuid'] == uuid: return a return None def activate_connection(bus, vpn_connection, active_connection): def reply_handler(opath): print "<<SUCCESS>>" sys.exit(0) def error_handler(*args): print "<<FAILURE>>" sys.exit(1) proxy = bus.get_object(NM_DBUS_SERVICE, NM_DBUS_PATH) iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_INTERFACE) iface.ActivateConnection(NM_DBUS_SERVICE_USER_SETTINGS, vpn_connection[0], dbus.ObjectPath("/"), active_connection, reply_handler=reply_handler, error_handler=error_handler) bus = dbus.SystemBus() #print "connections:" #list_uuids(bus) if len(VPN_CONNECTION_UUID) < 1 or len(ACTIVE_CONNECTION_UUID) < 1: print "you need to set the uuids" sys.exit(0) vpn_connection = get_connection_by_uuid(bus, VPN_CONNECTION_UUID) if not vpn_connection: print "Configured VPN connection is not known to NM, check VPN_CONNECTION_UUID." sys.exit(1) active_connection = get_connection_by_uuid(bus, ACTIVE_CONNECTION_UUID) if not active_connection: print "Configured active connection is not known to NM, check ACTIVE_CONNECTION_UUID." sys.exit(1) if get_active_connection_path(bus, VPN_CONNECTION_UUID) != None: print "VPN connection already activated" sys.exit(0) active_connection_path = get_active_connection_path(bus, ACTIVE_CONNECTION_UUID) if not active_connection_path: print "The required connection isn't active at the moment" sys.exit(0) print "connecting...." # to:\n '%s'\nwith active connection:\n '%s'" % (vpn_connection, active_connection) activate_connection(bus, vpn_connection, active_connection_path) loop = gobject.MainLoop() loop.run()
명령 프롬프트로 이동합니다. 다음 명령을 실행하십시오.
nmcli con status
지정된 UUID 값을 기록해 둡니다. 예를 들어 해당 값을 복사하여 텍스트 파일에 붙여넣습니다.
스크립트 로 돌아가기
autovpn
: 사용하려는 VPN 연결의 UUID와 VPN에 연결하기 전에 활성화해야 하는 연결을 입력합니다.대부분의 사용자에게 두 번째는 기본 네트워크 연결(일반적으로 유선 이더넷 연결)입니다.
UUID 값은 시스템마다 고유합니다. 그러나 로그인 간에 변경하면 안 됩니다. 그렇지 않으면 이 스크립트가 작동하지 않습니다. 참고로 제가 본 내용은 다음과 같습니다.
$ nmcli con status NAME UUID DEVICES DEFAULT VPN Wired connection 1 e9908d28-ffec-41cd-babb-c0cefb38ae6a eth0 yes no VPN Connection 699f17f2-0ab0-4d1d-94d3-24136ef81603 -- no yes
문서를 저장합니다
autovpn
.로그아웃했다가 다시 로그인하거나 다시 시작하세요. 일반 인터넷 연결이 열리자마자 VPN 연결이 활성화됩니다.
다음 단계: VPN이 아직 연결되어 있는지 자동으로 감지하고 그렇지 않은 경우 다시 연결하는 스크립트를 구현합니다.
이것이 당신에게 도움이 되기를 바랍니다.