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

No comments:

Post a Comment