Заставьте Linux запретить двоеточия в именах файлов на разделах NTFS

Я нашел это решение на форумах Ubuntu (например, здесь):

  1. Запустите текстовый редактор с поднятых полномочий. Например, войдите в командной строке:

    gksudo gedit
    

    Вам нужен Ваш редактор, работающий с поднятыми полномочиями, потому что Вы сохраните файл в папке, в которую Вы не можете внести изменения с "нормальным" уровнем доступа.

  2. Создайте названный файл 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()
    
  3. Перейдите к командной строке. Выполните следующую команду:

      nmcli con status
    

    Сделайте примечание значений UUID данным, например, скопируйте и вставьте их в текстовый файл.

  4. Назад к 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
    
  5. Сохраните autovpn файл.

  6. Выйдите из системы и войдите в или перезагрузка. Ваше соединение VPN должно активироваться, как только Ваше регулярное сетевое соединение идет.

    Следующий шаг: реализуйте сценарий, чтобы автоматически обнаружить, соединена ли VPN все еще, и снова соединитесь если нет.

Надежда это имеет некоторую справку к Вам.

4
20.03.2017, 12:18
2 ответа

В случае NTFS-3G проверяют http://www.tuxera.com/community/ntfs-3g-manual/ и ищут "windows_names".

выборка

windows_names

Эта опция предотвращает файлы, каталоги и расширенные атрибуты, которые будут созданы с именем, не позволенным окнами, также потому что она содержит некоторых не допустимый символ (которые являются этими девятью символами” */: <>? \| и те, код которых является меньше, чем 0×20) или потому что последний знак является пространством или точкой. Существующий такие файлы могут все еще быть считаны (и переименованы).

3
27.01.2020, 20:58

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 для именования создаваемых им файлов.

4
15.11.2020, 16:04

Теги

Похожие вопросы