как использовать gdbus для установки IP-адреса

Я исследую, как изменить IP-адреса (и настройки DHCP) из приложения рабочей станции, которое я пишу, который является, почему я должен использовать dbus с этой целью.

Все сложно! Таким образом, я пытаюсь учиться при помощи gdbus cli.

Подход, который я проявил, должен использовать gdbus для получения настроек для адаптера Ethernet, который я хочу изменить. Затем измените те данные и передайте их обратно DBus.

Я дразняще близок, потому что IP-адрес почти изменяется. Я просто должен "ударить" его путем открытия гнома GUI и нажать на галочку для рассматриваемого адаптера. Это заставляет настройки брать.

Я не знаю то, что вызывает команда dbus, нажимающая ту галочку, но я уверен, что это - заключительная вещь, которую я должен знать, чтобы смочь использовать gdbus cli для изменения IP-адресов.

Вот сценарий, который я использую для установки IP-адреса, я изменяюсь ipv4.addresses, и ipv4.address-data поля так, чтобы они указали тот же адрес.

#/bin/bash
gdbus call \
    --system \
    --dest org.freedesktop.NetworkManager \
    --object-path /org/freedesktop/NetworkManager/Settings/1 \
    --method org.freedesktop.NetworkManager.Settings.Connection.Update2 \
 "{\
  '802-3-ethernet':\
   {\
    'auto-negotiate': <false>,\
    'mac-address': <[byte 0x00, 0x0c, 0x29, 0x4e, 0x29, 0xe2]>,\
    'mac-address-blacklist': <@as []>,\
    's390-options': <@a{ss} {}>\
  },\
  'connection':\
   {\
    'id': <'Wired connection 1'>,\
    'uuid': <'d075ed7c-c8cc-3db7-b0fb-d0687331a7a0'>,\
    'type': <'802-3-ethernet'>,\
    'permissions': <@as []>,\
    'autoconnect-priority': <-999>,\
    'timestamp': <uint64 1539968649>\
   },\
  'ipv6':\
   {\
    'method': <'ignore'>,\
    'dns': <@aay []>,\
    'dns-search': <@as []>,\
    'addresses': <@a(ayuay) []>,\
    'routes': <@a(ayuayu) []>,\
    'ip6-privacy': <0>,\
    'address-data': <@aa{sv} []>,\
    'route-data': <@aa{sv} []>\
   },\
  'ipv4':\
   {
    'method': <'manual'>,\
    'dns': <[uint32 4261521600]>,\
    'dns-search': <@as []>,\
    'addresses': <[[uint32 3321997504, 24, 16885952]]>,\
    'gateway': <'192.168.1.1'>,
    'routes': <@aau []>,\
    'address-data': <[{'address': <'192.168.1.198'>, 'prefix': <uint32 24>}]>,\
    'route-data': <@aa{sv} []>\
   },\
  'proxy': {}\
 }"\
 1\
 {}

И вот то, что я получаю, когда я вызываю его...

$ ./set.sh
(@a{sv} {},)

Если я теперь открываю Network Settings GUI, круг вращения "in progress" появляется, и UI показывает старый адрес. Нажатие на галочку рядом с именем подключения заставляет GUI обновляться, чтобы показать обновленный адрес, что я запросил.

Я также получаю тонну контроля вывода в отдельном терминале, который я настроил для создания отчетов относительно изменений в NetworkManager таким образом:

$ gdbus monitor --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager

Если Вы будете думать, что контрольный вывод был бы полезен, то я вставлю его в комментарий.

Так, что является волшебством, которое происходит под той галочкой (тот направо от "Проводного соединения 1" в изображении.

Я запускаю Ubuntu 18.04 LTS.

Спасибо!

enter image description here

1
задан 20 October 2018 в 01:03

1 ответ

Я нашел ответ.

Путем выполнения $ sudo dbus-monitor --system (N.B. это - другая утилита к gdbus-monitor) Я смог осуществить сниффинг трафика в системе dbus.

Так я... 1) работал, монитор в одном терминале 2) выполнил мой set.sh сценарий в другом 3) пробрался через весь входящий в систему терминал 1 и скопировал метку времени в своем конце. 4) нажатый галочка для активации соединения. 5) скопированный метка времени в текстовый файл. 6) выберите - все в контролирующем терминале и вставке в тот же текстовый файл. 7) разыскиваемый метка времени (среди 5 000 + строки входа, никакого ребячества!) для нахождения dbus управляют, чтобы щелчок, вызванный, и, повернул его в activate.sh сценарий, который следует.

барабан....

 #!/bin/bash
 gdbus call \
    --system \
    --dest org.freedesktop.NetworkManager \
    --object-path /org/freedesktop/NetworkManager \
    --method org.freedesktop.NetworkManager.ActivateConnection \
 "/org/freedesktop/NetworkManager/Settings/1"\
 "/org/freedesktop/NetworkManager/Devices/2"\
 "/"

Параметры я являюсь передающим /org/freedesktop/NetworkManager/Settings/1, и тот, который следует, может быть получен от dbus для определенного устройства, я просто трудно кодированным их для моего адаптера Ethernet, после того как у меня были они.

Я могу теперь открыть Network Settings GUI и работать set.sh, сопровождаемый activate.sh и посмотрите обновление GUI с новыми настройками.

Я думаю, что dbus прохладен, но мог сделать с более дружественной документацией. Инженерный анализ оказался намного более эффективным, чем чтение документов для достигания моих целей.

Спасибо за чтение!

0
ответ дан 7 December 2019 в 22:51

Другие вопросы по тегам:

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