Діліться файлами між двома комп'ютерами через Bluetooth від терміналу


8

У мене є два сусідніх комп’ютера, один працює під управлінням linux в консольному режимі і один з Windows 10. Я хочу перенести файли між двома, і вони мають можливості Bluetooth. Спочатку я подумав підключити usb і виконати таку процедуру:

fdisk -l
mount /dev/sdc1 /media
mkdir /media/myfiles01
cp ~/file1 ~/file2 /media/myfiles01
cd ~
umount /dev/sdc1

Тоді я б видалив usb-пристрій і підключив його до іншого комп’ютера та переніс би на нього файли; Але я подумав: чому я не використовую Bluetooth для обміну файлами безпосередньо?

Чи можу я використовувати Bluetooth від терміналу, оскільки у мене на цьому комп’ютері немає графічного інтерфейсу? У мене немає попереднього досвіду в цьому, тому, якщо це можливо, мені потрібна детальна відповідь.

Відповіді:


5

По-перше, вам потрібно apt install bluez-tools obexpushd.

Щоб надсилати та отримувати файли, потрібно спочатку налаштувати пристрої та з’єднати їх.

НАСТРОЙКА


від Arch Wiki - bluetooth :

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.

Після призупинення / відновлення циклу пристрій можна автоматично включати за допомогою користувацької системної послуги:

/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%, його ctrlcостаточно завершують (або припиняють раніше).

Щоб знати ім’я свого пристрою (12: 34: 56: 78: 9A: BC), ви можете видати його bt-device -l.

ВИПУСКУЙТЕ


з форуму Raspberry Pi :

Ми хочемо створити push-сервер OBEX, ось чому це obexpushdбуло потрібно.

Прапор сумісності на демон-Bluetooth 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, тому для доступу до них вам знадобиться судо. Або ви можете зробити 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, ви повинні мати можливість надсилати та отримувати файли в обох напрямках зараз.

Не забувайте підключати пристрої при спробі прийому файлів.


Ці інструкції двічі перевірено на телефоні Android та ноутбуку Ubuntu. Налаштування, надсилання та отримання підтверджених для роботи.
emk2203

Обережно: /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(звичайно з каналами каналів звичайно)
Pikrass,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.