まず、する必要がありapt install bluez-tools obexpushd
ます。
ファイルを送受信するには、まずデバイスをセットアップしてペアリングする必要があります。
セットアップ
Arch Wikiから-bluetooth:
Bluetoothctl
bluetoothctl
対話式コマンドを開始します。help
利用可能なコマンドのリストを取得するために入力できます。
- と入力して、コントローラの電源を入れ
power on
ます。デフォルトではオフになっています。
- 入力
devices
して、ペアリングするデバイスのMACアドレスを取得します。
scan on
デバイスがまだリストにない場合は、コマンドを使用してデバイス検出モードに入ります。
- でエージェントをオンにし
agent on
ます。
- Enterキー
pair MAC Address
を押してペアリングを行います(タブ補完機能)。
- PINなしでデバイスを使用している場合、正常に再接続するには、デバイスを手動で信頼する必要があります。入力
trust MAC Address
してください。
- 最後に、を使用
connect MAC_address
して接続を確立します。
最後の2つの箇条書きは、ファイル転送の送信部分には必要ありませんがconnect
、受信部分には後で必要です。
セッションの例は次のようになります。
# bluetoothctl
[NEW] Controller 00:10:20:30:40:50 pi [default]
[bluetooth]# agent KeyboardOnly
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myLino
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no
[bluetooth]# connect 00:12:34:56:78:90
Attempting to connect to 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
Connection successful
変更を永続的にし、再起動後にデバイスをアクティブにするには、udev
ルールが必要です。
/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"
ヒント:すべてのBTインターフェイスに一致させるにKERNEL=="hci0"
はKERNEL=="hci[0-9]*"
、で置き換えます。
サスペンド/レジュームサイクルの後、カスタムsystemdサービスを使用してデバイスの電源を自動的にオンにすることができます。
/etc/systemd/system/bluetooth-auto-power@.service
[Unit]
Description=Bluetooth auto power on
After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target
[Service]
Type=oneshot
ExecStart=/usr/bin/hciconfig %i up
[Install]
WantedBy=suspend.target
たとえば、Bluetoothデバイス名を使用してユニットのインスタンスを有効にしますbluetooth-auto-power@hci0.service
。
これでデバイスがペアリングされました。でもう一方が見えることを確認してくださいbt-device -l
。
送信
次に、systemd
インフラストラクチャを送信して送信を機能させる必要があります。そうしないと、次のエラーが発生します。
Acquiring proxy failed: Error calling StartServiceByName for org.bluez.obex: GDBus.Error:org.freedesktop.systemd1.LoadFailed: Unit dbus-org.bluez.obex.service failed to load: No such file or directory.
必要なsystemd
変更を行います
systemctl --user start obex
sudo systemctl --global enable obex
これにより、ファイルを送信できるようになります。sudo
最初の行のA も失敗します!
でファイルを送信できますbluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
。転送が100%でハングした場合は、ctrlcファイナライズして転送を終了します(または早く中止します)。
デバイス名(12:34:56:78:9A:BC)を知るには、を発行できますbt-device -l
。
受け取る
Raspberry Piフォーラムから:
OBEXプッシュサーバーをセットアップしたいので、これobexpushd
が必要でした。
Bluetoothデーモンの互換性フラグが必要です。行の最後にフラグを/etc/systemd/system/dbus-org.bluez.service
追加して、任意のエディターで編集する必要があります。次のようになります。-C
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd -C
sudo systemctl daemon-reload
編集後、サービスを再起動または再起動します。受信したファイルが置かれる特定のディレクトリを選択しますsudo mkdir /bluetooth
。
でサーバーを起動するとsudo obexpushd -B -o /bluetooth -n
、次のように応答するはずです。
obexpushd 0.11.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
Listening on bluetooth/[00:00:00:00:00:00]:9
それが機能しない場合は、次のようになります。
obexpushd 0.11.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
BtOBEX_ServerRegister: Address already in use
net_init() failed
obexpushd
デフォルトで使用するrfcommチャネル9を占有する別のデーモンまたはプログラムが実行されていることが原因である可能性があります。この場合、次のようにチャネルを23に変更します。
sudo obexpushd -B23 -o /bluetooth -n
チャネル23を使用する。
obexpushd
実行したら、2つ目のターミナルウィンドウを開きます。OBEXサービスが登録されていることを確認できます
sudo sdptool browse local
特に、この場合はチャネル23に表示されます。
Service Name: OBEX Object Push
Service Description: a free OBEX server
Service Provider: obexpushd
Service RecHandle: 0x10005
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 23
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
そのウィンドウで、obexpushd
が実行されている間に、を使用してbluetoothctl
を設定しdiscoverable on
ます。他のデバイスからペアリングします。のobexpushd
実行中にペアリングを行う必要があります。そうでない場合、他のデバイスはサービスが利用可能であることを認識しません。電話がすでにペアリングされている場合は、他のデバイスbluetoothctl
から削除し、を使用してUbuntuコンピューターから削除してから、再度ペアリングします。
接続すると(上記のリストの最後の箇条書き)、ファイルを受信できるようになります。それらは/bluetooth
ディレクトリに表示されます。これらはrootが所有するため、それらにアクセスするにはsudoが必要です。またはchmod 0777 /bluetooth
、Bluetooth認証はユーザーベースではなくデバイスベースであるため、パブリックエクスチェンジディレクトリに対してを実行できます。
obexpushdコマンドを自動化するには、ファイルを作成します /etc/systemd/system/obexpush.service
[Unit]
Description=OBEX Push service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/obexpushd -B23 -o /bluetooth -n
[Install]
WantedBy=multi-user.target
次に、それを自動起動するように設定します
sudo systemctl enable obexpush
を使用してサービスを再起動または再起動sudo systemctl daemon-reload
すると、ファイルを双方向で送受信できるようになります。
ファイルを受信しようとするときは、デバイスを接続することを忘れないでください。