ORG.BLUEZ...PROVIDER1(5)
π¦ 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 byDevice, 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 viaPropertiesChanged. 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
Deviceproperty, or whoseDeviceproperty is not an object path, is ignored. π - An object whose
Devicedoes not match an existing, non-temporary device is ignored. π - A
Distancevalue (initial or updated) that is not auint32is ignored; the previously reported value, if any, is left unchanged. π₯ - If the provider has already exposed a
RangingProviderobject 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 oneRangingProviderobject at a time. Note that only one provider may be registered per adapter at all (seeorg.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
- centos-stream 9: bluez-libs-devel 5.87+2.git8750129efca8-1.el9 Β· GPLv2+
- centos-stream 9: bluez-libs-devel 5.87+2.git8750129efca8-1.el9 Β· GPLv2+
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms