Менеджер bluetooth – Blueman | Русскоязычная документация по Ubuntu

Bluetooth (linux)

This article describes how to use Bluetooth in Embedded Linux. For modules that don’t come with Bluetooth hardware on-module, support can easily be added by using a USB Bluetooth module. The table below presents the modules with integrated Bluetooth:

Toradex SoMs featuring the Azurewave AW-CM276NF Wi-Fi / Bluetooth module:

Toradex SoMs featuring the Wi2Wi WM828CC6 Wi-Fi / Bluetooth module:

Note: Wi2Wi WM828CC6 has been replaced by Azurewave AW-CM276NF on newer Toradex SoMs.

Wi-Fi adapter characteristics summary:

Since the BSP 2.7b4, Bluetooth support is added to the Toradex pre-built image through the kernel driver backports with BlueZ 5 bluetooth software stack. Please see the article below for instructions about how to cross-compile the driver backports:

Kernel Driver Backports Integration

BlueZ 5 is already shipped in the pre-built Reference Images for Yocto Project and is the software stack used for Bluetooth interaction.

Additional user space utilities can be added to a custom Linux image. For this, a Yocto Project/OpenEmbedded build is required. Please refer to the following articles:

An example is provided with some useful packages. Add the following to your conf/local.conf:

local.conf

IMAGE_INSTALL_append = " obexftp obex-data-server python3 python3-dbus python3-pygobject python3-pybluez"

Build the image for your computer on module and install it with the Toradex Easy Installer.

A USB Bluetooth module should be detected after connecting it to the USB port (if using a Bluetooth USB dongle):

root@colibri-vf:~# lsusb

Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

There is a systemd Bluetooth service already enabled. Start it:

root@colibri-vf:~# systemctl start bluetooth.service

Enable the Bluetooth device using ConnMan.

root@colibri-imx6ull:~# connmanctl enable bluetooth

Enabled bluetooth

hciconfig should show the connected bluetooth devices up and running. Other information such as the MAC address and device bus are also provided.

For a USB dongle:

root@colibri-vf:~# hciconfig

hci0: Type: BR/EDR Bus: USB

BD Address: 00:1A:7D:DA:71:13 ACL MTU: 310:10 SCO MTU: 64:8

UP RUNNING

RX bytes:574 acl:0 sco:0 events:30 errors:0

TX bytes:368 acl:0 sco:0 commands:30 errors:0

For an SDIO module:

root@colibri-imx6ull:~# hciconfig

hci0: Type: Primary Bus: SDIO

BD Address: 00:19:88:5E:10:B1 ACL MTU: 1021:7 SCO MTU: 120:6

UP RUNNING

RX bytes:1882 acl:0 sco:0 events:83 errors:0

TX bytes:2075 acl:0 sco:0 commands:83 errors:0

Starting with BSP version 2.7, bluetoothctl was added to the Linux image. It enables scanning, pairing and connecting to devices, among other features.

Start bluetoothctl:

root@colibri-imx6ull:~# bluetoothctl

[NEW] Controller 00:19:88:5E:10:B1 colibri-imx6ull [default]

Agent registered

List all available options:

[bluetooth]# help

Available commands:

list List available controllers

show [ctrl] Controller information

...

Scan for Bluetooth devices:

[bluetooth]# scan on

After you enable scanning, it will begin to list available devices:

Discovery started

[CHG] Controller 00:19:88:5E:10:B1 Discovering: yes

[NEW] Device 98:39:8E:1B:D8:88 Galaxy A5 (2023)

[CHG] Device 98:39:8E:1B:D8:88 RSSI: -86

The device number listed is the device MAC address. In the example above its value is 98:39:8E:1B:D8:88. You can stop scanning once you find the device you are looking for:

[bluetooth]# scan off

Pair to the device using its MAC address:

[bluetooth]# pair 98:39:8E:1B:D8:88

Attempting to pair with 98:39:8E:1B:D8:88

[CHG] Device 98:39:8E:1B:D8:88 Connected: yes

Request confirmation

[agent] Confirm passkey 117022 (yes/no):

Confirm that the passkey is the same as displayed on your device:

[agent] Confirm passkey 117022 (yes/no): yes

[CHG] Device 98:39:8E:1B:D8:88 Modalias: bluetooth:v0075p0100d0200

[CHG] Device 98:39:8E:1B:D8:88 UUIDs: 00001105-0000-1000-8000-00805f9b34fb

...

[CHG] Device 98:39:8E:1B:D8:88 ServicesResolved: yes

[CHG] Device 98:39:8E:1B:D8:88 Paired: yes

Pairing successful

...

[CHG] Device 98:39:8E:1B:D8:88 Connected: no

Trust paired device:

[bluetooth]# trust 98:39:8E:1B:D8:88

[CHG] Device 98:39:8E:1B:D8:88 Trusted: yes

Changing 98:39:8E:1B:D8:88 trust succeeded

Connect to the Bluetooth device:

[bluetooth]# connect 98:39:8E:1B:D8:88

Attempting to connect to 98:39:8E:1B:D8:88

[CHG] Device 98:39:8E:1B:D8:88 Connected: yes

Connection successful

[CHG] Device 98:39:8E:1B:D8:88 ServicesResolved: yes

[Galaxy A5 (2023)]#

List the connected device information, including supported services:

[Galaxy A5 (2023)]# info 98:39:8E:1B:D8:88

Device 98:39:8E:1B:D8:88

Name: Galaxy A5 (2023)

Alias: Galaxy A5 (2023)

Class: 0x5a020c

Icon: phone

Paired: yes

Trusted: yes

Blocked: no

Connected: yes

LegacyPairing: no

UUID: OBEX Object Push (00001105-0000-1000-8000-00805f9b34fb)

UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb)

UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)

UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb)

UUID: PANU (00001115-0000-1000-8000-00805f9b34fb)

UUID: NAP (00001116-0000-1000-8000-00805f9b34fb)

UUID: Handsfree Audio Gateway (0000111f-0000-1000-8000-00805f9b34fb)

UUID: Phonebook Access Server (0000112f-0000-1000-8000-00805f9b34fb)

UUID: Message Access Server (00001132-0000-1000-8000-00805f9b34fb)

UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)

UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)

UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)

UUID: Vendor specific (936da01f-9abd-4d9d-80c7-02af85c822a8)

Modalias: bluetooth:v0075p0100d0200

ManufacturerData Key: 0x0075

ManufacturerData Value: 0x77

ManufacturerData Value: 0x98

ManufacturerData Value: 0x39

ManufacturerData Value: 0x8e

ManufacturerData Value: 0x1b

ManufacturerData Value: 0xd8

ManufacturerData Value: 0x88

You may want to explore the BlueZ API documentation.

Warning: obexftp and other old utilities like rfcomm or sdptool don’t seem to work correctly with BlueZ 5 unless you do the following procedure.

In our BSP 2.8, we updated the BlueZ stack into version 5.46. However, this meant that, by default, most of the older available tools that use the C API won’t work out of the box.

However, you can change the Bluetooth service to launch the Bluetooth daemon with the compatibility mode to enable the use of this older API.

Edit the Bluetooth service to enable the compatibility mode

root@colibri-imx6ull:~# systemctl status bluetooth
● bluetooth.service - Bluetooth service Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset Active: active (running) since Mon 2023-04-01 18:57:46 UTC; 10min ago Docs: man:bluetoothd(8) Main PID: 302(bluetoothd) Status: "Running" CGroup: /system.slice/bluetooth.service └─302/usr/libexec/bluetooth/bluetoothd
 
Apr 01 18:57:46 colibri-imx6ull systemd[1]: Starting Bluetooth service...
Apr 01 18:57:46 colibri-imx6ull bluetoothd[302]: Bluetooth daemon 5.46Apr 01 18:57:46 colibri-imx6ull systemd[1]: Started Bluetooth service.
Apr 01 18:57:46 colibri-imx6ull bluetoothd[302]: Starting SDP server
Apr 01 18:57:47 colibri-imx6ull bluetoothd[302]: Bluetooth management interface 
root@colibri-imx6ull:~# vi/lib/systemd/system/bluetooth.service

Then we change the line ExecStart from:

ExecStart=/usr/libexec/bluetooth/bluetoothd 

to

ExecStart=/usr/libexec/bluetooth/bluetoothd --compat

Finally, we save the file and reload the daemon

root@colibri-imx6ull:~# systemctl daemon-reloadroot@colibri-imx6ull:~# systemctl restart bluetooth

SPP, known as Serial Port Profile, is one of the most basic Bluetooth profiles that could confirm the operation between both devices.

At this point, you should have your Bluetooth enabled, the compatibility mode enabled and, for simplicity, have both devices paired and trusted already.

Warning: Since the following tools are based on the older C API, with BlueZ 5 the compatibility mode must be used.

Add the SPP to the list of Bluetooth profiles. In the example below the Bluetooth channel number to access this profile is 1:

root@colibri-imx6ull:~# sdptool add --channel=1 SP
Serial Port service registered

Enable the background listening for raw connections on the channel 1:

root@colibri-imx6ull:~# rfcomm --raw listen /dev/rfcomm0 1&Waiting for connection on channel 1

Check the manual pages of rfcomm and sdptool for more complete information.

On the other device, connect to the Toradex module by using an SPP compatible application. We have tested to be working with:

At this point you should be able to send and read information through the rfcomm port with the echo and cat commands.

root@colibri-imx6ull:~# echo"Hello World from Toradex">/dev/rfcomm0

“Hello World from Toradex” should appear on the other end.

And if we send something from the other end, we can read it like this:

root@colibri-imx6ull:~# cat/dev/rfcomm0
Hello Toradex!

Warning: Disclaimer: As we have no control of what it is included or removed on BlueZ, there is a chance that in future revisions the compatibility mode might be removed. We recommend to use the newer D-bus API for new developments. However, we don’t expect to make any revision changes on our 2.8 BSP.

At the moment of writing this documentation (Q4 2023), there are not many newer tools updated tools that use the D-bus API and therefore, for an out-of-the-box experience, it is very likely that you would want to enable the compatibility mode of the C API (See above).

You may find more information about this under BlueZ 5 D-Bus API Documentation.

Merely as an example, here is a project of an SPP echo server and client that will make the serial port service available for other devices:
SPP BlueZ5 example

This program will capture the messages sent through SPP from another device and send them back to it. It is just a mere PoC, but feel free to use it as reference for your development.

PyBluez is a Python module that allows access to system Bluetooth resources. See how to add it to a custom Linux image in the section Custom Image above. Check the project GitHub page for documentation.

If you would like to test the samples provided by PyBluez, clone the git repository to the board:

opkg update

opkg install git

git clone https://github.com/karulis/pybluez.git

Then you can run the samples using the Python interpreter:

python pybluez/examples/<sample-folder>/<sample-name>.py


Running PyBluez samples

root@colibri-imx6ull:~# python pybluez/examples/simple/inquiry.py

performing inquiry...

found 3 devices

98:39:8E:1B:D8:88 - Galaxy A5 (2023)

3C:77:E6:D2:1E:9C - NOTEJOAO

F4:B7:E2:DD:33:C2 - leonardo

root@colibri-imx6ull:~# python pybluez/examples/simple/sdp-browse.py 98:39:8E:1B:D8:88

found 11 services on 98:39:8E:1B:D8:88

Service Name: None

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: L2CAP

channel/PSM: 31

svc classes: ['1801']

profiles: []

service id: None

Service Name: None

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: L2CAP

channel/PSM: 31

svc classes: ['1800']

profiles: []

service id: None

Service Name: AV Remote Control Target

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: L2CAP

channel/PSM: 23

svc classes: ['110C']

profiles: [('110E', 260)]

service id: None

Service Name: Advanced Audio

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: L2CAP

channel/PSM: 25

svc classes: ['110A']

profiles: [('110D', 259)]

service id: None

Service Name: Headset Gateway

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: RFCOMM

channel/PSM: 2

svc classes: ['1112', '1203']

profiles: [('1108', 258)]

service id: None

Service Name: Handsfree Gateway

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: RFCOMM

channel/PSM: 3

svc classes: ['111F', '1203']

profiles: [('111E', 263)]

service id: None

Service Name: Android Network Access Point

Host: 98:39:8E:1B:D8:88

Description: NAP

Provided By: None

Protocol: L2CAP

channel/PSM: 15

svc classes: ['1116']

profiles: [('1116', 256)]

service id: None

Service Name: Android Network User

Host: 98:39:8E:1B:D8:88

Description: PANU

Provided By: None

Protocol: L2CAP

channel/PSM: 15

svc classes: ['1115']

profiles: [('1115', 256)]

service id: None

Service Name: OBEX Phonebook Access Server

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: RFCOMM

channel/PSM: 19

svc classes: ['112F']

profiles: [('1130', 257)]

service id: None

Service Name: SMS/MMS

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: RFCOMM

channel/PSM: 4

svc classes: ['1132']

profiles: [('1134', 258)]

service id: None

Service Name: OBEX Object Push

Host: 98:39:8E:1B:D8:88

Description: None

Provided By: None

Protocol: RFCOMM

channel/PSM: 12

svc classes: ['1105']

profiles: [('1105', 256)]

service id: None

Install PyBluez in a computer that has Bluetooth and clone the PyBluez repository. For Ubuntu:

user@pc:~$ sudo apt-get install bluez libbluetooth-dev

user@pc:~$ pip install pybluez

user@pc:~$ git clone https://github.com/karulis/pybluez.git

Run the L2CAP server sample on your computer:

user@pc:~$ python pybluez/examples/simple/l2capserver.py

Run the L2CAP sample on the SoM. Type something and press Enter. See that the message is sent to your computer.

root@colibri-imx6ull:~# python pybluez/examples/simple/l2capclient.py F4:B7:E2:DD:33:C2

trying to connect to F4:B7:E2:DD:33:C2 on PSM 0x1001

connected. type stuff

this is a test

('Data received:', 'Echo => this is a test')

user@pc:~$ python pybluez/examples/simple/l2capserver.py

('Accepted connection from ', ('00:19:88:5E:10:B1', 4097))

('Data received: ', 'this is a test')

You must pair to another device before transferring files. Please see the Bluetoothctl section above for an example on how to pair.

Alternatively, a Python sample for pairing is provided below. Currently it only works with BSP version 2.5 and bluez4.


Python sample for Bluetooth pairing

The below simple-agent python script has been taken from the Openmoko – Manually using Bluetooth article. Note that this script works only with BSP version 2.5 and bluez4. First transfer the below python script to the module.

#!/usr/bin/python

import gobject

import sys

import dbus

import dbus.service

import dbus.mainloop.glib

class Rejected(dbus.DBusException):

_dbus_error_name = "org.bluez.Error.Rejected"

class Agent(dbus.service.Object):

exit_on_release = True

def set_exit_on_release(self, exit_on_release):

self.exit_on_release = exit_on_release

@dbus.service.method("org.bluez.Agent", in_signature="", out_signature="")

def Release(self):

print "Release"

if self.exit_on_release:

mainloop.quit()

@dbus.service.method("org.bluez.Agent", in_signature="os", out_signature="")

def Authorize(self, device, uuid):

print "Authorize (%s, %s)" % (device, uuid)

@dbus.service.method("org.bluez.Agent", in_signature="o", out_signature="s")

def RequestPinCode(self, device):

print "RequestPinCode (%s)" % (device)

return raw_input("Enter PIN Code: ")

@dbus.service.method("org.bluez.Agent", in_signature="o", out_signature="u")

def RequestPasskey(self, device):

print "RequestPasskey (%s)" % (device)

passkey = raw_input("Enter passkey: ")

return dbus.UInt32(passkey)

@dbus.service.method("org.bluez.Agent", in_signature="ou", out_signature="")

def DisplayPasskey(self, device, passkey):

print "DisplayPasskey (%s, %d)" % (device, passkey)

@dbus.service.method("org.bluez.Agent", in_signature="ou", out_signature="")

def RequestConfirmation(self, device, passkey):

print "RequestConfirmation (%s, %d)" % (device, passkey)

confirm = raw_input("Confirm passkey (yes/no): ")

if (confirm == "yes"):

return

raise Rejected("Passkey doesn't match")

@dbus.service.method("org.bluez.Agent", in_signature="s", out_signature="")

def ConfirmModeChange(self, mode):

print "ConfirmModeChange (%s)" % (mode)

@dbus.service.method("org.bluez.Agent", in_signature="", out_signature="")

def Cancel(self):

print "Cancel"

def create_device_reply(device):

print "New device (%s)" % (device)

mainloop.quit()

def create_device_error(error):

print "Creating device failed: %s" % (error)

mainloop.quit()

if __name__ == '__main__':

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

bus = dbus.SystemBus()

manager = dbus.Interface(bus.get_object("org.bluez", "/"), "org.bluez.Manager")

if len(sys.argv) > 1:

path = manager.FindAdapter(sys.argv[1])

else:

path = manager.DefaultAdapter()

adapter = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Adapter")

path = "/test/agent"

agent = Agent(bus, path)

mainloop = gobject.MainLoop()

if len(sys.argv) > 2:

if len(sys.argv) > 3:

device = adapter.FindDevice(sys.argv[2])

adapter.RemoveDevice(device)

agent.set_exit_on_release(False)

adapter.CreatePairedDevice(sys.argv[2], path, "DisplayYesNo", reply_handler=create_device_reply, error_handler=create_device_error)

else:

adapter.RegisterAgent(path, "DisplayYesNo")

print "Agent registered"

mainloop.run()

#adapter.UnregisterAgent(path)

#print "Agent unregistered"

The above script can also be downloaded from here. Give it executable permissions by running chmod and then pair the relevant device with the simple-agent script, which in this example is as follows.

root@colibri-vf:~# chmod 755 simple-agent.py

root@colibri-vf:~# ./simple-agent.py hci0 14:DD:A9:36:DD:FC

This will pair the two devices. Should the devices have been paired before, one may get an error message as below.

root@colibri-vf:~# ./simple-agent.py hci0 14:DD:A9:36:DD:FC

Creating device failed: org.bluez.Error.AlreadyExists: Already Exists

In the above scenario directly proceed with the file transfer by obexftp.

On an Android Lollipop device install an application like Bluetooth File Transfer which provides the obexftp service. Enable Bluetooth and open the Bluetooth File Transfer application for enabling obexftp service on the Android device.
For some Android devices running Icecream Sandwich, the obexftp service might be available by default which could be enabled from the Bluetooth settings or elsewhere depending on the device.

From the module a file can be transferred as follows.

root@colibri-vf:~# obexftp -b 14:DD:A9:36:DD:FC -p file.txt

Browsing 14:DD:A9:36:DD:FC ...

Connecting..done

Tried to connect for 20ms

Sending "file.txt"...|done

Disconnecting../done

The transferred file is now available on the device and is shown by the Bluetooth File Transfer application.

The python packages python-dbus, python-pygobject and python itself are added for using D-Bus with Python in the simple-agent python script which is used for pairing. On a device with limited NAND flash like the Colibri VF50 it is possible that the generated image with these packages included, might not fit in the flash memory. It should be possible to do what the simple-agent python script does using the low-level D-Bus C API.

Включение bluetooth в linux | блог про радио и linux

Для того, чтобы передать файлы со смартфона на персональный компьютер или вывести звук с ПК на Bluetooth колонку или наушники, нужно подсоединить Bluetooth USB адаптер к компьютеру, включить и настроить Bluetooth. Данная статья о том, как включить Bluetooth в Linux.

Прежде всего, нужно подключить USB адаптер Bluetooth к компьютеру, что я и сделал перед включением компьютера.

Затем, установил нужные пакеты:

sudo apt-get install blueman bluez pulseaudio-module-bluetooth

Стартовал службу в Ubuntu:

sudo /etc/init.d/bluetooth start

Ответ:
[ ok ] Starting bluetooth (via systemctl): bluetooth.service.

В меню программ нашёл “Менеджер Bluetooth”:

  • “Для того, чтобы менеджер устройств работал, должен быть включен Bluetooth”
  • нажал “Включить Bluetooth”

После чего появился значок Bluetooth в системном строке (рядом с переключателем клавиатуры).
Если нажать нажать на иконку, откроется меню.

bluetooth

Запускаю подменю “Адаптеры…”.

Может появиться окно “Адаптеры не найдены” (хотя адаптер был подключен ранее).
То же самое происходит, если вытащить адаптер и вставить обратно. Команда hcitool dev
не находит устройства.

Решение:

  1. Вытащил и вновь подключил адаптер к USB. Bluetooth adapter Спустя примерно 15 секунд появился значок Bt в трее.
  2. Если значок с красным крестиком, просто включаем Bluetooth в контекстном меню.
    ON
  3. Запустил программу “Менеджер Bluetooth”

В “Менеджере Bluetooth (самая левая иконка в системном лотке) пункт
Системный лоток – Bluetooth – Адаптеры….

  • Включил пункт “Видимый всегда”.
  • Нажал кнопку Close для применения изменений.

Теперь все настроено. Со смартфона попробовал передать файл на компьютер с помощью Bluetooth (выбрал картинку и нажал “Поделиться” или “Переслать” – через Bluetooth).

На компьютере в трее включился зеленый значок Bt, возникло диалоговое окно о приеме файла.
receive

Подтвердил прием файла. Через какое-то время, около полминуты, появилось уведомление о том, что файл успешно принят.

В какую папку упал файл?
В домашнюю папку, в подкаталог “Загрузки”.

Вот принятый через Bt файл:
example


Установка пакета blueman добавляет апплет для запуска “Менеджер Bluetooth” в автозагрузку/автозапуск сеанса Linux, аппет носит имя blueman-applet.

Иконка Bt будет выведена в системный лоток при следующем сеансе или запуске системы.
автозапуск

Программа для настройки Bluetooth носит название:
blueman-manager.

Использование

Как уже было сказано, для запуска менеджера достаточно щелкнуть левой кнопкой по иконке bluetooth в области уведомления. Откроется главное окно Blueman:
Главное окно Blueman
Нажав на кнопку Найти Вы запустите процесс поиска новых устройств.

Для соединения с новым найденным устройством, щелкните на нем правой кнопкой мыши и в контекстном меню выберите Установить:
Выберите Установить

Откроется окно создания пары устройств. Выберите подходящий тип пароля и нажмите ДалееВыберите подходящий тип пароля

Далее произведите необходимые манипуляции на устройстве и/или введите свой пароль для соединения.
Вы также можете использовать меню Установить для определения типа соединения по умолчанию. Т.е. если устройство, например, может подключаться как модем и как аудиогарнитура, можно установить подключение по умолчанию его в качестве гарнитуры.

Если Вы хотите, чтобы устройство автоматически подключалось при включении bluetooth, его нужно установить как доверенное:
Установить как доверенное

Многие устройства bluetooth (например мобильные телефоны), для осуществления автоматического подключения требуют дополнительных настроек, которые необходимо выполнить непосредственно на устройстве. За подробной информацией обратитесь к руководству от вашего устройства.

Далее приведены примеры создания различных типов подключения.

Использование bluetoothctl для подключения к устройству bluetooth

Это общий план сопряжения устройства с использованием bluetoothctl .

  • Запустите интерактивную команду bluetoothctl .
$ bluetoothctlAgent registered
$ bluetoothctl show Controller 20:79:18:5E:4B:64 (public) Name: myfed.example.net Alias: myfed.example.net Class: 0x000c010c Powered: yes Discoverable: no DiscoverableTimeout: 0x00000000 Pairable: no UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb) UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb) UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb) UUID: Headset (00001108-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb) UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) Modalias: usb:v1D6Bp0246d0534 Discovering: no
Advertising Features: ActiveInstances: 0x00 SupportedInstances: 0x05 SupportedIncludes: tx-power SupportedIncludes: appearance SupportedIncludes: local-name

Ввод, helpчтобы получить список доступных команд.

  • Включите адаптер Bluetooth

[bluetooth]# agent KeyboardOnly

Agent is already registered
[bluetooth]# default-agentDefault agent request successful
[bluetooth]# power onChanging power on succeeded
  • Сделайте сканирование, чтобы обнаружить ваши устройства Bluetooth
# scan onDiscovery started
[CHG] Controller 20:79:18:5E:4B:64 Discovering: yes
[NEW] Device 14:AB:C5:CC:C7:AB 14-AB-C5-CC-C7-AB
[CHG] Device 14:AB:C5:CC:C7:AB TxPower: 8
[CHG] Device 14:AB:C5:CC:C7:AB Name: DESKTOP-N9GVMQ2
[CHG] Device 14:AB:C5:CC:C7:AB Alias: DESKTOP-N9GVMQ2
[CHG] Device 14:AB:C5:CC:C7:AB UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 14:AB:C5:CC:C7:AB UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device 14:AB:C5:CC:C7:AB UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 14:AB:C5:CC:C7:AB UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device 14:AB:C5:CC:C7:AB UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[NEW] Device 5C:FB:7C:A4:13:C6 JBL Clip 3
  • Сопряжение с обнаруженным устройством Bluetooth
[bluetooth]# pair 5C:FB:7C:A4:13:C6Attempting to pair with 5C:FB:7C:A4:13:C6
[CHG] Device 5C:FB:7C:A4:13:C6 Connected: yes
[CHG] Device 5C:FB:7C:A4:13:C6 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device 5C:FB:7C:A4:13:C6 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 5C:FB:7C:A4:13:C6 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 5C:FB:7C:A4:13:C6 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 5C:FB:7C:A4:13:C6 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 5C:FB:7C:A4:13:C6 ServicesResolved: yes
[CHG] Device 5C:FB:7C:A4:13:C6 Paired: yes
Pairing successful
# trust 5C:FB:7C:A4:13:C6[CHG] Device 5C:FB:7C:A4:13:C6 Trusted: yes
Changing 5C:FB:7C:A4:13:C6 trust succeeded
# paired-devicesDevice 5C:FB:7C:A4:13:C6 JBL Clip 3
# devicesDevice 5C:FB:7C:A4:13:C6 JBL Clip 3
  • Подключиться к устройству после сопряжения

Как использовать bluetooth для передачи файлов

Теперь мы используем мощную bluetoothctl утилиту для соединения Bluetooth системы с внешним устройством для передачи файлов.

Во-первых, введите следующую команду, чтобы начать использовать утилиту:

$ bluetoothctl

Вы Терминал находитесь теперь в подсказке Bluetooth. Введите справку в этой подсказке для наблюдения то, что все можно сделать здесь:

Давайте включим сканирование для сканирования для доступных bluetooth-устройств вокруг. Введите следующую команду в подсказку Bluetooth:

# scan on

Система начнет сканировать, и затем перечислит доступные bluetooth-устройства. Скопируйте идентификатор устройства со списка устройства, с которым Вы хотите соединиться. Если Вы хотите больше информации об устройстве, можно использовать следующую команду:

# info [device]

Теперь, используйте следующую команду для соединения с определенным устройством:

# pair [device]

Теперь программа отобразит ключ доступа на Вашем bluetooth-устройстве. Если ключ доступа соответствует тому, Вы проходите через парную команду устройства, вводите да.

Ваше устройство будет теперь соединено с Bluetooth Вашей системы. Ваша подсказка также покажет название Вашего устройства.

Перед использованием bluetooth-устройства для передачи файлов и от необходимо добавить устройство как доверяемое bluetooth-устройство. Используйте следующую команду для добавления устройства, как доверяется:

# trust [device]

Как только выбранное устройство соединяют и доверяют, можно легко использовать его для передачи файлов между этими двумя bluetooth-устройствами.

https://www.youtube.com/watch?v=

Введите выход, чтобы выйти из bluetoothctl и возвратиться к Вашей нормальной командной строке.

Работа с bluetooth в linux (linux bluetooth hardware) – разное – статьи – radiocopter.ru

Ключевые слова: linux, bluetooth, hardware, (найти похожие документы)

From: Сгибнев Михаил <http://dreamcatcher.ru>
Date: Mon, 5 Oct 2006 14:31:37 0000 (UTC)
Subject: Работа с Bluetooth в Linux

Оригинал: http://dreamcatcher.ru/index.php?option=com_content&task=view&id=90&Itemid=2

Первая статья серии, рассказывающей о работе Bluetooth в Linux
Перевод: Сгибнев Михаил

Представлять Bluetooth в 2006 году довольно тяжело. По общему мнению,
эта технология должна была появиться намного раньше, чтобы быть по
настоящему распространенной к настоящему моменту. Но, поскольку этого
не случилось, репутация ее оказалась несколько подмоченой. Bluetooth
популярен, но не столь популярен как WiFi. Однако, возможности этой
технологии довольно широки, особенно если приложить немного усилий.
Вы знакомы с Bluetooth? Может быть, вы даже использовали эту
технологию с вашим сотовым телефоном или наушниками? Если это так, то
вы можете задуматься, как получить больше, особенно если вам доступна
только техническая литература, полная всяких умных слов вроде
“piconets” или “scatternets”, но лишенная прикладных задач.

Не волнуйтесь. В этой статье я покажу вам, как работать с Bluetooth, а
не читать умности. Если вы еще не знакомы с этой изящной технологией,
то я буду рад ввести вас в этот удивительный мир.
Итак, мы рассмотрим сборку и настройку модуля Bluetooth, обзор
устройств беспроводной сети и соединение с ними. Я представлю сервис
PAN, обеспечивающий работу с беспроводными IP-сетями.

В последующих статьях этой серии мы рассмотрим передачу файлов,
экспорт последовательных портов, беспроводной периферии HID, такой как
клавиатуры и мыши, потоковое аудио. Затем последуют такие прекрасные
вещи как добавление Bluetooth устройств к non-Bluetooth, управление по
Bluetooth скринсейвером и изучение существующих Bluetooth атак.

Чего мы хотим добиться? Необходимо синхронизировать беспроводные
устройства, экспортировать последовательный порт для работы факса или
модема, обмен файлами и работа HID периферии.

Определения

Чем является Bluetooth? Есть много определений, но лично мне больше
нравится – WiFi с уменьшеным энергопотреблением.

С Bluetooth возможно не только связь между компьютерами, но и
использование беспроводных гарнитур, синхронизация с КПК, мыши и
клавиатуры.

Поскольку Bluetooth требует гораздо меньше энергии чем WiFi и так как
сетевой уровень в нем отделен от интерфейса, есть много больше
творческих и интересных возможностей использования этой технологии.
Говоря об интерфейсах, мы нуждаемся в в аппаратных средствах Bluetooth
и программном обеспечении, чтобы использовать особенности Bluetooth. В
некоторые аппаратные средства прошиты программные модули, реализующие
какой-либо функционал, но это уменьшает гибкость, дороже стоит и
усложняет устройство.

Для этой статьи, я предпочитаю легкие аппаратные средства Bluetooth и
развитое программное обеспечение.

Ядро Linux может использовать различные программные стеки. Самые
известные – bluez и affix. Я предпочитаю bluez, потому что теперь он
входит в состав ядра Linux.

Установка

Аппаратное обеспечение

Есть три основных реализации Bluetooth: USB, последовательный порт и
PCMCIA. Возможно, в ваш компьютер Bluetooth уже установлен? Для того,
чтобы выяснить это, обратитесь к документации на компьютер.
PCMCIA карты обычно представляют собой мост PCMCIA-to-serial и сам чип
Bluetooth при бо`льшей стоимости. Поэтому, если необходимого
устройства у вас нет, остановите свой выбор на последовательном или
USB устройстве.

Я рекомендую D-Link DBT-120, поскольку содержит удобные особенности,
которые я рассмотрю несколько позже, особенно если вы будете
использовать клавиатуру Bluetooth. Если нет каких либо предпочтений,
то вы можете приобрести любой USB адаптер. Адаптеры для
последовательных линий обычно более дороги и медленны.
Если вы не счастливый обладатель уникальной машины, то, скорее всего,
можете пропустить следующий раздел.

Неподдерживаемое аппаратное обеспечение

Помните – вам необходима поддержка как минимум последовательного порта
для подключения Bluetooth. Поскольку большинство устройств (, типа
карманных компьютеров) имеет свободные последовательные порты на
системных платах, то подключение не должно составить большого труда.

Самый простой случай – когда придется припаять к материнской плате
четыре провода: два на прием/передачу и два на питание/землю. Хотя
лучше шесть – тогда еще становится возможным управление потоком.
Большое количество сайтов содержат решения, как добавить поддержку
Bluetooth к наладонникам Siemens Simpad, Sharp Zaurus или Psion MX.

Вот некоторые из них:
* Simpad Bluetooth Surgery
* Newton Bluetooth Surgery
* Zaurus C700 Bluetooth Surgery
* Titanium iBook Bluetooth Surgery
* NSLU2 Serial Port Surgery

Конечно, помимо проводов, припаяных к материнской плате, нужно еще
подключить сам чип Bluetooth. Самый простой вариант – собрать модуль
“все в одном”, в этом случае сам чип, антенна и конвертер питания (TTL
5V/CMOS 3.3V) собираются на одной маленькой плате.
Если вы хотете сэкономить немного денег, то можете переделать более
дешевые USB-токены на последовательный порт. Если же вы хотите
сэкономить время, то можете купить все необходимое в онлайн-магазинах.
Вот некоторые полезные ссылки:
* Turning a USB into a serial Bluetooth dongle
* Serial Bluetooth Dongle WML AHR C09

Протокол последовательного порта

Если ваш последовательный порт ограничен двумя линиями (receive/send),
вам необходимо сконфгурировать устройство на использование протокола
BCSP вместо H4. H4 – промышленный стандарт, который требует управления
потоком данных, в то время как BCSP – пропиетарный протокол, который
работает точно также без управления потоком данных. Поскольку стек
bluez поддерживает оба протокола, то выбор остается за вами.

Учтите, что ваш чип может уже быть настроен на использование
какого-либо из этих протоколов. Для смены протокола необходимо
воспользоваться утилитой pskey. Иструкции по использованию можно
прочитать в этом документе или в Opensimpad introduction to Pskey.

Будьте внимательны! Очень легко уничтожить модуль ошибкой в pskey.

Программное обеспечение

В зависимости от конфигурации вашего ядра Linux и установленного
программного обеспечения, поддержка Bluetooth может заработать “из
коробки”.

Если вы используете дистрибутив с автоматической установкой пакетов,
такой как Debian или Red Hat, вы можете получить прекомпилированную
версию bluez, без всяких проблем с зависимостями. В этом случае просто
перейдите к разделу “Запускаем bluez”.

В противном случае, я рекомендую перекомпилировать ядро со следующим
патчем. (смотри также http://www.holtmann.org/linux/kernel).
Процесс компилирования ядра выходит за рамки этой статьи, но он может
оказаться полезным для задействования функций, включенных в более
новые, чем используемая вами, версии bluez. Это особенно верно для
моей следующей статьи, в которой рассматриваются расширенные
возможности, типа поддержки клавиатуры Bluetooth.

Итак, я предполагаю, что у вас имеется ядро с поддержкой bluez или
загружаемый автоматически модуль ядра.

Компиляция программного обеспечения

Если вы хотите установить все самостоятельно, то вам необходимо
использовать определенную версию bluez, для того, чтобы избежать любых
зависимостей от DBus. Поскольку от DBus зависит много частей Gnome, не
хотелось бы все поломать.

Я рекомендую скачать bluez-libs-2.10, bluez-utils-2.10,
bluez-hcidump-1.12, and bluez-hciemu-1.0:

$ wget http://bluez.sf.net/download/bluez-libs-2.10.tar.gz
$ wget http://bluez.sf.net/download/bluez-utils-2.10.tar.gz
$ wget http://bluez.sf.net/download/bluez-hcidump-1.12.tar.gz
$ wget http://bluez.sf.net/download/bluez-hciemu-1.0.tar.gz

Если вы используете не i386-совместимый компьютер (например наладонник
с ARM или MIPS CPU), пожалуйста сделайте кросс-компиляцию с
инструментарием, которого требует ваша архитектура. Узнать все
необходимые параметры можно на соответствующих сайтах (например
Zaurus toolchain).

Компиляция осуществляется как и все в GNU. Я предпочитаю помещать все
в /opt/bluetooth, чтобы не войти в противоречие с установкой по
умолчанию.

Сначала установим библиотеки, которые будут использоваться в
дальнейшем:

$ tar zxvf bluez-libs-2.10.tar.gz
$ cd bluez-libs-2.10
$ ./configure –prefix=/opt/bluetooth
$ make ; make install
$ echo “/opt/bluetooth/lib” >> /etc/ld.so.conf
$ ldconfig

Устанавливаем утилиты:

$ tar zxvf bluez-utils-2.10.tar.gz
$ cd bluez-utils-2.10
$ ./configure –disable-debug –disable-dbus –disable-cups –disable-pcmcia
–disable-initscripts –disable-bluepin –enable-hid2hci –enable-bcm203x
–prefix=/opt/bluetooth
$ make ; make install

В заключение, устанавливаем приложение для отладки:

$ tar zxvf bluez-hcidump-1.12.tar.gz
$ cd bluez-hcidump-1.12
$ ./configure –prefix=/opt/bluetooth
$ make ; make install

Для использования установленных бинарных файлов выполните:

export PATH=$PATH:/opt/bluetooth/bin:/opt/bluetooth/sbin

или добавьте соответствующую строку в .bashrc. Теперь мы готовы!
Добавляем последовательный токен
Все просто. Необходимо указать имя последовательного порта, протокол,
скорость порта, управление потоком и скорость использования.

Например, у нас имеется токен, подключенный к первому порту, по
протоколу BCSP, с конфигурацией прошивки на 115200 и вы хотите
установить рабочую скорость в 230400, используйте:

$ hciattach /dev/ttyS0 bcsp 115200 noflow 230400

В случае последовательного токена вы или непосредственно знаете
параметры соединения, поскольку установили их с помощью pskey или
можете найти их на сайте, где брали инструкции по включению Bluetooth.

Я настоятельно не рекомендую изменять скорость порта утилитой pskey.
Сохраните имеющееся значение по умолчанию и предоставьте hciattach
показать волшебство работы на более высоких скоростях. С его помощью
вы можете совершенно безопасно подняться до скорости 921600, в случае
появления проблем достаточно будет просто перегрузить чип, что-бы
вернуться до 115200.

Запуск Bluetooth и подключение к другому устройству

Запустить устройство можно следующей командой:

$ hciconfig hci0 up
hci0: Type: USB
BD Address: 00:80:C8:45:31:F8 ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN AUTH ENCRYPT
RX bytes:2882377 acl:151624 sco:0 events:212 errors:0
TX bytes:2591 acl:184 sco:0 commands:20 errors:0

Это означает, что у вас имеется устройство USB с адресом
00:80:C8:45:31:F8, работаещее с различными опциями.

Адрес устройства уникален и похож на MAC адрес для устройств Ethernet.
Его невозможно изменить, если только вы не используете модуль
Bluetooth для разработчиков. В этом случае, для смены адреса адреса
используется утилита pskey. Вследствие этого, я хочу отговорить вас
использовать этот адрес в качестве секретного ключа.

Давайте посмотрим Bluetooth окружение:

$ hcitool scan
Scanning …
00:A0:96:0A:D1:80 zaurus.guylhem.net

Как удивительно, мы что-то обнаружили!

Сканирование нам вывело адрес другого устройства и его имя. Владелец
устройства назначил ему имя, хотя его может и не быть. Однако, я
рекомендую использовать вам полное имя устройства, если вы владеете
собственным доменом – это предоставит возможность найти владельца
устройства с через Whois.

Прежде, чем мы двинемся дальше, запустим демон hcid и установим PIN,
для защиты наших соединений. Отредактируйте файл hcid.conf из каталога
/opt/bluetooth/etc/bluetooth так, чтобы он выглядел следующим образом:

options {
# automatically put new hciN devices up
autoinit yes;

# security mode
# none : security disabled
# auto : use local pin for incoming connections
# user : always ask a pin to the user
security auto;
pairing multi;
pin_helper /opt/bluetooth/bin/bluepin;
}

device {
# whatever you want
name “MyDevice.MyDomain.us”;

# 0x100 is fine for a PC, 0x120232 is better for a PDA
class 0x100;

# enable inquiry scan
iscan enable;

# enable page scan
pscan enable;

# default link mode
# none : no policy
# accept : always accept incoming connections
# master : becomes the master on incoming connections
# and deny role switch on outgoing connections
lm accept;

# default link policy
# none : no policy
# rswitch : allow role switch
# hold : allow hold mode
# sniff : allow sniff mode
# park : allow park mode
lp rswitch,hold,sniff,park;

# enable authentication
auth enable;

# enable encryption
encrypt enable;
}

Что все это значит?

Устройства Bluetooth автоматически организовывают себя в piconets, где
есть мастер и подчиненные устройства.В piconet может быть только один
мастер, но мастер может быть подчиненным в другой piconet. Два
piconets, объединившись, образуют scatternet.

Что же все это означает? Чтобы избежать проблем, отключите выбор роли
и позвольте устройствам управлять собой самостоятельно, вместо того,
чтобы применять политику.

Другие важные опции – inquiry scan и page scan. По умолчанию,
устройства Bluetooth находятся в резервном режиме и периодически
сканируют эфир. С page scan, устройство ожидает, что другие устройства
войдут с ним в контакт посредством его кодового имени. Удаленное
устройство должно знать это имя. inquiry scan – противоположный
процесс; любое устройство может делать вызов, даже если оно не знает
надлежащее кодовое имя. Класс позволяет вам искать любой тип
устройства, когда вокруг слишком много устройств Bluetooth. Если вы
хотите скрыть ваши устройства от других людей, отключите сканирование
– или в hcid.conf, или вручную, после того, как вы подключили ваши
устройства:

$ hciconfig hci0 iscan disable

Самая важная опция – конечно, опция безопасности.

Для создания соединения между двумя Bluetooth устройствами необходимо,
чтобы у них был выставлен одинаковый PIN-код. Этот код может быть
размером и 8 и 128 бит, но на сотовых телефонах или беспроводной
гарнитуре, вам врядли захочется набирать что-то более чем “1234”.

Когда одно из устройств посылает PIN, добавив к ему случайное число,
принимающее устройство сравнивает его с имеющимся и в случае успеха
создается ключ связи для защиты данного подключения. Для того, чтобы
предотвратить радио-перехват, вам необходимо использовать
аутентификацию и шифрацию.

Что касается безопасности, то используйте auto и напишите коротенький
скрипт, выводящий PIN. Например:

$ echo “
#!/bin/sh
echo -n PIN:
cat /opt/bluetooth/etc/pin
“>/opt/bluetooth/bin/bluepin

$ echo “9874” > /opt/bluetooth/etc/pin

$ chmod x /opt/bluetooth/bin/bluepin

Это выведет “PIN:9874”, когда вы выполните:

$ /opt/bluetooth/bin/bluepin PIN:9874

Вы можете сделать данный скрипт более сложным, например, прося
пользователя ввести определенный пароль каждый раз, когда пытается
подключиться новое устройство. Это не входит в рамки данной статьи.
Gnome и KDE уже обеспечивают графические bluepin приложения, не
стесняйтесь улучшать их, если хотите.

Обратите внимание на режимы: hold – когда мастер отключается, входя в
режим энергосбережения, или по какой другой причине (возможно, чтобы
слушать в другом piconet или выполнить сканирование). sniff, когда
подчиненное устройство время от времени засыпает, чтобы сохранить
энергию. park – подчиненное устройство покидает piconet. Вы можете
разбудить это устройство, указав мастеру распарковать его.

В самом общем случае, вы должны работать во всех этих режимах, если
ваши аппаратные средства их поддерживают – а в настоящее время это
именно так. Вы сбережете много энергии и получите больше возможностей.
Старые устройства Bluetooth, такие как мое Socket CF Rev E (with a
Nokia chipset, hci v 1.0b), поддерживает только некоторые из этих
опцийи (Смотрите http://www.wapucom.com/bluetooth.asp и hardware features)

Теперь, когда пароль и все необходимые опции установлены, попробуем
подключиться: Запустите демоны hcid и sdpd, обеспечивающие связь
(например для получения PIN или запроса возможностей):

$ /opt/bluetooth/sbin/hcid -f /opt/bluetooth/etc/bluetooth/hcid.conf
$ /opt/bluetooth/sbin/sdpd

В настоящий момент нет никакого эквивалента /etc/hosts, чтобы
отображать адреса устройств в имена, поэтому придется использовать
аппаратный адрес:

$ l2ping 00:A0:96:0A:D1:80

Вы будете знать, что устройство требует пароля, если получите:

Can’t connect.: Connection timed out

Если устройство выключено, то сообщение будет выглядеть так:

Can’t connect.: Host is down

В случае успеха картина будет выглядеть примерно так:

# l2ping 00:A0:96:0A:D1:80
Ping: 00:A0:96:0A:D1:80 from 00:80:C8:45:31:F8 (data size 20) …
20 bytes from 00:A0:96:0A:D1:80 id 200 time 64.76ms
20 bytes from 00:A0:96:0A:D1:80 id 201 time 45.80ms
20 bytes from 00:A0:96:0A:D1:80 id 202 time 38.89ms
20 bytes from 00:A0:96:0A:D1:80 id 203 time 95.60ms
20 bytes from 00:A0:96:0A:D1:80 id 204 time 43.26ms
20 bytes from 00:A0:96:0A:D1:80 id 205 time 53.72ms
20 bytes from 00:A0:96:0A:D1:80 id 206 time 39.92ms
20 bytes from 00:A0:96:0A:D1:80 id 207 time 28.68ms
8 sent, 8 received, 0% loss

И теперь просмотрим записи в syslog, чтобы увидеть процесс обмена
PINами и установку соединения:

# tail /var/log/syslog
Aug 2 22:20:44 [hcid] link_key_request (sba=00:80:C8:45:31:F8,
dba=00:A0:96:0A:D1:80)_
Aug 2 22:20:44 [hcid] pin_code_request (sba=00:80:C8:45:31:F8,
dba=00:A0:96:0A:D1:80)_
Aug 2 22:20:44 [hcid] link_key_notify (sba=00:80:C8:45:31:F8)_
Aug 2 22:20:44 [hcid] Replacing link key 00:80:C8:45:31:F8 00:A0:96:0A:D1:80

Службы предложения и запроса

Вы нашли устройство. Что же можно с ним делать дальше? Можете ли вы
использовать его для выхода в сеть, передачи файлов, прослушивания
музыки? Это работа для протокола SDP – службы предложения и запроса.
Что предлагает мой Zaurus?

# sdptool browse 00:A0:96:0A:D1:80
Browsing 00:A0:96:0A:D1:80 …
#

Судя по увиденному, никаких сервисов тут нет. Мне их необходимо
добавить. NAP для работы сети, DUN для работы с PPP, OPUSH для
передачи файлов и SP для того, чтобы иметь возможность использовать
серийный порт другого устройства.

# sdptool add NAP
# sdptool add DUN
# sdptool add OPUSH
# sdptool add SP

Внимание! В этой статье у меня нет места, чтобы рассматривать
настройку DUN, OPUSH и SP. Я только покажу, как подделать поддержку
для этого профиля. Почему бы на этот раз не поиграть в притворщиков?

Одним из плюсов такого подхода – организация honeypot и поиск в syslog
устройств, обращающихся к этим сервисам для атак типа Bluesnarfing или
Bluejacking.

Теперь посмотрим, что нам предлагает Zaurus:

# sdptool browse 00:A0:96:0A:D1:80
Browsing 00:A0:96:0A:D1:80 …
Service Name: Network Access Point Service
Service RecHandle: 0x10000
Service Class ID List:
“Network access point” (0x1116)
Protocol Descriptor List:
“L2CAP” (0x0100)
PSM: 15
“BNEP” (0x000f)
Version: 0x0100
SEQ16: 10 20 30 40
Profile Descriptor List:
“PAN access point” (0x1116)
Version: 0x0100

Service Name: Dial-Up Networking
Service RecHandle: 0x10001
Service Class ID List:
“Dialup Networking” (0x1103)
“Generic Networking” (0x1201)
Protocol Descriptor List:
“L2CAP” (0x0100)
“RFCOMM” (0x0003)
Channel: 1
Profile Descriptor List:
“Dialup Networking” (0x1103)
Version: 0x0100

Service Name: OBEX Object Push
Service RecHandle: 0x10002
Service Class ID List:
“OBEX Object Push” (0x1105)
Protocol Descriptor List:
“L2CAP” (0x0100)
“RFCOMM” (0x0003)
Channel: 4
“OBEX” (0x0008)
Profile Descriptor List:
“OBEX Object Push” (0x1105)
Version: 0x0100

Service Name: Serial Port
Service Description: COM Port
Service RecHandle: 0x10003
Service Class ID List:
“Serial Port” (0x1101)
Protocol Descriptor List:
“L2CAP” (0x0100)
“RFCOMM” (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
“Serial Port” (0x1101)
Version: 0x0100

Намного лучше.

Теперь я хочу пробовать некоторую работу с сетями. Вообразите, что
Zaurus имеет сетевое подключение к Интернету и вы хотели бы совместно
использовать это подключение с другими устройствами. Это – IP по
Bluetooth!

Запустите на Zaurus сетевой демон в серверном режиме:

# pand –listen –master –role NAP

На своем компьютере выполните поиск NAP:

# sdptool search NAP
Inquiring …
Searching for NAP on 00:A0:96:0A:D1:80 …
Service Name: Network Access Point Service
Service RecHandle: 0x10000
Service Class ID List:
“Network access point” (0x1116)
Protocol Descriptor List:
“L2CAP” (0x0100)
PSM: 15
“BNEP” (0x000f)
Version: 0x0100
SEQ16: 10 20 30 40
Profile Descriptor List:
“PAN access point” (0x1116)
Version: 0x0100

Теперь убедимся в том, что Zaurus правильно обьявляет поддержку PAN.
Подключимся с помощью pand в клиентском режиме:

/usr/bin/pand –role PANU –service NAP –connect 00:A0:96:0A:D1:80

Также вы можете выполнить поиск серверов NAP:

# /usr/bin/pand –role PANU –service NAP –search

В этом случае каждое устройство будет иметь сетевой интерфейс bnep0,
поддерживающее автоматическую конфигурацию – с DHCP или статическим IP
на Zaurus введите (и сохраните в /etc/bluetooth/pan/dev-up на потом):

ifconfig bnep0 192.168.1.1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

на PC введите (и сохраните в /etc/bluetooth/pan/dev-up на потом):

ifconfig bnep0 192.168.1.2
route add default gw 192.168.1.1

Теперь вы можете пропинговать Zaurus и использовать это соединение для
выхода в Интернет.

pand – это сетевой демон, который можно использовать для разных целей,
включая работу с peer-to-peer сетями, если вы используете GN вместо
NAP. На клиентской машине выполните:

# pand –listen –role GN

В этом случае будет осуществлятся поиск peer-to-peer серверов в то
время, когда вы проходите мимо. Наряду с DHCP запросом на получение IP
адреса для bnep0, появляются такие интересные возможности, как обмен
файлами с прохожими, чьи устройства сконфигурированы подобным образом.
Для получения дополнительной информации, обратитесь к The PAN HOWTO.

Заключение

В настоящий момент ваше устройство Bluetooth по функциональным
возможностям только приблизилось к WiFi – возможно с более хорошими
опциями и возможностями для автоматизации.

Даже просто работая в сети, можно получить больше с PAN в Bluetooth.
В следующей статье мы рассмотрим работу DUND и SP (PPP по Bluetooth и
экспорт последовательного порта соответственно), dial-on-demand и
беспроводную синхронизацию с Palm.

Я также покажу, как обмениваться файлами с помощью OBEX и как их
копировать в сотовый телефон и расскажу об атаках Bluesnarfing и
Bluejacking, преобразующих резервную копию телефона в “cellphone
slurper”, что позволяет скопировать телефонную книгу, календарь,
изображения и т.д.

Ссылки

Среда GNOME
Репозитории и их подключение
PPA репозитории и их подключение
Blueman Project
PPA for Blueman Development Team
Пост на форуме про подключение Blueman
Описание bluetooth в Википедии
Описание OBEX в Википедии
Использование Blueman (видео)

Смотрите про коптеры:  Изучите «Обзор ру» для получения последних новостей и обзоров — начните исследовать прямо сейчас!
Оцените статью
Радиокоптер.ру
Добавить комментарий