睡眠后在OS X Yosemite中出现蓝牙问题(10.10)


53

我似乎在蓝牙连接方面一直存在问题,尤其是在长时间睡眠中唤醒Macbook Pro之后。

我有一个扬声器,在闲置一段时间后会自动关闭,而我的用例通常是打开笔记本电脑,打开扬声器,然后当蓝牙驱动程序正常工作时,它们会自动重新连接。

但是,问题似乎是,如果我的Macbook刚刚从长时间睡眠中醒来,我的蓝牙外围设备不会重新连接。

在四处搜寻之后,我发现此脚本可以重新启动蓝牙内核扩展,但似乎不适用于优胜美地。

这是sudo tail -f /var/log/system.log在执行kextloadand之后kextunload(编辑的主机名和用户名)给我的结果:

Nov 17 07:50:11 {redacted} sudo[8118]: username: TTY=ttys000 ; PWD=/Users/username; USER=root ; COMMAND=/sbin/kextload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
Nov 17 07:50:11 {redacted} kernel[0]: IOBluetoothUSBDFU::probe
Nov 17 07:50:11 {redacted} kernel[0]: IOBluetoothUSBDFU::probe ProductID - 0x821D FirmwareVersion - 0x0147
Nov 17 07:50:11 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][start] -- completed -- result = TRUE -- 0x0800 ****
Nov 17 07:50:11 {redacted} kernel[0]: **** [BroadcomBluetoothHostControllerUSBTransport][start] -- Completed -- 0x0800 ****
Nov 17 07:50:11 {redacted} kernel[0]: [IOBluetoothHCIController][staticBluetoothTransportShowsUp] -- Received Bluetooth Controller register service notification -- 0x0800 
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][initHardwareWL] -- failed -- calling DoDeviceReset (kBluetoothControllerResetHub) -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][DoDeviceReset] -- thread_call_enter1 (mReEnumerateOrResetThread) -- reEnumerateOrReset (0xffffff8213ac3ae0) = 2 --  returned FALSE -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHCIController][ProcessBluetoothTransportShowsUpActionWL] -- Error!! -- Something went wrong in the setup process. Could not communicate with Bluetooth Transport successfully -- 0x0800 -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][ReEnumerateOrResetThreadEntry] -- entering -- param0 = 0xffffff806a870800, param1 = 0x2 -- 0x0800
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][ReEnumerateOrReset] -- entering -- reEnumerateOrResetIn = 2 -- this = 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][ReEnumerateOrReset] -- in our workloop -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][ReEnumerateOrReset] -- parameter is valid -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][ReEnumerateOrReset] -- reEnumerateOrReset = 2 -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: [IOBluetoothHostControllerUSBTransport][ReEnumerateOrReset] -- calling myHub->ReEnumerateDevice() -- gEnumerateCounter = 1 
Nov 17 07:50:12 {redacted} kernel[0]: [IOBluetoothHostControllerUSBTransport][ReEnumerateOrReset] -- exit; error = 0x0000 (kIOReturnSuccess)
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][ReEnumerateOrResetThreadEntry] -- exiting -- 0x0800
Nov 17 07:50:12 {redacted} kernel[0]: IOBluetoothUSBDFU::probe
Nov 17 07:50:12 {redacted} kernel[0]: IOBluetoothUSBDFU::probe ProductID - 0x821D FirmwareVersion - 0x0147
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHostControllerUSBTransport][start] -- completed -- result = TRUE -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: **** [BroadcomBluetoothHostControllerUSBTransport][start] -- Completed -- 0x0800 ****
Nov 17 07:50:12 {redacted} kernel[0]: [IOBluetoothHCIController][staticBluetoothTransportShowsUp] -- Received Bluetooth Controller register service notification -- 0x0800 
Nov 17 07:50:12 {redacted} kernel[0]: [IOBluetoothHCIController::setConfigState] calling registerService
Nov 17 07:50:12 {redacted} kernel[0]: **** [IOBluetoothHCIController][ProcessBluetoothTransportShowsUpActionWL] -- Connected to the transport successfully -- 0xe300 -- 0x0800 -- 0x0800 ****
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.595 : SDStatusMonitor::kStatusBluetoothPowerChanged
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.617 : SDStatusMonitor::kStatusBluetoothPowerChanged
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.637 : SDStatusMonitor::kStatusBluetoothPowerChanged
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.657 : SDStatusMonitor::kStatusBluetoothPowerChanged
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.659 : BTLE scanner Powered Off
Nov 17 07:50:12 --- last message repeated 2 times ---
Nov 17 07:50:12 {redacted} coreaudiod[360]: 2014-11-17 07:50:12.663673 AM [AirPlay] BTLE client stopping to browse for AirPlay Solo Target Presence.
Nov 17 07:50:12 {redacted} blued[62]: hciControllerOnline; HID devices? 0
Nov 17 07:50:12 {redacted} coreaudiod[360]: 2014-11-17 07:50:12.663868 AM [AirPlay] BTLE client starting to browse for AirPlay Solo Target Presence.
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.664 : Starting Handoff scanning
Nov 17 07:50:12 {redacted} coreaudiod[360]: 2014-11-17 07:50:12.664336 AM [AirPlay] BTLE client stopped to browse for AirPlay Solo Target Presence.
Nov 17 07:50:12 {redacted} coreaudiod[360]: 2014-11-17 07:50:12.664753 AM [AirPlay] BTLE client started to browse for AirPlay Solo Target Presence.
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.664 : Stopping Handoff advertising
Nov 17 07:50:12 {redacted} sharingd[367]: 07:50:12.665 : BTLE scanner Powered On
Nov 17 07:50:12 {redacted} blued[62]: hostControllerOnline - Number of Paired devices = 2, List of Paired devices = (
      "00-0c-8a-dd-fd-88",
      "84-38-35-ec-1c-ea"
  )
Nov 17 07:50:13 {redacted} kernel[0]: AppleUSBMultitouchDriver::message - kIOUSBMessagePortHasBeenReset.
Nov 17 07:50:13 {redacted} kernel[0]: AppleUSBMultitouchDriver::checkStatus - received Status Packet, Payload 2: device was reinitialized
Nov 17 07:50:13 {redacted} hidd[74]: MultitouchHID: device bootloaded
Nov 17 07:50:13 {redacted} kernel[0]: AppleUSBMultitouchDriver::_deviceGetReport - DeviceRequest for reportID 0xc8 returned with result 0xe000404f - retrying

uname -a 输出(已删除主机名):

$ uname -a
Darwin {redacted} 14.0.0 Darwin Kernel Version 14.0.0: Fri Sep 19 00:26:44 PDT 2014; root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64

你们有没有看过这个问题?任何帮助,将不胜感激。


1
Mac唤醒后,尝试按住鼠标按钮2秒钟。之后,我的MagicMouse将连接。可能是故意设计的副作用,以节省空闲时的电池或其他东西。
Yaroslav Admin

有时候这发生在我身上。另一个症状是,如果我尝试关闭蓝牙,则什么也不会发生。@webaholik解决方案修复了我的蓝牙。
Bennett McElwee,2016年

Answers:


53

自升级到Yosimite以来,我在重新连接蓝牙键盘和触控板时遇到了问题。

首先尝试:打开终端并运行2个命令:

sudo kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport

sudo kextload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport

我只需要跑一次。如果以后蓝牙再次中断2个选项,只需再次在上面运行即可,或者您可以使用Automator使用简单的应用程序创建一键式解决方案:

  1. 搜索(Spotlight搜索)并运行Automator
  2. 点击底部的“新建文档”
  3. 选择“应用程序”作为新文件类型
  4. 单击列表中的“实用程序”
  5. 双击“运行AppleScript”
  6. 将(*您的脚本在这里*)替换为:

    do shell script "kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport; 
    kextload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport" with administrator privileges
    
  7. 按播放进行测试(将提示输入密码)
  8. File-> Save到桌面或任何地方

每当蓝牙设备无法连接时,运行automator应用程序


1
嗯,我认为这是我在日志中所建议的,但没有帮助。也许我会再试一次。
伊万·古扎利

在您的日志中,我没有看到:kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport,只有kextload,只需确保先运行卸载即可。我只需要运行一次(上周),以前几乎每天都必须在尝试唤醒Macbook Pro并连接到蓝牙键盘和鼠标时重新启动。
webaholik

2
我制作了一个脚本来安装sleepwatcher,并在每次计算机从睡眠状态唤醒时运行这些命令,从而彻底消除了我的问题:gist.github.com/Tyilo/c92684d277acb62272b5
Tyilo 2014年

2
在我的El Capitan上(并且搜集了很多建议),kextunload失败(Can't unload kext com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport; classes have instances)并保持了蓝牙不可用(通过该图标徘徊)。
CupawnTae

1
在我海伊谢拉我无法卸载:(kernel) Can't remove kext com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport; services failed to terminate - 0xdc008018. Failed to unload com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport - (libkern/kext) kext is in use or retained (cannot unload).
Dr_Zaszuś

10

Mikaey在Apple支持论坛上的解决方案:

  1. 关闭WiFi
  2. 尝试重新连接到蓝牙设备(应该可以
  3. 重新开启WiFi

这为我解决了这个问题。


1
的确,我还记得有时也会为我工作。更具体地说,问题是当连接到5GHz wifi时。
haylem 2015年

当我第一次遇到问题时,我就是这样做的,然后以不同的顺序关闭然后重新打开所有内容,但这并不能解决我的问题。蓝牙设备只是不想在睡眠后连接到Mac。
保罗·卡尔顿

1
这个解决方案对我有用。:)我当时使用5GHz Wifi,如@haylem。
格雷格·杜比奇

1
...但是下次我遇到这个问题时,我不得不使用@webaholik的解决方案。
格雷格·杜比奇

此解决方案适用于我MacBook Pro Retina 13英寸10.13.5
harveyslash

6

尝试运行其他答案建议的脚本,卸载并重新加载kext和蓝牙守护程序后,我的蓝牙仍然没有响应。

但是,我发现,如果优胜美地在VMWare运行时进入睡眠状态,并且在唤醒操作系统时蓝牙无法工作,则关闭VMWare可以解决此问题。

看来VMWare中的驱动程序并不总是能够正确处理睡眠/唤醒过程。


我注意到了同样的事情。VMWare是问题所在。挂起虚拟机后,蓝牙再次开始工作。
gappani

6

-更新:这个问题是不是固定在OSX 10.11埃尔卡皮坦-

以下是webaholic发布的Automator解决方案的替代方法,对于那些像我一样不方便再次输入密码的人(很可能在唤醒Mac之后,您刚刚输入密码即可登录)。

首先,在终端中,创建一个脚本来重新加载蓝牙子系统:

cat > bt_restart <<END
#!/bin/sh
kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport && \
kextload   -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
END
chmod +x bt_restart

其次,以root为其所有者,并将其移至/ sbin:

sudo chown root:wheel bt_restart
sudo mv bt_restart /usr/local/sbin

第三,将命令添加到sudoers中的NOPASSWD命令列表中:

echo -e "\n\n# Restart bluetooth without password\n$USER ALL=(ALL) NOPASSWD: /usr/local/sbin/bt_restart" | EDITOR='tee -a' sudo visudo

最后,在您的桌面上创建一个调用bt_restart的脚本:

echo '#!/usr/bin/sudo /usr/local/sbin/bt_restart' > ~/Desktop/"Restart Bluetooth"
chmod +x ~/Desktop/"Restart Bluetooth"

做完了!只需在笔记本计算机的触控板(或USB鼠标)上双击“ 重新启动台式机上的蓝牙 ”即可。


1
错字改变主人的时候,应该是chown没有chmod-尝试编辑自己,但这里没有名气和编辑低于长度限制: - /
拉尔夫·卡拉威

1
至少在我的机器上,尝试进行修改时出现权限错误/etc/sudoers,或者,您可以直接使用sudo visudo
Ralph Callaway

3

我有同样的问题,我想我发现了问题的可能原因。我的鼠标带有撇号,被称为“我的名字的鼠标”,可能是引起错误的原因。

我已更改名称以避免使用空格和特殊字符,现在被称为“ mymouse”,我似乎不再有此问题。


这看起来很有趣。基本上将蓝牙设备重命名为不包含空格。我会试一试。
Ivan Gozali 2014年

@Leenyx谢谢!它帮助了我!PS Macbook Pro(2015年中)Mac OS High Sierra 10.13.6
WebBrother

3

在macOS Sierra中我仍然有此问题。@Tyilo上面与他的要旨的链接为我提供了一个起点。但是我还想使用自制软件安装sleepwatcher,而且开箱即用的plist文件设置不正确。因此,我玩了很长时间,想出了这个脚本,可以让我可靠地工作。

brew install sleepwatcher
sudo touch /etc/rc.sleep
sudo tee -a /etc/rc.wakeup <<EOF
#!/bin/sh
# Sleepwatcher script to get bluetooth working after the mac wakes up
# Got this approach from https://gist.github.com/Tyilo/c92684d277acb62272b5
kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
kextload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
EOF
sudo chmod +x /etc/rc.wakeup
brew services start sleepwatcher
sudo tee -a /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-custom.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>de.bernhard-baehr.sleepwatcher</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/sleepwatcher</string>
        <string>-V</string>
        <string>-s /etc/rc.sleep</string>
        <string>-w /etc/rc.wakeup</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>
EOF
sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-custom.plist


2

总而言之,这是这里提到的事情清单,这些地方的链接,其他站点的类似线索,甚至由我根据其他站点的推论组成。我已经单独或以多种组合尝试了所有这些方法。他们似乎都至少工作过一次。全部都至少失败了一次。

  • 新鼠标电池
  • 删除并重新配对鼠标
  • 关闭WiFi和鼠标;连接蓝牙鼠标;恢复WiFi
  • 关闭WiFi,鼠标和VPN;连接 恢复
  • 删除蓝牙PAN;连接
  • kextunload / load USBTransport; 连接
  • 将kextunload连线到sleepwatcher;睡觉; 苏醒; 连接
  • 断开所有USB连接器(颈部,所有连接器);连接
  • 登出; 登录; 连接
  • 重新开始; 登录; 连接
  • 重置SMC(涉及“关闭”);重新开始; 登录连接
  • 关闭VM托管(例如VMWare,Parallels或VirtualBox)

我选择保留此列表,并使用“以上所有内容”。

我认为,唯一可以确定的是,某处涉及大量“随机”,也许是所有这些网络,虚拟网络,分层网络,虚拟网络和代理网络驱动程序之间的竞争。在这种情况下,这可能不仅仅是苹果的错,因为这些驱动程序来自多种来源。

当然,苹果公司曾经广为人知的“正当经营”声誉很大程度上建立在完全禁止这种相互冲突的多样性上。


在尝试了数不胜数的黑客攻击后未果之后,仅重新启动成功。但是“删除蓝牙PAN”有效。非常感谢!
Daniel Pinyol

2

意识到这是一个相当老的帖子,但是由于我在Magic Trackpad可用之前在睡眠中醒来之后的延迟而感到发疯....可能很容易就是30秒。我尝试过的大多数/所有提示和技巧几乎没有效果。

但是,我只是尝试将菜单栏上的Bluetooth图标(CMD ALT拖动)从其正常位置(大约7英寸)移动到第二个位置(从右侧算起),即在Spotlight菜单旁边。

到目前为止?...问题消失了!

不是100%知道为什么会这样,但是怀疑这可能与唤醒后处理RHS菜单栏上的那些项目中的任务的顺序有关,即,较近的RHS具有更高的优先级?

只需花费几秒钟的时间,因此,如果您也遇到此问题-值得一试吗?

(iMac 27“ i7 / OS X 10.10.5)

JH


2

对于这样简单的事情,我读过的大多数建议似乎有点复杂。决定采用菜鸟方法:

  1. 进入系统偏好设置/鼠标/设置蓝牙鼠标
  2. 屏幕显示“未找到鼠标”并开始搜索。
  3. 关闭鼠标,然后再次打开(Win​​dows解决了许多问题)。
  4. 它找到了我的鼠标。

2

看起来这些kextunload命令在High Sierra上实际上不再起作用了。但是,有一个第三方命令行工具可以执行相同的操作,并且可以正常工作:https : //github.com/toy/blueutil –您可以调整此处提到的脚本以blueutil代替使用,或者甚至可以使用完善的解决方案(非常类似于我们已经在此页面上看到的内容):https : //gist.github.com/ralph-hm/a65840c4f5e439b90170d735a89a863f


您是该实用程序的作者吗?
艾伦

不,刚发现我何时再次寻找该问题的解决方案……
miemo

所有这些操作都可以执行与Bluetooth prefPane相同的电源开/关操作。就我而言,他们没有帮助。顺便说一句,如果要使用此功能,则需要下载zip,然后xcodebuild -project blueutil.xcodeproject在解压后的目录中运行。然后进入build/Release
w00t

2

迈克尔·库默(Michael Kummer)的这篇文章报告了尝试修复Mac上蓝牙问题的失败尝试的相当详尽的清单,并最终提出了一种通过禁用似乎有效的越区切换的折衷解决方案:https ://michaelkummer.com/technology/mac-bluetooth-issues-affect -键盘触控板/

也见于https://www.forbes.com/sites/bradmoon/2017/07/13/this-trick-may-solve-your-mac-bluetooth-connectivity-issues/#6fefb3f45196


谢谢-稍后我将详细介绍这些文章。我的品牌新款iMac(2周龄)下降蓝牙不断,我必须花了至少8小时的电话,以所谓的“天才”不果上....
马克

1

重新安装MacOS。

这并不是真正的解决方案,我只是想分享我的经验,以给与我一样面临同样问题的人们一些希望,即这可能仍然不是硬件问题或wifi干扰问题,而代价可能更高否则很难解决重新安装MacOS的问题。

我的经验:2015年的Macbook Pro从睡眠中醒来后,无法连接到蓝牙设备。从最初的一点不便(例如,禁用并重新启用蓝牙模块或wifi可以修复该问题)到后来的巨大痛苦(例如,需要重新启动SMC / PRAM进行重新启动),该问题使加班时间变得更糟。

可能相关的症状或副作用是计算机有时需要太长时间(10秒)才能唤醒。

重新安装(干净的)MacOS是我的最后选择,但它似乎可以正常工作。重新安装后,我没有发现任何问题或蓝牙,wifi或睡眠打h。

免责声明:可能有一些适当的修复程序可以达到相同的效果,而可能尚未发现。此外,重新安装操作系统始终会带来丢失数据和提高生产力的风险,应对此进行评估。

新更新:一周都没有问题。但是后来蓝牙问题似乎又回来了。除了主要通过Homebrew安装一些非常常见的软件和软件包之外,我本周没有对系统进行太多修改。


0

根据其他人的建议,我创建了简单的shell脚本来重置蓝牙。有关详细信息,请参见要点

简化版本(取决于blueutil酿造):

blueutil -p 0
networksetup -setairportpower en0 off
sleep 3
networksetup -setairportpower en0 on
sleep 3
blueutil -p 1

它会关闭蓝牙,关闭wi-fi,重新打开wi-fi,最后再打开蓝牙。


-1

Mac进入睡眠状态后,请尝试单击鼠标。

这似乎可以将我的Magic Mouse 2与运行macOS Sierra(10.12.2)的Mac Mini更快地连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.