芽萌丸プログラミング部 @programming
@programming
2020/10/29 12:35 更新✏

ターミナルからBluetooth経由でファイル送信

LinuxのターミナルからBluetooth経由でファイルを送信する方法のメモです。

目次:

前提

Bluetooth関連ツールのセットアップ

もしBluetooth関連ツールのインストールがまだなら:

## Bluetooth関連ツールのインストール:
$ sudo apt install bluez bluez-utils gnome-bluetooth

## Bluetoothデーモンの起動:
$ sudo systemctl start bluetooth
## 起動時にサービスを有効化:
$ sudo systemctl enable bluetooth

端末同士のペアリング

端末同士のBluetoothペアリングにはbluetoothctlというCLIツールを使うと簡単です。

例えば、Linuxマシンからターゲット端末(MACアドレスaa:bb:cc:dd:ee:ff)にBluetooth接続したいなら、ターゲット端末のBluetoothがONになっていることを確認後、Linuxマシンのターミナルから以下のようにペアリングを行います:

# bluetoothctlを実行
$ sudo bluetoothctl

## 周辺デバイスのスキャンを開始:
[bluetooth]# scan on
Discovery started
[CHG] Controller xx:xx:xx:xx:xx:xx Discovering: yes
[NEW] Device aa:bb:cc:dd:ee:ff MyTargetDevice # <= ターゲット端末を発見!

## ターゲット端末(aa:bb:cc:dd:ee:ff)を発見したのでスキャンを止める:
[bluetooth]# scan off

## ペアリング:
[bluetooth]# pair aa:bb:cc:dd:ee:ff
# ...ここで相手のデバイス側にペアリング要求ダイアログが表示されます。

## 接続が完了したら次からは自動的にセットアップできるようにトラストしておきます:
[bluetooth]# trust aa:bb:cc:dd:ee:ff

## 一旦終了:
[bluetooth]# quit

## もう一度bluetoothctlを実行してみる:
$ sudo bluetoothctl
[NEW] Device aa:bb:cc:dd:ee:ff MyTargetDevice # <= 自動的にセットアップされています!
[bluetooth]# quit

Bluetooth経由でファイルを送信

CLIでファイル送信

ペアリングが完了していれば、以下の手順でターゲット端末へファイルを送信することができます: (ターゲット端末上ではファイルの受信要求に許可を出す必要があります。)

## 送信先のチャンネルを取得するために以下のコマンドを実行:
$ sdptool search --bdaddr aa:bb:cc:dd:ee:ff OPUSH

    Searching for OPUSH on aa:bb:cc:dd:ee:ff ...
    Service Name: OBEX Object Push
    Service RecHandle: 0x10004
    Service Class ID List:
      "OBEX Object Push" (0x1105)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 12 # <=== チャンネルは 12 と判明!
      "OBEX" (0x0008)
    Profile Descriptor List:
      "OBEX Object Push" (0x1105)
        Version: 0x0100

## 送信先MACアドレス(aa:bb:cc:dd:ee:ff)とチャンネル(12)を指定して hoge.txt を送信:
$ obexftp --nopath --noconn --uuid none --bluetooth aa:bb:cc:dd:ee:ff --channel 12 --put ./hoge.txt

CLIでファイル送信 (要GNOME)

bluetooth-sendtoを使えばもっと簡単にファイル送信することもできます: (ただし、この方法は完全なヘッドレスではありません。GNOMEのWindowが立ち上がる半GUIプログラムです。)

# ./hoge.txtをMACアドレス aa:bb:cc:dd:ee:ff の端末に送信:
$ bluetooth-sendto --device=aa:bb:cc:dd:ee:ff ./hoge.txt

以上です。

Linux

芽萌丸プログラミング部 @programming
芽萌丸プログラミング部@programming
プログラミング関連アカウント。Web標準技術を中心に書いていきます。フロントエンドからサーバサイドまで JavaScript だけで済ませたい人たちの集いです。記事は主に @TanakaSoftwareLab が担当。
オススメ:Zattoyomiで時事ネタチェックの時間節約!