Я исследую, как изменить 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.
Спасибо!
Я нашел ответ.
Путем выполнения $ 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 прохладен, но мог сделать с более дружественной документацией. Инженерный анализ оказался намного более эффективным, чем чтение документов для достигания моих целей.
Спасибо за чтение!