AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 538107
Accepted
TheMeaningfulEngineer
TheMeaningfulEngineer
Asked: 2019-08-30 08:11:06 +0800 CST2019-08-30 08:11:06 +0800 CST 2019-08-30 08:11:06 +0800 CST

在 BlueZ 中定位 GATT 服务器的对象路径

  • 772

在 Linux 机器上制作蓝牙 GATT 服务器是使用 BlueZ 完成的。使用现代 (5.50) BlueZ 的首选方式是通过 dbus API。

有关此主题的文档指出:

GATT 本地和远程服务共享相同的高级 D-Bus API。本地是指由 BlueZ 插件或外部应用程序导出的基于 GATT 的服务。远程是指对等方导出的 GATT 服务。

我将其解释为:

本地服务(Linux 机器是服务器,其他设备通过蓝牙连接到它)和远程服务(Linux 机器是客户端,它通过蓝牙连接到其他设备)都在 dbus 上表示

这为问题设定了基本假设。

bluez 源代码提供了一个example-gatt-server。您可以执行一个示例,它将正常工作并将您的 Linux 机器转入 GATT 服务器。

在该示例中,引用了一个任意命名的 dbus 对象。它的名字是/org/bluez/example/service

从文档中我希望,一旦./example-gatt-server成功运行,应该有一个/org/bluez/example/service地方。

事实并非如此:

~$ busctl tree org.bluez
└─/org
  └─/org/bluez
    └─/org/bluez/hci0

我正在使用外部设备确认 Linux 机器充当 GATT 服务器,但未/org/bluez/example/service列出。

为什么/org/bluez/example/service在 下找不到作为对象org.bluez?

linux bluetooth
  • 1 1 个回答
  • 1346 Views

1 个回答

  • Voted
  1. Best Answer
    Rishabh Agrawal
    2019-11-11T22:50:02+08:002019-11-11T22:50:02+08:00

    我也对此感到困惑,我发现我们无法看到 dbus 对象,因为此示例未在 dbus 上为该服务定义众所周知的/请求的名称。

    根据能够查询服务的busctl 文档,您需要有一个与之关联的名称。虽然此示例 Gatt 服务器没有。

    显示一个或多个服务的对象树。如果指定了 SERVICE,则仅显示指定服务的对象树。否则,显示总线上至少获得一个知名名称的所有服务的所有对象树。

    尽管您可以使用 sudo dbus-monitor --system 来监视正在注册的对象,也可以通过在 gatt 服务器示例代码中创建 Application 对象之前在总线上调用 request_name 来从 dbus 请求名称。您可以在此处查看具有请求名称的示例服务。

    bus.request_name(BUS_NAME)
    named_bus = dbus.service.BusName(BUS_NAME, bus=bus)
    

    您还需要通过编辑 /etc/dbus-1/system.conf 并添加您的服务名称来授予系统总线发布权限,如下所示:

    <policy user="root">
      <allow own="com.example.gattServer"/>
    </policy>
    
    • 1

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve