#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
успешно вызвал метод. Этот вызов метода вызовет другое исключение, если устройство не было активным, но это уже другая история.