Linux Bluetooth Obex

From Variscite Wiki
Revision as of 13:19, 12 November 2020 by Eran (talk | contribs)
Bluetooth File Transfer

Pairing with Bluetooth device

To send files to each other two bluetooth devices should be paired first. Use bluetoothctl tool to manage the pairing

$ bluetoothctl
[bluetooth]# power on
[bluetooth]# pairable on
[bluetooth]# scan on

Copy mac address

[bluetooth]# scan off
[bluetooth]# pair <mac address>

Approve pairing on Device if required

[bluetooth]# trust <mac address>
[bluetooth]# quit

For example when pairing with a PC the following is done:

root@imx6ul-var-dart:~# bluetoothctl
[NEW] Controller 96:93:E0:47:39:89 Variscite [default]
[bluetooth]# power on
[CHG] Controller 96:93:E0:47:39:89 Class: 0x300100
Changing power on succeeded
[CHG] Controller 96:93:E0:47:39:89 Powered: yes
[bluetooth]# pairable on
Changing pairable on succeeded
[bluetooth]# scan on
Discovery started
[CHG] Controller 96:93:E0:47:39:89 Discovering: yes
[bluetooth]# random: nonblocking pool is initialized
[NEW] Device B8:6C:E8:60:C0:8F Galaxy S5
[NEW] Device 00:1A:7D:DA:71:0B Ubuntu-PC
[bluetooth]# scan off
[CHG] Device 38:BC:1A:20:14:5D RSSI is nil
[CHG] Device 00:1A:7D:DA:71:0B RSSI is nil
[CHG] Device B8:6C:E8:60:C0:8F RSSI is nil
[CHG] Controller 96:93:E0:47:39:89 Discovering: no
Discovery stopped
[bluetooth]# pair 00:1A:7D:DA:71:0B
Attempting to pair with 00:1A:7D:DA:71:0B
[CHG] Device 00:1A:7D:DA:71:0B Connected: yes
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001104-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001106-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001133-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device 00:1A:7D:DA:71:0B UUIDs: 00005005-0000-1000-8000-0002ee000001
[CHG] Device 00:1A:7D:DA:71:0B Paired: yes
Pairing successful
[CHG] Device 00:1A:7D:DA:71:0B Connected: no
[bluetooth]# trust 00:1A:7D:DA:71:0B
[CHG] Device 00:1A:7D:DA:71:0B Trusted: yes
Changing 00:1A:7D:DA:71:0B trust succeeded
[bluetooth]# quit
[DEL] Controller 96:93:E0:47:39:89 Variscite [default]
root@imx6ul-var-dart:~# 

Sending files using OBEX Protocol

To send a file to a paired device use obexctl tool.

$ DBUS_SESSION_BUS_ADDRESS=unix:path=/var/run/dbus/system_bus_socket obexctl
[obex]# connect <mac address>
[obex]# send <file>
[obex]# quit

For example, to send /etc/fstab file to a paired PC from the example above:

root@imx6ul-var-dart:~# DBUS_SESSION_BUS_ADDRESS=unix:path=/var/run/dbus/system_bus_socket obexctl 
[NEW] Client /org/bluez/obex 
[obex]# connect 00:1A:7D:DA:71:0B
Attempting to connect to 00:1A:7D:DA:71:0B
[NEW] Session /org/bluez/obex/client/session0 [default]
[NEW] ObjectPush /org/bluez/obex/client/session0 
Connection successful
[00:1A:7D:DA:71:0B]# send /etc/fstab
Attempting to send /etc/fstab to /org/bluez/obex/client/session0
[NEW] Transfer /org/bluez/obex/client/session0/transfer0 
Transfer /org/bluez/obex/client/session0/transfer0
        Status: queued
        Name: fstab
        Size: 637
        Filename: /etc/fstab
        Session: /org/bluez/obex/client/session0
[CHG] Transfer /org/bluez/obex/client/session0/transfer0 Status: complete
[DEL] Transfer /org/bluez/obex/client/session0/transfer0 

Receiving files using OBEX Protocol

No special action is required to receive a file that was sent from a paired device. The file will be stored under /tmp/bluetooth-inbox.