-
-
Save zlinuxboy/9e4b5f5981a495646f19a6f51ac65ba4 to your computer and use it in GitHub Desktop.
Simple dbus python usage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Cheat Sheet | |
# Start | |
import dbus | |
bus = dbus.SystemBus() | |
# OR | |
bus = dbus.SessionBus() | |
# Bus name | |
some_bus_name = "com.example.SomeService" | |
# Interface Name | |
some_interface = "com.example.SomeService" | |
# Object Paths | |
some_base_path = "/com/example/SomeService" | |
some_sub_path = "/com/example/SomeService/SubPath" | |
# Get Objects | |
proxy_object = bus.get_object(some_bus_name, some_base_path) | |
proxy_object_devices = bus.get_object(some_bus_name, some_sub_path) | |
# Get Properties | |
some_property = proxy_object.Get(some_interface, 'SomeProperty', | |
dbus_interface=dbus.PROPERTIES_IFACE) | |
# Call Method | |
opt_ret_val = proxy_object.SomeMethod(opt_params, | |
dbus_interface=some_interface) | |
# Register for a Signal | |
proxy_object.connect_to_signal("SignalName", handler_for_signal_name, | |
dbus_interface=some_interface) | |
## Notes | |
# Dbus objects also have an introspectable interface with a single Introspect method, use: | |
proxy_object_info = proxy_object.Introspect(dbus_interface=dbus.INTROSPECTABLE_IFACE) | |
# Example | |
def human_readable_byte_list(bytes): | |
import array | |
return array.array('B', bytes).tostring() | |
# OR | |
return "".join(chr(val) for val in bytes) | |
import dbus | |
bus = dbus.SystemBus() | |
NM_DEVICE_TYPE_WIFI = 2 | |
# Bus name | |
nm_bus = "org.freedesktop.NetworkManager" | |
# Interface Names | |
nm_interface = "org.freedesktop.NetworkManager" | |
nm_device_interface = "org.freedesktop.NetworkManager.Device" | |
nm_wireless_device_interface = "org.freedesktop.NetworkManager.Device.Wireless" | |
nm_access_point_interface = "org.freedesktop.NetworkManager.AccessPoint" | |
# Get Base Object | |
network_manager = bus.get_object(nm_bus, "/org/freedesktop/NetworkManager") | |
# Call GetDevices method to retrieve the current devices | |
# Returns a list of paths | |
devices = network_manager.GetDevices(dbus_interface=nm_interface) | |
# Print the device paths | |
for device_path in devices: | |
print device_path | |
print "Access Points" | |
# Get all the Access Points from all the wireless devices | |
for device_path in devices: | |
# Get Device | |
device = bus.get_object(nm_bus, device_path) | |
# Only the Wireless devices | |
if device.Get(nm_device_interface, 'DeviceType', dbus_interface=dbus.PROPERTIES_IFACE) == NM_DEVICE_TYPE_WIFI: | |
# Get Access points | |
access_points = device.GetAllAccessPoints(dbus_interface=nm_wireless_device_interface) | |
# Print out each one\s SSID | |
for access_point_path in access_points: | |
# Get Access Point | |
access_point = bus.get_object(nm_bus, access_point_path) | |
# Get it's SSID | |
ssid_bytes = access_point.Get(nm_access_point_interface, 'Ssid', dbus_interface=dbus.PROPERTIES_IFACE) | |
# Print SSID | |
print human_readable_byte_list(ssid_bytes) if len(human_readable_byte_list(ssid_bytes)) > 0 else "**HIDDEN SSID**" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment