Sunday, June 11, 2017
Dbus Tutorial Fun with Network Manager
Dbus Tutorial Fun with Network Manager
Introduction
Introspection: figuring out the rules
Fun with Network Manager
Create a service
Gobject Introspection
Lets figure out how to use dbus to get detailed information out of Network Manager (NM), and then to plug our own information back into NM.
Example #1: This script determines if a specific network is the active connection. This is handy for, say, mapping network printers or networked drives, or setting the time, or automating backups, or lots of other stuff.
#!/bin/sh
# What network am I on?
# Get the Active Connection path
# Result should be like: /org/freedesktop/NetworkManager/ActiveConnection/187
active_connection_path=$( dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager"
string:"ActiveConnections"
| grep ActiveConnection/ | cut -d" -f2 )
# Get the Access Point path
# Result should be like: /org/freedesktop/NetworkManager/AccessPoint/194
access_point_path=$( dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
"$active_connection_path"
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.Connection.Active"
string:"SpecificObject"
| grep variant | cut -d" -f2 )
# Get the Access Point ESSID
# Result should be something like "NETGEAR"
essid=$( dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
"$access_point_path"
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.AccessPoint"
string:"Ssid"
| grep variant | cut -d" -f2 )
# If we are on the HOME network
if [ "$essid"=="MyHomeNet" ]; then
# Do network-specific changes here
elif [ "$essid"=="WorkCorporateNet" ]
# Do network-specific changes here
else
# Do changes for unrecognized network or no network at all here
fi
exit 0
Example #2: Disable networking
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Set
string:"org.freedesktop.NetworkManager"
string:"NetworkingEnabled"
variant:boolean:false
Example #3: Enable networking. Its exactly the same as the previous example, except for the last line.
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Set
string:"org.freedesktop.NetworkManager"
string:"NetworkingEnabled"
variant:boolean:true
Example #4: Check networking status
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager"
string:"NetworkingEnabled"
method return sender=:1.4 -> dest=:1.325 reply_serial=2
variant boolean true
Example #5: Disable Wireless
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Set
string:"org.freedesktop.NetworkManager"
string:"WirelessEnabled"
variant:boolean:false
Example #6: Enable Wireless
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Set
string:"org.freedesktop.NetworkManager"
string:"WirelessEnabled"
variant:boolean:true
Example #7: Check Wireless Status
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager"
string:"WirelessEnabled"
method return sender=:1.4 -> dest=:1.326 reply_serial=2
variant boolean true
Example #8:
Example #9: List all active network connections
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager"
string:"ActiveConnections"
method return sender=:1.4 -> dest=:1.328 reply_serial=2
variant array [
object path "/org/freedesktop/NetworkManager/ActiveConnection/18"
]
Example #10: Which interface is the active connection using?
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/ActiveConnection/18
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.Connection.Active"
string:"Devices"
method return sender=:1.4 -> dest=:1.331 reply_serial=2
variant array [
object path "/org/freedesktop/NetworkManager/Devices/0"
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/Devices/0
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.Device"
string:"Interface"
method return sender=:1.4 -> dest=:1.332 reply_serial=2
variant string "wlan0"
Example #11: Get the current wireless access point
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/ActiveConnection/18
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.Connection.Active"
string:"SpecificObject"
method return sender=:1.4 -> dest=:1.334 reply_serial=2
variant object path "/org/freedesktop/NetworkManager/AccessPoint/209"
Example #12: Get the list of all visible wireless access points
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/Devices/0
org.freedesktop.NetworkManager.Device.Wireless.GetAccessPoints
method return sender=:1.4 -> dest=:1.333 reply_serial=2
array [
object path "/org/freedesktop/NetworkManager/AccessPoint/209"
object path "/org/freedesktop/NetworkManager/AccessPoint/208"
object path "/org/freedesktop/NetworkManager/AccessPoint/207"
object path "/org/freedesktop/NetworkManager/AccessPoint/206"
]
Example #13: Read the SSID of the active wireless access point
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/AccessPoint/209
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.AccessPoint"
string:"Ssid"
method return sender=:1.4 -> dest=:1.335 reply_serial=2
variant array of bytes "NETGEAR"
Example #14: Read the signal strength of the active wireless point
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/AccessPoint/209
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.AccessPoint"
string:"Strength"
method return sender=:1.4 -> dest=:1.340 reply_serial=2
variant byte 54
# 54 in byte (hexadecimal) = 84 in decimal. Strength = 84%
Example #15: Read the stored NM connection that is currently active
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/ActiveConnection/18
org.freedesktop.DBus.Properties.Get
string:"org.freedesktop.NetworkManager.Connection.Active"
string:"Connection"
method return sender=:1.4 -> dest=:1.379 reply_serial=2
variant object path "/org/freedesktop/NetworkManager/Settings/10"
Example #16: Disconnect from the current network connection (auto-reconnect)
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager
org.freedesktop.NetworkManager.DeactivateConnection
objpath:"/org/freedesktop/NetworkManager/ActiveConnection/18"
method return sender=:1.4 -> dest=:1.370 reply_serial=2
Example #17: Disconnect from the current network connection and stay disconnected
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/Devices/0
org.freedesktop.NetworkManager.Device.Disconnect
method return sender=:1.4 -> dest=:1.354 reply_serial=2
Example #18: Connect to a specific wireless network
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
org/freedesktop/NetworkManager
org.freedesktop.NetworkManager.ActivateConnection
objpath:"/org/freedesktop/NetworkManager/Settings/10"
objpath:"/org/freedesktop/NetworkManager/Devices/0"
objpath:"/org/freedesktop/NetworkManager/AccessPoint/209"
method return sender=:1.4 -> dest=:1.382 reply_serial=2
object path "/org/freedesktop/NetworkManager/ActiveConnection/20"
Example #19: Dump all information about an access point
$ dbus-send --system --print-reply
--dest=org.freedesktop.NetworkManager
/org/freedesktop/NetworkManager/Settings/10
org.freedesktop.NetworkManager.Settings.Connection.GetSettings
method return sender=:1.4 -> dest=:1.386 reply_serial=2
array [## EDITED - its really long]
download more info
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment