如何使用蓝牙连接鼠标和A2DP耳机调试滞后?

我拥有一台Logitech M555b鼠标,用于运行Kubuntu 12.04的HP Elitebook 8570w笔记本电脑。 使用KDE蓝牙控制模块连接后立即正常工作。

然而,经过一段时间(看似随机),它开始滞后。 运动在短时间内被推迟约500毫秒。 通常它会在一段时间后恢复,但可能需要几分钟。 所有动作都被延迟:动作,点击,滚动。 此外,在这些时间内,运动可能会波动。

始终在相同的短时间内工作的解决方法是断开重新连接鼠标的连接。 这可以使用相同的KDE蓝牙控制模块完成。

我已经尝试了什么?

  • 在启动时运行:

    echo on > `readlink -f /sys/class/bluetooth/hci0`/../../../power/level 

    禁用Bluetooth hci0设备上的任何省电function。

  • 检查鼠标的电池(这只是一周之久,其他新电池:同样结果)

  • 检查有关蓝牙相关条目的日志和内核消息:除了连接时的预期消息之外没有。
  • 我正在运行xorg-edgers PPA中提供的内核3.5.0-13-generic 。 引导常规3.2 Precise内核会导致相同的行为。

其他一些可能有用的信息:

  • 当机器上没有其他蓝牙连接处于活动状态时,会发生这种情
  • 在我的蓝牙立体声(A2DP)耳机上也会出现类似的症状,但它的音频滞后和跳过。 如此处所述交换蓝牙配置文件会有所帮助。 结论:这不是老鼠的错。
  • 使用内置蓝牙的现有死机Thinkpad T61p,耳机始终工作正常。
  • 我的笔记本电脑中的蓝牙模块通过USB连接并显示为

     0a5c:21e1 Broadcom Corp. 
  • 关闭内置蓝牙适配器并使用另一个工作正常,没有滞后。

     0a5c:2046 Broadcom Corp. Bluetooth Device 

我是移动设备,我周围的几个人正在使用蓝牙(主要是A2DP)。 它也发生在家里,我的邻居也可能在那里使用蓝牙。 它可能只是无线电干扰,但我认为蓝牙连接应该跳到另一个频道。 而且,它在重新连接时可以立即正常工作。

因此我认为这是一个软件驱动程序问题,我想调试它。 有没有办法在蓝牙(-hid)模块上获得更详细的日志记录?

您可以尝试使用bluez-hcidump软件包中的hcidump实用程序来监控您的蓝牙设备并获取更深入的信息:

 sudo apt-get install bluez-hcidump 

在包描述中,注意到:

hcidump实用程序允许监视蓝牙活动。 它提供了蓝牙流量的反汇编,可以显示来自更高级别协议(如RFCOMM,SDP和BNEP)的数据包。

您可以使用该实用程序将设备的输出记录到屏幕或文件中; 其中hciX是你自己的蓝牙设备(如果你没有用-i指定任何东西,则默认使用hci0),你可以运行:

 sudo hcidump -x -i hciX 

您可以通过附加命令-w ~/output将转储保存到文件中,如果您特别想知道音频数据,可以使用-A开关从而提取SCO音频数据,尽管在这种情况下您必须始终指定输出文件:

 sudo hcidump -x -A -i hciX -w ~/output 

您可以使用查看已保存的转储文件

 sudo hcidump -r ~/output 

您可能需要调查更多具体选项; 您可以根据需要按数据包类型进行过滤,因为默认情况下会转储所有数据包。 有关更多信息,请在线查看man hcidump或Ubuntu联机帮助页 。

唯一的另一种选择是安装wireshark并查看它是否可以检测到您的设备; 如果可以,它将能够分析usb和蓝牙流量,如此处所述,但hcidump应该会给出更好的结果。

我有幸使用USB跟踪来解决奇怪的音频问题。 有时您可以根据内容或数据包的时间来确定某些内容。 在我的情况下,与我听到的噪音相对应的包长度偶尔会发生变化。

这是 Wireshark 的一个页面 ,它提供了一些信息。

您只需执行以下操作即可获得跟踪:

  1. sudo modprobe usmon
  2. cd / sys / kernel / debug / usb / usbmon
  3. sudo cat 0u | tee~ / myusbtrace> / dev / null
  4. 运行你的测试
  5. 从第3步中删除该过程

以下是来自linux项目的信息,包括如何缩小您的跟踪范围。

第二列似乎包含时间,因此您应该仔细观察它的增量。 如果它开始平滑,后来变得跳跃,问题可能在蓝牙部分。

如果在存在可能是USB或蓝牙的问题时跟踪显示不规则数据包,但不规则数据包的方向可能指示它是内核还是驱动程序而不是USB总线另一侧的内容。