Maybe I need to create a pairing AgentManager, even though I don't use one? I see that bluetoothctl causes some D-Bus transactions that may be relevant: signal time=1661551309.565274 sender=:1.49 -> destination=(null destination) serial=27 path=/; interface=org.freedesktop.DBus.ObjectManager; member=InterfacesAdded object path "/org/bluez/agent" array [ dict entry( string "org.freedesktop.DBus.Introspectable" array [ ] ) dict entry( string "org.bluez.Agent1" array [ ] ) ] method call time=1661551309.566053 sender=:1.49 -> destination=org.bluez serial=28 path=/org/bluez; interface=org.bluez.AgentManager1; member=RegisterAgent object path "/org/bluez/agent" string "" method return time=1661551309.587789 sender=:1.49 -> destination=:1.1 serial=30 reply_serial=1096 array [ dict entry( object path "/org/bluez/agent" array [ dict entry( string "org.freedesktop.DBus.Introspectable" array [ ] ) dict entry( string "org.bluez.Agent1" array [ ] ) ] ) ] John Klug