2
import dbus, dbus.service, dbus.mainloop.glib, gobject, os, sys
4
class Rejected(dbus.DBusException):
5
_dbus_error_name = "org.bluez.Error.Rejected"
7
class Agent(dbus.service.Object):
10
def set_exit_on_release(self, exit_on_release):
11
self.exit_on_release = exit_on_release
13
@dbus.service.method("org.bluez.Agent", in_signature="", out_signature="")
15
if self.exit_on_release:
18
@dbus.service.method("org.bluez.Agent", in_signature="os", out_signature="")
19
def Authorize(self, device, uuid):
20
bus = dbus.SystemBus()
21
attr = dbus.Interface(bus.get_object("org.bluez", device), "org.bluez.Device").GetProperties()
23
# Only accept input (HID) devices
25
if (attr['Class'] & 0x500) == 0x500:
26
dbus.Interface(bus.get_object("org.bluez", device), "org.bluez.Device").SetProperty("Trusted", True)
29
raise Rejected("Connection rejected by user")
31
@dbus.service.method("org.bluez.Agent", in_signature="o", out_signature="s")
32
def RequestPinCode(self, device):
35
@dbus.service.method("org.bluez.Agent", in_signature="o", out_signature="u")
36
def RequestPasskey(self, device):
37
return dbus.UInt32(0000)
39
@dbus.service.method("org.bluez.Agent", in_signature="ou", out_signature="")
40
def DisplayPasskey(self, device, passkey):
43
@dbus.service.method("org.bluez.Agent", in_signature="ou", out_signature="")
44
def RequestConfirmation(self, device, passkey):
47
@dbus.service.method("org.bluez.Agent", in_signature="s", out_signature="")
48
def ConfirmModeChange(self, mode):
51
@dbus.service.method("org.bluez.Agent", in_signature="", out_signature="")
57
if not os.path.exists("/tmp/ubiquity-bluetooth-done"):
58
touch = open("/tmp/ubiquity-bluetooth-done", "w+")
61
if os.path.exists("/usr/bin/bluetooth-applet.orig"):
62
os.execl("/usr/bin/bluetooth-applet.orig", "bluetooth-applet")
63
elif os.path.exists("/usr/bin/bluetooth-applet"):
64
os.execl("/usr/bin/bluetooth-applet", "bluetooth-applet")
69
if os.path.exists("/tmp/ubiquity-bluetooth-done"):
73
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
74
bus = dbus.SystemBus()
75
manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.bluez.Manager")
76
adapter = dbus.Interface(bus.get_object("org.bluez", manager.DefaultAdapter()), "org.bluez.Adapter")
77
agent = Agent(bus, "/ubiquity/bluetooth/agent")
78
mainloop = gobject.MainLoop()
79
adapter.RegisterAgent("/ubiquity/bluetooth/agent", "DisplayYesNo")
80
except dbus.exceptions.DBusException:
83
gobject.timeout_add(300000, exit_handler)