Bluetooth 経由でシリアル コマンドを送受信しようとしています。pyBluez ライブラリをインストールしました。問題は、rfcomm.conf は存在するものの、/dev/ ディレクトリに rfcomm0 がないことです。再起動しましたが、変化はありません。
以下を実行すると、Permission denied エラーが発生します。
sudo echo "This is a test" > /dev/rfcomm0
USB Bluetooth モジュールを接続した後、なぜ rfcomm が /dev に自動的に追加されないのですか? 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 サービスはデーモンを起動する必要がありますが、それが init リストにない場合は、ターミナルに移動して、デーモンが含まれるように init リストを再構成するまで手動で起動する必要があります。
その理由は、コンピュータ上ですべてを自動化する前に、構成をテストできるようにするためです。この背後にある理由は、OS がどのように動作するか、ユーザーとグループに通信権限をどのように割り当てるかなどに関する Unix の概念に基づいています。