def on_battery() -> bool:
"""Check if we are running on Battery power."""
log.debug("Checking if running on Battery power.")
if has_battery():
bus, upower_path = dbus.SystemBus(), '/org/freedesktop/UPower'
upower = bus.get_object('org.freedesktop.UPower', upower_path)
result = __get_prop(upower, upower_path, 'OnBattery')
if result is None: # Cannot read property, something is wrong.
print(f"Failed to read D-Bus property: {upower_path}.")
result = False # Assume we are connected to a power supply.
return result
return False
#
# def on_wifi():
# """Check if we are running on wifi."""
# try:
# bus = dbus.SystemBus()
# manager = bus.get_object('org.freedesktop.NetworkManager',
# '/org/freedesktop/NetworkManager')
# # FIXME this returns int, I dunno what they mean ?, investigate.
# return __get_prop(manager, 'org.freedesktop.NetworkManager',
# 'WirelessEnabled')
# except Exception:
# return False
python类SystemBus()的实例源码
def __init__(self):
super(ModeBluetooth, self).__init__()
# Create a basic menu.
self.menu = [("Show Device", self.show_device)]
self.build_menu()
# Disable the bluetooth adaptor
self.start_bluetooth(False)
# Initialise dbus for metadata retrieval
self.bus = dbus.SystemBus()
# Initialise some basic variables
self.running = False
self.player = None
def get_introspection(self):
bus = dbus.SystemBus()
obj = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
iface = dbus.Interface(obj, dbus_interface='org.freedesktop.DBus.Introspectable')
# getting introspection xml
m = iface.get_dbus_method("Introspect", dbus_interface=None)
return m()
def get_devices(self):
bus = dbus.SystemBus()
wifi = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
iface = dbus.Interface(wifi, dbus_interface='org.freedesktop.NetworkManager')
# getting all devices
m = iface.get_dbus_method("GetDevices", dbus_interface=None)
devs = []
for dev in m():
devs.append("%s" % dev)
return devs
def get_active_connections(self):
bus = dbus.SystemBus()
wifi = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
iface = dbus.Interface(wifi, dbus_interface='org.freedesktop.DBus.Properties')
m = iface.get_dbus_method("Get", dbus_interface=None)
return [ str(ac) for ac in m("org.freedesktop.NetworkManager", "ActiveConnections") ]
def get_wifi_access_points_by_dev(self, device_path):
bus = dbus.SystemBus()
obj = bus.get_object('org.freedesktop.NetworkManager', device_path)
iface = dbus.Interface(obj, dbus_interface='org.freedesktop.NetworkManager.Device.Wireless')
# getting all wireless access points
m = iface.get_dbus_method("GetAccessPoints", dbus_interface=None)
return [str(ap) for ap in m()]
def get_access_point_all_info(self, ap_path):
bus = dbus.SystemBus()
obj = bus.get_object('org.freedesktop.NetworkManager', ap_path)
iface = dbus.Interface(obj, dbus_interface='org.freedesktop.DBus.Properties')
m = iface.get_dbus_method("GetAll", dbus_interface=None)
# getting all ppoperties like Ssid, Strength, HwAddress etc.
props = m("org.freedesktop.NetworkManager.AccessPoint")
for k,v in props.iteritems():
print k,v
return props
def activate_connection(self, con_path, dev_path, obj_path):
bus = dbus.SystemBus()
wifi = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
iface = dbus.Interface(wifi, dbus_interface='org.freedesktop.NetworkManager')
# activating connection
m = iface.get_dbus_method("ActivateConnection", dbus_interface=None)
active_connection = m(con_path, dev_path, obj_path)
# on success, active connection object/path is returned
return active_connection
def __init__(self):
# initially set the standard logger
self.set_logger(logging.getLogger(__name__))
# initially set an empty configuration
self.set_config(configparser.ConfigParser())
# set up the quit signals
self.setup_signals(
signals = [signal.SIGINT, signal.SIGTERM, signal.SIGHUP],
handler = self.please_stop_now
)
# use glib as default mailoop for dbus
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
dbus.mainloop.glib.threads_init()
GLib.threads_init()
self.loop = GLib.MainLoop() # create mainloop
self.systembus = dbus.SystemBus() # the system bus
self.systembus.request_name(CO2MONITOR_BUSNAME) # request the bus name
bus_name = dbus.service.BusName(CO2MONITOR_BUSNAME, self.systembus) # create bus name
# register the object on the bus name
dbus.service.Object.__init__(self, bus_name, CO2MONITOR_OBJECTPATH)
def __init__(self, devicefile):
# by default, log!
self.do_data_logging = True
# initially set the standard logger
self.set_logger(logging.getLogger(__name__))
# initially set an empty configuration
self.set_config(configparser.ConfigParser())
# use glib as default mailoop for dbus
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
dbus.mainloop.glib.threads_init()
GLib.threads_init()
self.systembus = dbus.SystemBus() # the system bus
self.systembus.request_name(CO2MONITOR_BUSNAME) # request the bus name
bus_name = dbus.service.BusName(CO2MONITOR_BUSNAME, self.systembus) # create bus name
self.devicefile = devicefile
# set up the device
self.device = device.co2device(self.devicefile)
# register the object on the bus name
objectpath = "/".join([CO2MONITOR_OBJECTPATH,
utils.devicefile2objectname(self.devicefile)])
dbus.service.Object.__init__(self, bus_name, objectpath)
self.update_status(_("idle"))
threading.Thread.__init__(self)
# set the config
def __init__(self, user=False):
self.bus = SessionBus() if user else SystemBus()
systemd = self.bus.get_object(SYSTEMD_BUSNAME, SYSTEMD_PATH)
self.manager = Interface(systemd, dbus_interface=SYSTEMD_MANAGER_INTERFACE)
def get_managed_objects():
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
"org.freedesktop.DBus.ObjectManager")
return manager.GetManagedObjects()
def find_adapter_in_objects(objects, pattern=None):
bus = dbus.SystemBus()
for path, ifaces in objects.iteritems():
adapter = ifaces.get(ADAPTER_INTERFACE)
if adapter is None:
continue
if not pattern or pattern == adapter["Address"] or \
path.endswith(pattern):
obj = bus.get_object(SERVICE_NAME, path)
return dbus.Interface(obj, ADAPTER_INTERFACE)
raise Exception("Bluetooth adapter not found")
def get_managed_objects():
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
"org.freedesktop.DBus.ObjectManager")
return manager.GetManagedObjects()
def find_adapter_in_objects(objects, pattern=None):
bus = dbus.SystemBus()
for path, ifaces in objects.iteritems():
adapter = ifaces.get(ADAPTER_INTERFACE)
if adapter is None:
continue
if not pattern or pattern == adapter["Address"] or \
path.endswith(pattern):
obj = bus.get_object(SERVICE_NAME, path)
return dbus.Interface(obj, ADAPTER_INTERFACE)
raise Exception("Bluetooth adapter not found")
def get_dbus( bus_type, obj, path, interface, method, arg):
""" utility: executes dbus method on specific interface"""
if bus_type == "session":
bus = dbus.SessionBus()
if bus_type == "system":
bus = dbus.SystemBus()
proxy = bus.get_object(obj, path)
method = proxy.get_dbus_method(method, interface)
if arg:
return method(arg)
else:
return method()
def get_dbus_property( bus_type, obj, path, iface, prop):
""" utility:reads properties defined on specific dbus interface"""
if bus_type == "session":
bus = dbus.SessionBus()
if bus_type == "system":
bus = dbus.SystemBus()
proxy = bus.get_object(obj, path)
aux = 'org.freedesktop.DBus.Properties'
props_iface = dbus.Interface(proxy, aux)
try:
props = props_iface.Get(iface, prop)
return props
except:
return None
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--adapter-name', type=str, help='Adapter name', default='')
args = parser.parse_args()
adapter_name = args.adapter_name
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
mainloop = GObject.MainLoop()
advertising.advertising_main(mainloop, bus, adapter_name)
gatt_server.gatt_server_main(mainloop, bus, adapter_name)
mainloop.run()
def __init__(self):
bus = dbus.SystemBus()
bat0_object = bus.get_object(
'org.freedesktop.UPower',
'/org/freedesktop/UPower/devices/battery_BAT0')
self.__statistics = bat0_object.get_dbus_method(
'GetStatistics',
'org.freedesktop.UPower.Device')
self.__history = bat0_object.get_dbus_method(
'GetHistory',
'org.freedesktop.UPower.Device')
self.bat0 = dbus.Interface(bat0_object,
'org.freedesktop.DBus.Properties')
def setup_signals(self):
if not self.setup:
bus = dbus.SystemBus()
for interface in self.interfaces:
bus.add_signal_receiver(self.handle_signal, dbus_interface=interface, interface_keyword='interface',
member_keyword='signal', path_keyword='path')
self.setup = True
self.listen_for_restarts()