コンピュータを起動すると、インターネットは自動的に再接続されますが、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に接続する前に有効にする必要がある接続を入力します。ほとんどのユーザーにとって、2番目のものは基本的なネットワーク接続(通常は有線イーサネット接続)です。
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がまだ接続されているかどうかを自動的に検出し、そうでない場合は再接続するスクリプトを実装します。
これがあなたに役立つことを願っています。