ORG.BLUEZ...PROVIDER1(5)

πŸ“¦
version 5.87+2.git8750129efca8 Β· 4 versions
, in centos-stream 9

πŸ¦‹ org.bluez.RangingProvider1(5) β€” the RangingProvider D-Bus tea πŸ¦‹

okay so bestie, this is the Linux System Administration manual page for org.bluez.RangingProvider1, aka the BlueZ D-Bus RangingProvider API documentation. It's giving "how does a ranging daemon tell bluetoothd(8) about distance estimates?" and honestly? iconic. ✨


πŸ’– NAME πŸ’–

org.bluez.RangingProvider1 β€” BlueZ D-Bus RangingProvider API documentation. That's the whole name, no cap. πŸŽ€

πŸ› οΈ INTERFACE πŸ› οΈ

Service

<client D-Bus address> β€” literally the client D-Bus address, bestie.

Interface

org.bluez.RangingProvider1 β€” the main character interface. πŸ‘‘

Object path

{provider_root}/{unique ranging object path} β€” the path shape, exactly as written, no glow-up needed. πŸ’…

πŸŽ€ Properties πŸŽ€

  • object Device [readonly] β€” the object path of the device that this distance estimate applies to. That's the "who is this for?" field. 🫢
  • uint32 Distance [readonly, optional] β€” estimated distance to the device identified by Device, in millimeters. It may be absent when the object is first exposed and set once the provider has computed an initial estimate; bluetoothd(8) watches for it via PropertiesChanged. Yes, it's optional and that's fine. πŸ’–

🚨 ERROR HANDLING 🚨

okay so plot twist: this interface has no methods. It's implemented by the ranging daemon and consumed by bluetoothd(8) via org.freedesktop.DBus.ObjectManager and property-change watches, so there is no D-Bus method call to return an error from. No methods, no error return, no drama β€” well, except the validation drama. 😭

Instead, bluetoothd(8) validates each exposed object and silently ignores (logging a warning) any that fail validation. The receipts:

  • An object path outside the provider's registered root path is ignored. 🚫
  • An object missing the Device property, or whose Device property is not an object path, is ignored. πŸ™ˆ
  • An object whose Device does not match an existing, non-temporary device is ignored. πŸ’€
  • A Distance value (initial or updated) that is not a uint32 is ignored; the previously reported value, if any, is left unchanged. πŸ”₯
  • If the provider has already exposed a RangingProvider object for a given device (e.g. a stale or duplicate object), any further object it exposes for that same device is ignored β€” each device may only be represented by one RangingProvider object at a time. Note that only one provider may be registered per adapter at all (see org.bluez.RangingProviderManager1(5)), so this situation can only arise from the same provider re-exposing a device, not from a second, distinct provider racing for it. πŸ‘‘

Removing an ignored object, or fixing it and re-adding it, is treated the same as any other InterfacesAdded/InterfacesRemoved event. So yes, you can clean up your mess and it counts normally. 🧚

🌈 OVERVIEW 🌈

A ranging daemon exposes one RangingProvider object per device it is tracking, under the root path it registered with org.bluez.RangingProviderManager1(5):

          Ranging daemon                                     bluetoothd
               |                                                    |
               | export {provider_root}/dev_XX (RangingProvider)    |
               | { Device: <device path> }                          |
               |--------------------------------------------------->|
               |                                                    | reflects a
               |                                                    | Ranging object
               |                                                    | on the device path
               |                                                    |
               | Distance = D                                       |
               | PropertiesChanged("Distance", D)                   |
               |--------------------------------------------------->|
               |                                                    | updates
               |                                                    | Ranging.Distance
               |                                                    | and notifies clients
               |                                                    | (see org.bluez.Ranging1(5))

Removing the object (or disconnecting from D-Bus) causes bluetoothd(8) to remove the matching org.bluez.Ranging1(5) interface from the device. That's the cleanup arc, bestie. Periodt. πŸ¦‹


πŸ’– BlueZ, August 2026 β€” mwah! Now go slay that D-Bus, bestie. 🫢✨
πŸ“¦ where this page comes from