You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raspberry Pi运行bleno时LightBlue读取安全特征触发断连

问题根因

原版bleno早已停止维护,对BlueZ 5.50以上版本的安全特征处理逻辑存在硬伤:当特征配置secure: ['read']后,未配对客户端发起读请求时会触发内核鉴权流程,但bleno没有注册对应的DBus鉴权事件回调,会直接触发HCI层断连,且未捕获的异常会卡住libuv事件循环导致进程完全冻结,单纯升级BlueZ版本解决不了上层应用的逻辑缺陷。

修复方案

按优先级从高到低操作:

  • 直接替换为社区维护的fork版本@abandonware/bleno,这是成本最低的修复方式,不需要改动业务逻辑。该分支专门适配了高版本BlueZ,修复了安全特征挂死、断连异常等十几个存量bug。
    操作命令:
    npm uninstall bleno
    npm install @abandonware/bleno
    
    代码中仅需将引入语句从require('bleno')改为require('@abandonware/bleno')即可。
  • 如果必须使用原版bleno,需要手动修补逻辑+调整系统配置:
    1. 给运行bleno的用户开放BlueZ的DBus全量权限,编辑/etc/dbus-1/system.d/bluetooth.conf补充权限配置后重启蓝牙服务:
      sudo systemctl restart bluetooth
      
    2. 不要在特征初始化时直接传入静态value参数,原版bleno的静态值逻辑没有适配安全读流程,必须重写onReadRequest回调手动返回数据:
      var StaticReadOnlyCharacteristic = function() {
        StaticReadOnlyCharacteristic.super_.call(this, {
          uuid: 'fffffffffffffffffffffffffffffff1',
          properties: ['read'],
          secure:['read'],
          descriptors: [
            new BlenoDescriptor({
              uuid: '2901',
              value: 'user description'
            })
          ]
        });
      };
      util.inherits(StaticReadOnlyCharacteristic, BlenoCharacteristic);
      
      StaticReadOnlyCharacteristic.prototype.onReadRequest = function(offset, callback) {
        const resp = Buffer.from('value');
        callback(this.RESULT_SUCCESS, offset ? resp.slice(offset) : resp);
      };
      
    3. 在连接建立回调里主动触发配对流程,不要等读安全特征时由内核被动触发鉴权:
      bleno.on('accept', function(clientAddr) {
        console.log('connected from:', clientAddr);
        bleno.updateRssi();
      });
      
  • 测试注意事项:LightBlue等BLE调试工具默认不会主动发起配对,第一次读取安全特征时系统会弹出配对提示,完成配对后后续读写即可正常。未配对状态下重复触发安全特征读操作,必然会触发断连。
验证方法

修改完成后重启Node进程,打开LightBlue连接名为test的设备,点击安全特征发起读请求,正常弹出配对框、配对完成后返回value字段,进程无冻结、无异常断连即为修复成功。

排查注意:运行bleno前要先关闭bluetoothctl、BlueZ自带的gattserver等其他占用HCI接口的进程,否则会导致事件回调阻塞,出现类似的无响应问题。

内容的提问来源于stack exchange,提问作者Jay Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:39:35