Raspberry PiでBluetoothテザリングをしたいものの、巷の解説記事によくあるbt-panがダウンロードできない!ということでお困りの方へ。
TL;DR (bookworm以降)
コマンドラインで行うBluetoothテザリング
Network Managerの導入により、bt-panを用いた以前の方法だとネットワークデバイス(bnep0)は作られるものの、追加の操作(sudo dhclient bnep0
)をしないとIPアドレスが割り振られないため、おとなしくNetwork Managerのお作法に従う方がよいです。
# 接続
$ sudo nmcli d connect (接続先の機器のMACアドレス)
or
$ sudo nmcli con up (プロファイル名)
# 切断
$ sudo nmcli d disconnect (接続先の機器のMACアドレス)
or
$ sudo nmcli con down (プロファイル名)
- 接続先の機器のMACアドレス(例:12:34:56:78:9A:BC)は事前にペアリングをして、アドレスを取得してください。
- Bluetoothペアリングは、Raspberry Pi Zero(W, WH, 2 W)のセットアップの「(オプション)Bluetoothテザリングによるネットワーク設定」等を参照ください。
- プロファイル名は、
nmcli connection
コマンドで表示される3つ目の項目TYPE
がbluetooth
の行の1つ目の項目NAME
の値を入れます。下の例だと"XXX Network"
(XXXはペアリング先の携帯電話のBluetooth表示名が入る)になります。
NAME UUID TYPE DEVICE
preconfigured (省略) wifi wlan0
lo (省略) loopback lo
XXX Network (省略) bluetooth --
- Network Manager経由の操作だと
sudo
が必須なので、以前の方法のようにユーザー権限のプログラムでdbus経由で叩いて完結、ということができなくなりました。
起動時に行うBluetoothテザリング
nmcliコマンドで設定を変更します。/etc/rc.localやsystemdに頼る必要はありません。
$ sudo nmcli c modify (プロファイル名) connection.autoconnect yes
確認方法
$ nmcli c show (プロファイル名)
connection.id: ~
(中略)
(変更前)
connection.autoconnect: no
(変更後)
connection.autoconnect: yes
デスクトップ環境で行うBluetoothテザリング
まず、デスクトップ右上にあるBluetoothのアイコンからペアリングを行います。(特に手順は示しません)
さらに以下の手順でBluetoothテザリングを実施します。
- Wifiのアイコンをクリック
- 「高度なオプション」>「接続を編集する」
- Bluetoothの接続をダブルクリックで編集
- 何も更新せずに「保存」を押すと、接続が始まります。
- 正確には"Connect automatically with priority"にチェックがついている必要あり
TL;DR (bullseye以前)
bt-panの代わりが欲しい方はこちらをお使いください。
$ wget https://gist.githubusercontent.com/hishizuka/d66189ec81316945c33531f7d4ddc68d/raw/319621b045254002beb774c701eafe0fc21c0f02/bt-pan
本家 (https://github.com/mk-fg/fgtk) では2022/12にpython2系スクリプトは削除ということで、配布終了してしまったようです。
ただ、有名なスクリプトであり、ライセンスがWTFPL(どうとでも勝手にしやがれクソッタレ・公衆利用許諾(契約)書))であるため、python3に対応した版をGithub Gistで公開しました。
Bluetoothテザリングはここに示すコマンドだけではできず、事前にペアリングが必要です。
Raspberry Pi Zero(W, WH, 2 W)のセットアップの「(オプション)Bluetoothテザリングによるネットワーク設定」等を参照ください。
コマンド1発でもできます(dbus-send)
bt-panの中身を紐解くと、LinuxのBluezのNetwork APIをD-Bus経由で叩いているだけで、接続はConnectメソッドを、切断はDisconnectメソッドを実行します。
D-Busをコマンドで操作できるdbus-send
を使い、コマンド1発でもできます。
接続
$ dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0/dev_12_34_56_78_9A_BC org.bluez.Network1.Connect string:"nap"
Bookwormの場合、IPアドレスが取得できないので、以下を追加で実行。
$ sudo dhclient bnep0
切断
$ dbus-send --system --print-reply --type=method_call --dest=org.bluez /org/bluez/hci0/dev_12_34_56_78_9A_BC org.bluez.Network1.Disconnect
コマンドの途中にある /org/bluez/hci0/dev_12_34_56_78_9A_BC について、
- hci0 をお使いのbluetoothアダプタに変更(通常はそのまま。USBドングルを使う場合は
hciconfig
で確認) - dev_12_34_56_78_9A_BC は接続先の機器のMACアドレス 12:34:56:78:9A:BC の区切り文字をアンダーバーに変換したものにしてください。