Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

ラズパイ3でbluetooth経由でログイン

最近、ラズパイをネットワーク接続できない(しづらい)環境で操作する必要があり、どうしようか悩んでいました。
モニタ + キーボードで操作だと機材用意しなければならないし、、、
ラズパイzeroであれば、USB OTG(On the Go)が使えるのでUSB経由でssh接続出来るんだけど。。。泣

色々調べながら考えたところ1つ方法を見つけました!!
ラズパイ3のbluetooth経由でログインすればいいんです!!

ということで、早速セットアップしてみたのですが詰まったところもあったので備忘録として残したいと思います。
※【参考】のURLがとても分かりやすかったです(というかかなり参考にさせて頂いております)。

【環境】
 ・PC    :Windows 10
 ・ラズパイ3

まずはPCとラズパイ3とのペアリングです。

ラズパイ3側で下記を実行。

sudo bluetoothctl
[bluetooth] power on
[bluetooth] discoverable on
[bluetooth] agent on
[bluetooth] default-agent

これでラズパイ3側で受付出来るようになりました。


次にwindows10側です。
windowsの設定 > デバイス > Bluetoothとその他のデバイス
に移動して、
Bluetoothまたはその他のデバイスを追加する
を押下。

続いてBluetoothを押下。

少し待つと、"raspberry pi"が出てくるので押下してペアリングが完了です。

次にbluetooth経由でのシリアル通信を行うための設定を行います。
まずdbus-org.bluez.serviceを編集。

sudo vim /etc/systemd/system/dbus-org.bluez.service

[変更前]
ExecStart=/usr/lib/bluetooth/bluetoothd

       ↓

[変更後]
ExecStart=/usr/lib/bluetooth/bluetoothd --compat

またこちらを実行します。

sudo systemctl daemon-reload
sudo systemctl restart bluetooth
sudo chmod 777 /var/run/sdp

sdptool browse local
sudo sdptool add --channel=22 SP

これでbluetooth経由で通信するための設定が完了です。
では実際に通信をしてみます!!


ラズパイ側で下記を実行!!

sudo rfcomm -r watch 0 22 /sbin/agetty -L rfcomm0 115200 &

今回windows10 PCにはTera Termがインストールされておりますのでこちらを用いて接続を実行!!
繋がりました!!これでラズパイとPCがあればつなげることが出来ます!!

。。。いえ、これだけではダメです泣。
ネットワークなし、モニタ、キーボードなしで先ほどのコマンドをどのように打てばよいでしょうか??


起動時に自動実行させるようにセッティングしておかなければならないのです!!
なので、次にデーモンの設定に移ります。

先ほど編集したdbus-org.bluez.serviceを再編集。

sudo vim /etc/systemd/system/dbus-org.bluez.service

[変更前]
ExecStart=/usr/lib/bluetooth/bluetoothd --compat

       ↓

[変更後]
ExecStart=/usr/lib/bluetooth/bluetoothd --compat
ExecStartPost=/usr/bin/sdptool add SP

そして、デーモンを作成します。
/etc/systemd/system配下にrfcomm.serviceを新規作成します。

[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service

[Service]
ExecStart=/usr/bin/rfcomm watch 0 1 /usr/bin/setsid /sbin/agetty -L rfcomm0 115200

[Install]
WantedBy=multi-user.target

そして、デーモンを起動。

sudo systemctl daemon-reload
sudo systemctl restart bluetooth
sudo systemctl start rfcomm
sudo systemctl enable rfcomm

これで再起動してもbluetooth接続できるようになったかと思います。

最後に、
bluetooth経由でログイン使ってみましたが、、、
結構ブチブチ切れてしまって毎回繋ぎ直さなければならなくなって結構不便でした泣。
何とかやりたいことは出来たのでよかったですが、、、通常運用は難しい感じでした。
あくまで補助用って感じかな?と思いました。

もしかしたら設定とか見直せば改善できるかもしれないので、時間を見つけて少し調べてみたいと思います!!

【参考】
qiita.com
totech.hateblo.jp
mattintosh.hatenablog.com