解决方案:问题似乎是蓝牙模块无法与 Linux 中的 xHCI 很好地配合使用。BIOS 设置中有一个标记为“XHCI PRE-BOOT MODE”的设置,必须将其设置为“Disabled”。如果没有,Linux 会将蓝牙模块视为连接到 xHCI 总线而不是 EHCI 总线,从而导致通信错误。 但是,此修复将禁用您系统上的 USB 3.0。目前我还没有更好的解决方案,但至少这个可行。
我有一台新的 ASUS UX301LA 笔记本电脑,运行的是 Ubuntu Gnome 13.10 (Saucy)。内核似乎在启动时知道笔记本电脑的蓝牙设备,但每当我使用 rfkill 解锁蓝牙时,它就会消失。例如:
$ sudo rfkill block bluetooth
$ dmesg | tail -5
[ 2024.876537] usb 2-4: new full-speed USB device number 8 using xhci_hcd
[ 2024.894043] usb 2-4: New USB device found, idVendor=8087, idProduct=07dc
[ 2024.894053] usb 2-4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2024.908190] Bluetooth: hci0: read Intel version: 370710018002030d00
[ 2024.908271] Bluetooth: hci0: Intel Bluetooth firmware file: intel/ibt-hw-37.7.10-fw-1.80.2.3.d.bseq
[ 2025.057051] Bluetooth: hci0: Intel Bluetooth firmware patch completed and activated
$ sudo rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
1: asus-wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
2: asus-bluetooth: Bluetooth
Soft blocked: yes
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no
$ sudo hciconfig -a
hci0: Type: BR/EDR Bus: USB
BD Address: XX:XX:XX:XX:XX:XX ACL MTU: 1021:5 SCO MTU: 96:5
DOWN
RX bytes:568 acl:0 sco:0 events:29 errors:0
TX bytes:390 acl:0 sco:0 commands:29 errors:0
Features: 0xff 0xfe 0x0f 0xfe 0xdb 0xff 0x7b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF
Link mode: SLAVE ACCEPT
$ sudo rfkill unblock bluetooth
$ dmesg | tail -1
[ 2391.749122] usb 2-4: USB disconnect, device number 8
$ sudo rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
1: asus-wlan: Wireless LAN
Soft blocked: no
Hard blocked: no
2: asus-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
$ sudo hciconfig -a
[no output]
编辑:蓝牙设备显示为 Intel 7260 无线 USB 设备,ID 为 8087:07dc。我发现的唯一可能相关的信息是一个已发布修复程序的错误,Launchpad 上提到了这一点:支持英特尔 7260 蓝牙 [8087:07dc]
编辑:我从英特尔网站将固件更新为新的 22.1.7.0 版本(Saucy 附带 22.0.7.0),但出现了同样的问题。
编辑:进一步挖掘日志显示,当我运行解除阻止命令时,蓝牙 USB 设备已完全断开连接:
$ lsusb -d 8087:07dc
Bus 001 Device 007: ID 8087:07dc Intel Corp.
$ rfkill unblock bluetooth
$ lsusb -d 8087:07dc
[no output]
$ dmesg | tail -1
[ 438.284647] usb 1-4: USB disconnect, device number 7
编辑:将 iwlwifi 驱动程序从 3.13 内核更新到(较新的)反向移植版本无济于事。驱动程序的当前版本:
$ modinfo iwlwifi
filename: /lib/modules/3.11.0-15-generic/updates/drivers/net/wireless/iwlwifi/iwlwifi.ko
version: backported from Linux (v3.13-rc8-0-g7e22e91) using backports v3.13-rc8-1-0-gae71bd3
license: GPL
author: Copyright(c) 2003-2013 Intel Corporation <[email protected]>
version: in-tree:d
description: Intel(R) Wireless WiFi driver for Linux
firmware: iwlwifi-100-5.ucode
firmware: iwlwifi-1000-5.ucode
firmware: iwlwifi-135-6.ucode
firmware: iwlwifi-105-6.ucode
firmware: iwlwifi-2030-6.ucode
firmware: iwlwifi-2000-6.ucode
firmware: iwlwifi-5150-2.ucode
firmware: iwlwifi-5000-5.ucode
firmware: iwlwifi-6000g2b-6.ucode
firmware: iwlwifi-6000g2a-5.ucode
firmware: iwlwifi-6050-5.ucode
firmware: iwlwifi-6000-4.ucode
firmware: iwlwifi-3160-7.ucode
firmware: iwlwifi-7260-7.ucode
srcversion: F6C7F0E202757B474065F3B
alias: pci:v00008086d0000095Asv*sd00005490bc*sc*i*
[... trimmed several "alias" lines ...]
alias: pci:v00008086d00004232sv*sd00001201bc*sc*i*
depends: compat,cfg80211
vermagic: 3.11.0-15-generic SMP mod_unload modversions
parm: debug:debug output mask (uint)
parm: swcrypto:using crypto in software (default 0 [hardware]) (int)
parm: 11n_disable:disable 11n functionality, bitmap: 1: full, 2: agg TX, 4: agg RX (uint)
parm: amsdu_size_8K:enable 8K amsdu size (default 0) (int)
parm: fw_restart:restart firmware in case of error (default true) (bool)
parm: antenna_coupling:specify antenna coupling in dB (defualt: 0 dB) (int)
parm: wd_disable:Disable stuck queue watchdog timer 0=system default, 1=disable, 2=enable (default: 0) (int)
parm: nvm_file:NVM file name (charp)
parm: bt_coex_active:enable wifi/bt co-exist (default: enable) (bool)
parm: led_mode:0=system default, 1=On(RF On)/Off(RF Off), 2=blinking, 3=Off (default: 0) (int)
parm: power_save:enable WiFi power management (default: disable) (bool)
parm: power_level:default power save level (range from 1 - 5, default: 1) (int)
编辑:正如 Bernhard 在回复中所建议的那样,我尝试使用命令强制打开适配器echo "on" > /sys/class/bluetooth/hci0/device/../power/control
。虽然通过 rfkill 阻止了蓝牙,但这似乎没有效果,并hciconfig hci0 up
响应说设备仍然被阻止。当使用 rfkill 解除蓝牙阻止时,/sys/class/bluetooth/hci0
不存在,因此手动打开它的尝试失败。我/etc/rc.local
也尝试将其添加到,与在控制台上以 root 身份运行命令相比,没有明显的区别。
编辑:我给英特尔 WiFi 开发人员发了一封电子邮件,他们给出了非常有帮助的回复:
Hello,
I am afraid you are asking the wrong people. We are WiFi people and not Bluetooth.
Thanks,
(name removed)
我将尝试自己破解蓝牙驱动程序,看看是否可以从中获取更多调试信息。
有人能给我一些建议吗?有人遇到过这种情况吗?有使用华硕 UX301LA 的 Ubuntu 用户能给我一些建议吗?
请告诉我其他可能有用的信息,我会发布。我只是不想让这篇第一篇帖子充斥着无用的数据。
答案1
我也有 UX301LA,现在运行的是 14.10。我也遇到了同样的问题,但找到了一种解决方法,虽然不是很理想,但目前有效。
基本上,asus-nb-wmi 模块似乎与该硬件不完全兼容。虽然实际问题似乎存在得更深,但阻止该模块会阻止创建与 WiFi 和蓝牙相对应的新 rfkill 条目,然后启动后的默认状态是 WiFi 和蓝牙都正常工作(即使使用 USB 3.0)。F2 开关在 ON 时仍会使蓝牙消失,但在 OFF 时(启动后的默认设置),它不会禁用 WiFi,而蓝牙设备会出现。缺点是当模块被阻止时,Fx 键会停止工作,因为它们也受此模块支持。要实现该效果,只需添加blacklist asus-nb-wmi
到/etc/modprobe.d/blacklist.conf
更好的解决方案是向上游报告错误,或者暂时更改模块源以禁用处理 wifi/蓝牙,同时仍处理其他 Fx 键。
答案2
我的联想 T440s 也出现了同样的问题。目前我还没有解决方案,但看起来我们受到了内核错误的影响(可以找到关于它的讨论这里)。
添加
echo "on" > /sys/class/bluetooth/hci0/device/../power/control
/etc/rc.local 似乎有点帮助,但与我的蓝牙鼠标的连接仍然不稳定。
答案3
看一下:/usr/share/gnome-bluetooth/pin-code-database.xml
您的鼠标是否存在(使用 OUI 搜索,即“OEM 唯一标识符”,是鼠标 MAC 地址的前 3 个八位字节。例如,如果您的鼠标 MAC 地址是 AA:BB:CC:DD:EE:FF,那么 OUI 就是“AA:BB:CC”)?
如果它已经存在,请确保它看起来像:
(请注意结尾的冒号:“AA:BB:CC*:*”——不要遗漏它)。
如果尚不存在,请添加它。
另外,不确定这是否相关,但英特尔 7260 WiFi 有一个众所周知的问题(频繁断线)。要解决 WiFi 问题,我发现唯一有效的方法是禁用 802.11n:
- 打开终端。
- sudo vi /etc/modprobe.d/wifi-disable11n.conf
- 添加此行:options iwlwifi 11n_disable=1
- 保存并重新启动。
我只是在黑暗中拍摄一张标签,但它值得一试(IMHO)。
答案4
我通过安装新固件解决了我的问题 http://ftp.de.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-iwlwifi_0.40_all.deb
使用 acer s7 392、intel wireless 7260 rev6b、kubuntu 13.10、内核 3.11.0-15-generic