Во-первых, вам нужно apt install bluez-tools obexpushd
.
Для отправки и получения файлов сначала необходимо настроить и выполнить сопряжение устройств.
НАСТРОИТЬ
из Arch Wiki - блютус :
Bluetoothctl
Запустите bluetoothctl
интерактивную команду. Там можно ввести, help
чтобы получить список доступных команд.
- Включите питание контроллера, введя
power on
. По умолчанию он выключен.
- Введите,
devices
чтобы получить MAC-адрес устройства для сопряжения.
- Войдите в режим обнаружения устройства с помощью
scan on
команды, если устройства еще нет в списке.
- Включите агента с помощью
agent on
.
- Введите,
pair MAC Address
чтобы выполнить сопряжение (вкладка завершает работу).
- При использовании устройства без PIN-кода может потребоваться вручную доверить устройство, прежде чем оно сможет успешно восстановить соединение. Введите
trust MAC Address
для этого.
- Наконец, используйте
connect MAC_address
для установления соединения.
Последние два пункта не нужны для отправки части передачи файла, но вам нужно 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"
Совет : Замените KERNEL=="hci0"
на, KERNEL=="hci[0-9]*"
чтобы соответствовать всем интерфейсам BT.
После цикла приостановки / возобновления устройство может автоматически включаться с помощью специальной службы 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
также в первой строке не получится !
Вы можете отправлять файлы сейчас bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
. Если перевод зависает на 100%, a ctrlcзавершает его (или отменяет ранее).
Чтобы узнать имя вашего устройства (12: 34: 56: 78: 9A: BC), вы можете выдать bt-device -l
.
ПОЛУЧАТЬ
с форума Raspberry Pi :
Мы хотим настроить push-сервер 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
это может быть связано с тем, что у вас запущен другой демон или программа, которая занимает канал 9 rfcomm, который obexpushd
использует по умолчанию. В этом случае измените канал на 23 следующим образом:
sudo obexpushd -B23 -o /bluetooth -n
использовать канал 23.
После obexpushd
запуска откройте второе окно терминала. Вы можете убедиться, что сервис 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
вы сможете отправлять и получать файлы в обоих направлениях.
Не забудьте подключить устройства при попытке получения файлов.
/etc/systemd/system/dbus-org.bluez.service
это, скорее всего, символическая ссылка/lib/systemd/...
, и вы не хотите изменять эту. Вы должны использовать переопределение: создайте/etc/systemd/system/dbus-org.bluez.service.d
каталог и поместите туда файл, оканчивающийся.conf
(вродеadd-compat-flag.conf
), содержащий только:[Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C
(с правильными