Я пытаюсь отправлять и получать последовательные команды через Bluetooth. Я установил библиотеку pyBluez. Проблема в том, что хотя rfcomm.conf существует, в каталоге /dev/ нет rfcomm0. Я перезагрузил, но ничего не изменилось.
Если я запущу следующее, то получу ошибку «Отказано в доступе».
sudo echo "This is a test" > /dev/rfcomm0
Почему rfcomm не добавляется автоматически в /dev после подключения модуля usb bluetooth? Модуль Bluetooth совместим, и я могу сканировать и находить устройства через командную строку. Bluez и bluez-utils уже установлены.
решение1
Даже если служба Bluetooth была запущена, /dev/rfcomm0
устройство не появилось бы автоматически.
Как минимум, подсистеме Bluetooth необходимо знать адрес устройства Bluetooth и канал на нем, чтобы /dev/rfcomm*
можно было связать конкретное имя устройства с конкретной комбинацией устройства Bluetooth+канала.
Вы можете использовать rfcomm bind 0 <bdaddr> [channel]
для создания привязки для /dev/rfcomm0
. Если вы не укажете номер канала, по умолчанию будет использоваться канал 1. Если ваша версия rfcomm
все еще поддерживает /etc/bluetooth/rfcomm.conf
файл и у вас есть адрес и информация о канале для /dev/rfcomm0
записи в него, то вы можете опустить адрес и информацию о канале из команды - но вам все равно нужно будет использовать команду для создания привязки.
Новые версии инструментов BlueZ, похоже, больше не документируют файл /etc/bluetooth/rfcomm.conf
. Возможно, вам придется всегда использовать полную форму команды rfcomm bind
для настройки привязок. Возможно, вы захотите добавить эти команды в /etc/rc.local
какой-нибудь пользовательский скрипт запуска, чтобы они автоматически выполнялись во время загрузки, поскольку ассоциации не сохранятся после перезагрузки.
Похоже, что последняя крупная перестройка внутренностей BlueZ стоила нам некоторых функций, связанных с RFCOMM, таких как /etc/bluetooth/rfcomm.conf
файл. Но, по крайней мере, rfcomm
команда все еще доступна и может выполнять свою работу.
решение2
Почему это не делается автоматически? Во-первых, служба Bluetooth должна запустить демон, и если его нет в списке инициализации, вам придется зайти в терминал и запустить его вручную, пока вы не перенастроите список инициализации, включив его.
Причина этого в том, чтобы позволить вам протестировать вашу конфигурацию, прежде чем вы решите сделать все это автоматически на компьютере. Обоснование этого основано на концепциях Unix о том, как должна работать ОС, как пользователям и группам назначаются права на коммуникации и т. д.