Bluetooth keyboard (Русский)
В этой статье описан метод подключения Bluetooth HID клавиатуры. Используется bluez версии 5.
Сопряжение
Войдите на нужный компьютер с проводной клавиатурой или через ssh.
В первую очередь убедитесь, что Bluetooth-контроллер определился:
# lsusb
Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Приведённый выше вывод получен на Raspberry-Pi revision 'B' с archlinux-arm и Bluetooth-донглом Keysonic.
Помните три вещи:
- Между Bluetooth-устройством (клавиатурой) и контроллером (донглом) сопряжение настраивается один раз.
- Bluetooth-контроллер необходимо включать после каждой загрузки.
- Контроллеру необходимо указывать подключение к клавиатуре после каждой загрузки.
Сопряжение — однократный процесс, который достаточно выполнить один раз. Бывают Bluetooth-клавиатуры, продаваемые вместе с донглом и заранее настроенным сопряжением, но так не у всех. Мы используем команду bluetoothctl
из пакета bluez-utils для сопряжения нашего донгла и клавиатуры.
Включение может быть выполнено через bluetoothctl
или автоматически в /etc/bluetooth/main.conf
(см. ниже).
Аналогично подключение может быть выполнено через bluetoothctl
или hcitool
, последний более полезен для написания скриптов.
Используем bluetoothctl для сопряжения. Запустите команду для получения приглашения [bluetooth]#
.
# bluetoothctl
[bluetooth]#
Находясь в bluetoothctl, включите контроллер:
[bluetooth]# power on
Changing power on succeeded [CHG] Controller 06:05:04:03:02:01 Powered: yes
Затем сообщите bluetoothctl
, что мы ищем только клавиатуры, и сделайте это агентом по умолчанию:
[bluetooth]# agent KeyboardOnly
Agent registered
[bluetooth]# default-agent
Default agent request successful
Далее переведите ваш контроллер (локальный донгл) в режим сопряжения (pairable):
[bluetooth]# pairable on
Changing pairable on succeeded
Теперь переведите вашу клавиатуру в активный режим, когда она может быть обнаружена и сопряжена. Некоторые клавиатуры имеют специальную кнопку для этого, некоторые требуют нажать специальную комбинацию клавиш — читайте документацию к вашей клавиатуре. Имейте в виду, что время, в течение которого будет доступно обнаружение, ограничено, обычно около 30 секунд или пары минут в зависимости от устройства.
Далее попросите контроллер найти подходящее устройство:
[bluetooth]# scan on
Discovery started [CHG] Controller 06:05:04:03:02:01 Discovering: yes
После нескольких секунд адрес вашей клавиатуры должен быть найден. Строка может повторяться снова и снова, но это не мешает вводить новые команды.
Теперь выполните собственно сопряжение. Используемый адрес это MAC-адрес вашей Bluetooth-клавиатуры:
[bluetooth]# pair 01:02:03:04:05:06
Pairing successful
[agent] Passkey: 501334
), который нужно набрать на Bluetooth-клавиатуре, после чего нажать Enter
для завершения сопряжения. Используйте команду paired-devices
, чтобы точно убедиться, что сопряжение прошло успешно.Теперь сделайте это устройство доверенным (это позволит ему самостоятельно устанавливать соединение). Аналогично, используемый адрес это MAC-адрес вашей Bluetooth-клавиатуры:
[bluetooth]# trust 01:02:03:04:05:06
Trusted
Наконец, подключитесь к устройству (клавиатуре). Аналогично, используемый адрес это MAC-адрес вашей Bluetooth-клавиатуры:
[bluetooth]# connect 01:02:03:04:05:06
Connection successful
Готово. Теперь можно выйти из bluetoothctl:
[bluetooth]# quit
Теперь внешнее устройство (клавиатура) и USB-донгл сопряжены навсегда, пока вы самостоятельно не удалите сопряжение.
Решение проблем
В первую очередь убедитесь, что сам Bluetooth-контроллер определился и работает; смотрите основную статью Bluetooth (Русский).
Ошибка: hci0 ACL packet for unknown connection handle 4
- Попробуйте выполнить сброс командой
hciconfig hci0 reset
Xorg
Устройство добавляется как /dev/input/event*
и Xorg должен увидеть его автоматически, если вы не отключили такую возможность.