唤醒时自动重新连接 VPN

Asa*_*saf 6 sleep linux-mint

当我唤醒计算机时,互联网会自动重新连接,但 VPN 不会。
是否可以让它自动重新连接(使用 KDE 上的网络管理器,或者至少以网络管理器知道它是否通过 VPN 连接的方式)?

The*_*ght 3

我在 Ubuntu 论坛上找到了这个解决方案(例如,这里):

\n\n
    \n
  1. 以提升的权限启动文本编辑器。例如,在命令提示符下输入:

    \n\n
    gksudo gedit\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    您需要以提升的权限运行编辑器,因为您将把文件保存在无法使用“正常”访问级别进行更改的文件夹中。

  2. \n
  3. 创建一个名为 的文件autovpn并将其保存在目录/etc/NetworkManager/dispatcher.d.\xc2\xa0 中autovpn,在此文件中放置以下代码:

    \n\n
    #!/usr/bin/python\n\nimport sys\nimport os\nimport dbus\nimport gobject\nfrom  dbus.mainloop.glib import DBusGMainLoop\n\n# The uuid of the VPN connection to activate\nVPN_CONNECTION_UUID = "FILL IN YOUR OWN"\n\n# The uuid of the connection that needs to be active to start the VPN connection\nACTIVE_CONNECTION_UUID = "FILL IN YOUR OWN"\n\n# some service, path and interface constants\nNM_DBUS_SERVICE                   = "org.freedesktop.NetworkManager"\nNM_DBUS_PATH                      = "/org/freedesktop/NetworkManager"\nNM_DBUS_INTERFACE                 = "org.freedesktop.NetworkManager"\nNM_DBUS_IFACE_CONNECTION_ACTIVE   =   "org.freedesktop.NetworkManager.Connection.Active"\nNM_DBUS_SERVICE_SYSTEM_SETTINGS   = "org.freedesktop.NetworkManagerSystemSettings"\nNM_DBUS_SERVICE_USER_SETTINGS     = "org.freedesktop.NetworkManagerUserSettings"\nNM_DBUS_IFACE_SETTINGS            = "org.freedesktop.NetworkManagerSettings"\nNM_DBUS_PATH_SETTINGS             = "/org/freedesktop/NetworkManagerSettings"\nNM_DBUS_IFACE_SETTINGS_CONNECTION = "org.freedesktop.NetworkManagerSettings.Connection"\n\nDBusGMainLoop(set_as_default=True)\n\nnm_dbus_settings_services = (NM_DBUS_SERVICE_SYSTEM_SETTINGS,    NM_DBUS_SERVICE_USER_SETTINGS)\n\ndef get_connections(bus, service):\nproxy = bus.get_object(service, NM_DBUS_PATH_SETTINGS)\niface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS)\nreturn iface.ListConnections()\n\ndef get_connection_by_uuid(bus, uuid):\n  for service in nm_dbus_settings_services:\n   for c in get_connections(bus, service):\n     proxy = bus.get_object(service, c)\n     iface = dbus.Interface(proxy, dbus_interface = NM_DBUS_IFACE_SETTINGS_CONNECTION)\n     settings = iface.GetSettings()\n       if settings[\'connection\'][\'uuid\'] == uuid:\n         return (c, service)\n    return None\n\n  def list_uuids(bus):\n  for service in nm_dbus_settings_services:\n   for c in get_connections(bus, service):\nproxy = bus.get_object(service, c)\niface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION)\nsettings = iface.GetSettings()\nconn = settings[\'connection\']\nprint " %s: %s - %s (%s)" % (service, conn[\'uuid\'], conn[\'id\'], conn[\'type\'])\n\n     def get_active_connection_path(bus, uuid):\n     proxy = bus.get_object(NM_DBUS_SERVICE, NM_DBUS_PATH)\n     iface = dbus.Interface(proxy, dbus_interface=\'org.freedesktop.DBus.Properties\')\n     active_connections = iface.Get(NM_DBUS_INTERFACE, \'ActiveConnections\')\n     connection_and_service = get_connection_by_uuid(bus, uuid)\n    if connection_and_service == None:\n     return None\n    for a in active_connections:\n    proxy = bus.get_object(NM_DBUS_SERVICE, a)\n    iface = dbus.Interface(proxy, dbus_interface=\'org.freedesktop.DBus.Properties\')\n    path = iface.Get(NM_DBUS_IFACE_CONNECTION_ACTIVE, \'Connection\')\n    service = iface.Get(NM_DBUS_IFACE_CONNECTION_ACTIVE, \'ServiceName\')\n    if service != connection_and_service[1]:\n    continue\n    proxy = bus.get_object(connection_and_service[1], path)\n    iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_IFACE_SETTINGS_CONNECTION)\n    settings = iface.GetSettings()\n    if settings[\'connection\'][\'uuid\'] == uuid:\n    return a\n    return None\n\n   def activate_connection(bus, vpn_connection, active_connection):\n   def reply_handler(opath):\n   print "<<SUCCESS>>"\n   sys.exit(0)\n   def error_handler(*args):\n   print "<<FAILURE>>"\n   sys.exit(1)\n   proxy = bus.get_object(NM_DBUS_SERVICE, NM_DBUS_PATH)\n   iface = dbus.Interface(proxy, dbus_interface=NM_DBUS_INTERFACE)\n   iface.ActivateConnection(NM_DBUS_SERVICE_USER_SETTINGS,\n                   vpn_connection[0],\n                   dbus.ObjectPath("/"), \n                   active_connection,\n                   reply_handler=reply_handler,\n                   error_handler=error_handler)\n\n    bus = dbus.SystemBus()\n\n    #print "connections:"\n    #list_uuids(bus)\n\n    if len(VPN_CONNECTION_UUID) < 1 or len(ACTIVE_CONNECTION_UUID) < 1:\n    print "you need to set the uuids"\n    sys.exit(0)\n\n    vpn_connection = get_connection_by_uuid(bus, VPN_CONNECTION_UUID)\n    if not vpn_connection:\n     print "Configured VPN connection is not known to NM, check VPN_CONNECTION_UUID."\n    sys.exit(1)\n\n    active_connection = get_connection_by_uuid(bus, ACTIVE_CONNECTION_UUID)\n    if not active_connection:\n     print "Configured active connection is not known to NM, check ACTIVE_CONNECTION_UUID."\n     sys.exit(1)\n\n    if get_active_connection_path(bus, VPN_CONNECTION_UUID) != None:\n    print "VPN connection already activated"\n    sys.exit(0)\n\n    active_connection_path = get_active_connection_path(bus, ACTIVE_CONNECTION_UUID)\n    if not active_connection_path:\n    print "The required connection isn\'t active at the moment"\n    sys.exit(0)\n\n    print "connecting...." # to:\\n  \'%s\'\\nwith active connection:\\n  \'%s\'" % (vpn_connection, active_connection)\n\n    activate_connection(bus, vpn_connection, active_connection_path)\n\n    loop = gobject.MainLoop()\n    loop.run()\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
  5. 转到命令提示符。运行以下命令:

    \n\n
      nmcli con status\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    记下给定的 UUID 值,例如,将它们复制并粘贴到文本文件中。

  6. \n
  7. 返回autovpn脚本:填写您要使用的 VPN 连接的 UUID,以及在连接到 VPN 之前必须处于活动状态的连接。

    \n\n

    对于大多数用户来说,第二个是默认网络连接,通常是有线以太网连接。

    \n\n

    请注意,UUID 值对于您的系统来说是唯一的。但是,他们不应该在登录之间进行更改,否则此脚本将无法工作。以下是我所看到的,供您参考:

    \n\n
    $ nmcli con status\nNAME                      UUID                                   DEVICES    DEFAULT  VPN\nWired connection 1        e9908d28-ffec-41cd-babb-c0cefb38ae6a   eth0       yes      no\nVPN Connection            699f17f2-0ab0-4d1d-94d3-24136ef81603   --         no       yes\n
    Run Code Online (Sandbox Code Playgroud)
  8. \n
  9. 保存 autovpn文件。

  10. \n
  11. 注销并重新登录或重新启动。一旦您的常规网络连接打开,您的 VPN 连接就会立即激活。

    \n\n

    下一步:实现脚本自动检测VPN是否仍然连接,如果没有则重新连接。

  12. \n
\n\n

希望这对您有一些帮助。

\n