Я нашел это решение на форумах 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 "<>"
sys.exit(0)
def error_handler(*args):
print "<>"
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
сценарий: Заполните UUID и для соединения VPN, которое Вы хотите использовать, и соединение, которое должно быть активно, прежде чем можно будет соединиться с VPN.
Для большинства пользователей второй является Вашим соединением стандартной сети, обычно проводным соединением Ethernet.
Обратите внимание, что значения 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 все еще, и снова соединитесь если нет.
Надежда это имеет некоторую справку к Вам.
В случае NTFS-3G проверяют http://www.tuxera.com/community/ntfs-3g-manual/ и ищут "windows_names".
выборка
windows_names
Эта опция предотвращает файлы, каталоги и расширенные атрибуты, которые будут созданы с именем, не позволенным окнами, также потому что она содержит некоторых не допустимый символ (которые являются этими девятью символами” */: <>? \| и те, код которых является меньше, чем 0×20) или потому что последний знак является пространством или точкой. Существующий такие файлы могут все еще быть считаны (и переименованы).
even on NTFS partitions? Why is that?
В дополнение к именам файлов Win32, NTFS также поддерживает имена DOS и POSIX с помощью механизма пространств имен файлов . Таким образом, файл может не только иметь двоеточие или обратную косую черту в своем имени, но даже может иметь несколько имен.
Возможно, вы видели имена файлов DOS, например. в командной строке, например MICROS~1
ниже (или часто встречающееся имя PROGRA~1
для Program Files
в корневом каталогеC:
):
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\User>cd c:\Program Files
c:\Program Files>dir /x
Volume in drive C has no label.
Volume Serial Number is E4FC-4AD7
Directory of c:\Program Files
01/16/2020 10:13 PM <DIR> .
01/16/2020 10:13 PM <DIR> ..
05/26/2020 04:39 PM <DIR> 7-Zip
07/14/2009 06:20 AM <DIR> COMMON~1 Common Files
11/21/2010 10:16 AM <DIR> DVDMAK~1 DVD Maker
11/21/2010 10:06 AM <DIR> INTERN~1 Internet Explorer
11/21/2010 10:16 AM <DIR> MICROS~1 Microsoft Games
01/16/2020 10:14 PM <DIR> MINGW-~1 mingw-w64
07/14/2009 08:32 AM <DIR> MSBuild
07/14/2009 08:32 AM <DIR> REFERE~1 Reference Assemblies
11/21/2010 10:06 AM <DIR> WINDOW~3 Windows Defender
11/21/2010 10:16 AM <DIR> WI0FCF~1 Windows Journal
11/21/2010 10:06 AM <DIR> WINDOW~1 Windows Mail
11/21/2010 10:06 AM <DIR> WI54FB~1 Windows Media Player
07/14/2009 08:32 AM <DIR> WINDOW~2 Windows NT
11/21/2010 10:06 AM <DIR> WINDOW~4 Windows Photo Viewer
11/21/2010 06:31 AM <DIR> WIBFE5~1 Windows Portable Devices
11/21/2010 10:06 AM <DIR> WI4223~1 Windows Sidebar
0 File(s) 0 bytes
18 Dir(s) 5,582,016,512 bytes free
c:\Program Files>
В приведенном выше списке каталогов два пространства имен файлов перечислены рядом друг с другом. Записи, чьи имена Win32 не конфликтуют с DOS, не имеют имени DOS.
Без опции windows_names
, упомянутой в другом ответе, драйвер Linux NTFS ntfs-3g
использует пространство имен POSIX для именования создаваемых им файлов.