Адаптер Bluetooth не работает в Ubuntu.
$ lsusb | grep tooth
Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 33:03:30:09:74:B4 ACL MTU: 360:4 SCO MTU: 0:0
DOWN
RX bytes:1106 acl:0 sco:0 events:56 errors:0
TX bytes:736 acl:0 sco:0 commands:60 errors:0
$ sudo hciconfig hci0 up
Can't init device hci0: Operation not supported (95)
$ bluetoothctl
Agent registered
[bluetooth]# power on
No default controller available
$ hcitool dev
Devices:
$
$ rfkill
ID TYPE DEVICE SOFT HARD
0 bluetooth hci0 unblocked unblocked
1 wlan phy0 unblocked unblocked
Попробованный последние два действия:
Bluetake
Работы out-of-the-box в Ubuntu v10.04 ~ 11.04, но прекратили работать надежно в 11,10, частая паника ядра и другой генерал не хороший материал, [Ошибка: 901770]
$ lsusb <br>Bus 007 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
$ hciconfig -a hci0 <br>Manufacturer: Cambridge Silicon Radio (10)
Возможно, нуждался бы в том же, фиксируют как Belkin: добавить
blacklist hci_usb
кому:/etc/modprobe.d/blacklist.conf
, и добавьтеhci_usb reset=1
кому:/etc/modules
Также попробованный
5.3.0-29-generic
ядро.$ make -C /lib/modules/$(uname -r)/build M=$PWD modules make: Entering directory '/usr/src/linux-headers-5.3.0-29-generic' CC [M] /home/spacer/kernel/bluetooth/hci_vhci.o /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_create_device’: /home/spacer/kernel/bluetooth/hci_vhci.c:134:2: warning: dereferencing ‘void *’ pointer 134 | *skb_put(skb, 1) = 0xff; | ^~~~~~~~~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:134:19: error: invalid use of void expression 134 | *skb_put(skb, 1) = 0xff; | ^ /home/spacer/kernel/bluetooth/hci_vhci.c:135:2: warning: dereferencing ‘void *’ pointer 135 | *skb_put(skb, 1) = dev_type; | ^~~~~~~~~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:135:19: error: invalid use of void expression 135 | *skb_put(skb, 1) = dev_type; | ^ /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_get_user’: /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: error: ‘HCI_BREDR’ undeclared (first use in this function) 203 | if (dev_type != HCI_BREDR && dev_type != HCI_AMP) | ^~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:203:19: note: each undeclared identifier is reported only once for each function it appears in /home/spacer/kernel/bluetooth/hci_vhci.c: In function ‘vhci_open_timeout’: /home/spacer/kernel/bluetooth/hci_vhci.c:307:43: error: ‘HCI_BREDR’ undeclared (first use in this function) 307 | vhci_create_device(data, amp ? HCI_AMP : HCI_BREDR); | ^~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c: At top level: /home/spacer/kernel/bluetooth/hci_vhci.c:352:3: error: ‘const struct file_operations’ has no member named ‘aio_write’ 352 | .aio_write = vhci_write, | ^~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: positional initialization of field in ‘struct’ declared with ‘designated_init’ attribute [-Werror=designated-init] 352 | .aio_write = vhci_write, | ^~~~~~~~~~ /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops’) /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: error: initialization of ‘ssize_t (*)(struct file *, const char *, size_t, loff_t *)’ {aka ‘long int (*)(struct file *, const char *, long unsigned int, long long int *)’} from incompatible pointer type ‘ssize_t (*)(struct kiocb *, const struct iovec *, long unsigned int, loff_t)’ {aka ‘long int (*)(struct kiocb *, const struct iovec *, long unsigned int, long long int)’} [-Werror=incompatible-pointer-types] /home/spacer/kernel/bluetooth/hci_vhci.c:352:15: note: (near initialization for ‘vhci_fops.write’) cc1: some warnings being treated as errors make[1]: *** [scripts/Makefile.build:290: /home/spacer/kernel/bluetooth/hci_vhci.o] Error 1 make: *** [Makefile:1655: _module_/home/spacer/kernel/bluetooth] Error 2 make: Leaving directory '/usr/src/linux-headers-5.3.0-29-generic'
Существует несколько версий этого устройства с одинаковым идентификатором USB. По мнению некоторых это подделка, но я подозреваю, что это только более новые модели чипа.
Для того, чтобы чип заработал, требуется несколько особенностей, и необходимо исправить код ядра, отвечающий за возможность тестирования этих особенностей для этих новых моделей:
--- drivers/bluetooth/btusb.c.old 2020-03-31 19:14:11.765239911 +0100
+++ drivers/bluetooth/btusb.c 2020-03-31 19:22:17.035003199 +0100
@@ -1643,4 +1643,6 @@
/* Detect controllers which aren't real CSR ones. */
if (le16_to_cpu(rp->manufacturer) != 10 ||
+ le16_to_cpu(rp->lmp_subver) == 0x0811 ||
+ le16_to_cpu(rp->lmp_subver) == 0x0812 ||
le16_to_cpu(rp->lmp_subver) == 0x0c5c) {
/* Clear the reset quirk since this is not an actual
@@ -3873,5 +3875,5 @@
/* Fake CSR devices with broken commands */
- if (bcdDevice <= 0x100 || bcdDevice == 0x134)
+ if (bcdDevice <= 0x100 || bcdDevice == 0x134 || bcdDevice == 0x8891)
hdev->setup = btusb_setup_csr;
Я не даю гарантии, что это исправит проблему. проблема для всех более новых моделей, и могут потребоваться дополнительные тесты, чтобы включить больше подверсий LMP и номеров bcdDevice. Тем не менее, вышеизложенное работает для некоторых пользователей, которые использовали более новые модели Bluetooth 4.0, и для меня, использующего модель Bluetooth 5.0.
Появляется устройство, как показано здесь:
# hciconfig
hci0: Type: Primary Bus: USB
BD Address: 00:1A:7D:DA:71:11 ACL MTU: 679:9 SCO MTU: 48:16
UP RUNNING
RX bytes:56724 acl:29 sco:0 events:7890 errors:0
TX bytes:4782028 acl:7788 sco:0 commands:84 errors:0
Это было протестировано с ядром 5.5.13 и дешевым ключом Bluetooth 5.0 с AliExpress, и теперь оно позволяет мне подключиться к гарнитуре Bluetooth 5.0.
Кстати, ключ отлично работает под Windows 10.
Дополнение: отключение автоматической приостановки USB
Автоматическая приостановка USB-портов может мешать USB-ключам Bluetooth. Хотя автоматическая приостановка помогает экономить электроэнергию, а устройства должны быстро просыпаться самостоятельно, может ли это привести к сбою и ухудшению связи Bluetooth. По умолчанию ядро приостанавливает порты USB через 2 секунды. Это можно отключить либо для всех USB-портов, либо только для отдельных, а в драйвере Bluetooth USB есть параметр, который специально управляет этим для USB-ключей Bluetooth. Например, чтобы увидеть текущий статус:
# lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 062a:3633 MosArt Semiconductor Corp. Full-Speed Mouse
Bus 004 Device 002: ID 1b1c:1b39 Corsair Corsair Gaming K65 RGB RAPIDFIRE Keyboard
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# grep . /sys/bus/usb/devices/[0-9]*/power/control
/sys/bus/usb/devices/4-1/power/control:on
/sys/bus/usb/devices/4-2/power/control:on
/sys/bus/usb/devices/5-5/power/control:auto
Здесь мышь и клавиатура всегда включены, но USB-ключ CSR Bluetooth настроен на автоматическую приостановку.Если автоматическая приостановка включена и вызывает проблемы, ее можно протестировать, временно отключив:
# echo on > /sys/bus/usb/devices/5-5/power/control
# cat /sys/bus/usb/devices/5-5/power/control
on
Когда это помогает, следует отключить ее навсегда, и есть несколько способов сделать это:
Когда вы уже перекомпилируете ядра, то, вероятно, лучше всего отключить его с помощью модуля ядра Bluetooth USB, установив для параметра конфигурации CONFIG_BT_HCIBTUSB_AUTOSUSPEND значение N или закомментировав его в файле конфигурации ядра. Это приведет к тому, что USB-драйвер Bluetooth отключит автоматическую приостановку по умолчанию для каждого порта, на котором он находит соответствующее устройство, и оставит все остальные USB-устройства такими, какими они были.
Без перекомпиляции ядра и там, где USB-модуль Bluetooth компилируется в ядро, нужно ли делать это с параметром загрузки. Для GRUB отредактируйте /etc/default/grub и добавьте к командной строке ядра btusb.enable_autosuspend=n. Затем обновите конфигурацию grub, запустив update-grub и перезагрузившись.
Файл: /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="... btusb.enable_autosuspend=n"
...
Файл: /etc/modprobe.d/bluetooth-usb.conf
options btusb enable_autosuspend=n
Дополнение: включение параметра Fast Connectable
Еще один способ улучшить подключение Bluetooth — включить параметр FastConnectable демона bluetoothd. Настройки можно найти в /etc/bluetooth/main.conf.
Файл: /etc/bluetooth/main.conf
...
# Permanently enables the Fast Connectable setting for adapters that
# support it. When enabled other devices can connect faster to us,
# however the tradeoff is increased power consumptions. This feature
# will fully work only on kernel version 4.1 and newer. Defaults to
# 'false'.
FastConnectable = true
...
У меня были проблемы с двумя различными 0a12:0001 Cambridge Silicon Radio
. Оба были TRENDnet TBW-106UB. Я купил два новых USB Аппаратные ключи Bluetooth и не имел проблемы с тех пор. Я использовал новые аппаратные ключи с Ubuntu 18.04 и 19.10.
У меня есть этот ключ - ему несколько лет, поэтому я не могу комментировать, подделка ли это или могут ли быть подделкой современные ключи с этим USB ID.
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Я использую его с очень старым ноутбуком Acer TravelMate 2420, используя (по необходимости) версию i386 Ubuntu 18.04 LTS. (Текущее ядро на момент написания статьи — 4.15.0-106-generic. (Не нужно сочувствовать. Это просто старый запасной компьютер, который я держу в спальне и иногда использую.)
У меня работал Bluetooth, но был не очень надежным.У меня часто отключались Bluetooth-мышь (Microsoft Bluetooth Notebook Mouse 5000).
Я полностью решил проблему пару недель назад, внеся следующие изменения в /etc/default/tlp
:
# Exclude listed devices...
USB_BLACKLIST="0a12:0001"
# Bluetooth devices are excluded...
USB_BLACKLIST_BTUSB=1
(Найдите соответствующие строки и добавьте первую, а вторую отредактируйте соответствующим образом.)
Вероятно, мне не нужна конкретная команда USB_BLACKLIST
на основе идентификатора (я не проверял ее), но решил оставить ее для безопасности. Второй (USB_BLACKLIST_BTUSB) по умолчанию имеет значение 0 в моей системе, и я подозреваю, что это ключевая конфигурация, которую нужно изменить.
Вам может потребоваться установить пакет tlp
, если он еще не установлен. Не забудьте перезапустить его после перенастройки.
Надеюсь, это поможет.