dbus_next.errors.DBusError: ipv4.addresses: это свойство не может быть пустым для ‘method = manual’

#python #dbus #networkmanager

#python #dbus #networkmanager

Вопрос:

Я пытаюсь настроить подключение NetworkManager (wifi) с помощью dbus. Я использую Python dbus-next, поскольку эта библиотека удобна с точки зрения поддержки асинхронности. Я обнаружил, что поле ‘address-data’ в будущем заменит ‘адреса’. Однако, независимо от того, с помощью чего я обновляю настройки IPv4, он всегда говорит:

dbus_next.errors.DBusError: ipv4.addresses: это свойство не может быть пустым для ‘method = manual’

И у меня заканчиваются идеи, что я могу делать неправильно. Довольно неясно, почему приведенные ниже настройки не принимаются. Я также сравнил их с настройками, которые я настроил с помощью gnome networkmanager, который также использует dbus под капотом. Таким образом, должен быть способ, но я не имею ни малейшего понятия, как действовать.

Это настройки IPv4, которые я обновляю:

  'ipv4': {'address-data': <dbus_next.signature.Variant ('aa{sv}', [{'address': <dbus_next.signature.Variant ('s', 192.168.2.177)>, 'prefix': <dbus_next.signature.Variant ('u', 16)>}])>,
          'addresses': <dbus_next.signature.Variant ('aau', [[3232236209, 4294966784, 3232236033]])>,
          'dns': <dbus_next.signature.Variant ('au', [])>,
          'dns-search': <dbus_next.signature.Variant ('as', [])>,
          'gateway': <dbus_next.signature.Variant ('s', )>,
          'method': <dbus_next.signature.Variant ('s', manual)>,
          'route-data': <dbus_next.signature.Variant ('aa{sv}', [])>,
          'routes': <dbus_next.signature.Variant ('aau', [])>},
  

… как вы можете видеть, поле ipv4.addresses явно не пустое. Таким образом, я понятия не имею, почему так написано в ошибке.

Я также протестировал reapply метод сетевых менеджеров для установленного соединения с тем же результатом.

Ответ №1:

Эта ошибка выдается, если соединение не было обновлено. addresses Элемент устарел. Я удалил его и смог обновить соединение. Это рабочий пример ipv4 блока:

  'ipv4': {'address-data': <dbus_next.signature.Variant ('aa{sv}', [{'address': <dbus_next.signature.Variant ('s', 192.168.2.181)>, 'prefix': <dbus_next.signature.Variant ('u', 24)>}])>,
          'dns': <dbus_next.signature.Variant ('au', [])>,
          'dns-search': <dbus_next.signature.Variant ('as', [])>,
          'gateway': <dbus_next.signature.Variant ('s', 192.168.2.1)>,
          'method': <dbus_next.signature.Variant ('s', manual)>,
          'route-data': <dbus_next.signature.Variant ('aa{sv}', [])>,
          'routes': <dbus_next.signature.Variant ('aau', [])>},
  

После этого я reapply_connection успешно вызвал метод. Этот вызов метода вызовет другое исключение, если устройство не было активным, но это уже другая история.