Udostępniaj pliki między 2 komputerami przez bluetooth z terminala

8

Mam dwa sąsiednie komputery, jeden z systemem Linux z trybem konsoli i jeden z systemem Windows 10. Chcę przenosić pliki między nimi i oba mają funkcję Bluetooth. Najpierw pomyślałem o podłączeniu USB i wykonałem następującą procedurę:

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

Następnie usunę urządzenie USB i podłączę je do innego komputera i przeniosę na niego pliki; Ale pomyślałem, dlaczego nie używam bluetooth do bezpośredniego udostępniania plików?

Czy mogę używać bluetooth z terminala, ponieważ nie mam GUI na tym komputerze? Nie mam w tym wcześniejszego doświadczenia, więc jeśli to możliwe, potrzebuję szczegółowej odpowiedzi.


źródło

Odpowiedzi:

5

Najpierw musisz apt install bluez-tools obexpushd.

Aby wysyłać i odbierać pliki, musisz najpierw skonfigurować i sparować urządzenia.

USTAWIAĆ


z Arch Wiki - bluetooth :

Bluetoothctl

Uruchom bluetoothctlinteraktywne polecenie. Tam można wprowadzić, helpaby uzyskać listę dostępnych poleceń.

  • Włącz zasilanie kontrolera, wprowadzając power on. Domyślnie jest wyłączone.
  • Wprowadź, devicesaby uzyskać adres MAC urządzenia, z którym chcesz się sparować.
  • Wejdź do trybu wykrywania urządzenia za pomocą scan onpolecenia, jeśli urządzenie nie znajduje się jeszcze na liście.
  • Włącz agenta za pomocą agent on.
  • Wejdź, pair MAC Addressaby wykonać parowanie (działa uzupełnianie tabulatorów).
  • Jeśli używasz urządzenia bez kodu PIN, konieczne może być ręczne zaufanie do urządzenia, aby mogło się ono ponownie połączyć. Wejdź, trust MAC Address aby to zrobić.
  • Na koniec użyj, connect MAC_addressaby ustanowić połączenie.

Ostatnie dwa punkty wypunktowania nie są konieczne do wysłania części transferu plików, ale potrzebne są connectpóźniej do odbioru.

Przykładowa sesja może wyglądać w ten sposób:

# 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

Aby zmiany były trwałe i aby urządzenie było aktywne po ponownym uruchomieniu, udevpotrzebna jest reguła:

/etc/udev/rules.d/10-local.rules

# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"

Porada : Wymień KERNEL=="hci0"się KERNEL=="hci[0-9]*"dopasować wszystkie interfejsy BT.

Po zakończeniu cyklu zawieszenia / wznowienia urządzenie może zostać automatycznie włączone za pomocą niestandardowej usługi systemowej:

/etc/systemd/system/[email protected]

[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

Włącz na przykład urządzenie, używając na przykład nazwy urządzenia Bluetooth [email protected].


Teraz Twoje urządzenia są sparowane. Sprawdź, czy możesz zobaczyć drugą za pomocą bt-device -l.

WYSŁAĆ

Następnie musisz wysłać systemdinfrastrukturę do wysłania do pracy, w przeciwnym razie pojawi się następujący błąd:

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.

Wprowadź niezbędne systemdzmiany za pomocą

systemctl --user start obex
sudo systemctl --global enable obex

Dzięki temu możesz wysyłać pliki. A sudotakże w pierwszej linii zawiedzie !

Możesz teraz wysłać pliki przez bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2. Jeśli transfer zawiesza się na 100%, ctrlcfinalizuje go (lub przerywa wcześniej).

Aby poznać nazwę swojego urządzenia (12: 34: 56: 78: 9A: BC), możesz wydać bt-device -l.

OTRZYMAĆ


z forum Raspberry Pi :

Chcemy skonfigurować serwer push OBEX, dlatego obexpushdbył potrzebny.

Flaga demona kompatybilności na demonie Bluetooth jest potrzebna, musisz edytować /etc/systemd/system/dbus-org.bluez.servicew wybranym edytorze, dodając -Cflagę na końcu ExecStart=linii. To powinno wyglądać tak:

ExecStart=/usr/lib/bluetooth/bluetoothd -C

Uruchom ponownie lub uruchom ponownie usługę sudo systemctl daemon-reloadpo edycji. Wybierz konkretny katalog, w którym umieszczane są odebrane pliki, na przykład przez sudo mkdir /bluetooth.

Uruchom serwer za pomocą sudo obexpushd -B -o /bluetooth -n, powinien odpowiedzieć:

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

Jeśli to nie działa, a otrzymasz:

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

może to być spowodowane uruchomieniem innego demona lub programu, który zajmuje domyślnie używany kanał 9 rfcomm obexpushd. W takim przypadku zmień kanał na 23 w następujący sposób:

sudo obexpushd -B23 -o /bluetooth -n

użyć kanału 23.

Po obexpushduruchomieniu otwórz drugie okno terminala. Możesz sprawdzić, czy usługa OBEX jest zarejestrowana

sudo sdptool browse local

Powinien wymienić (w tym przypadku kanał 23), między innymi:

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

W tym oknie, gdy obexpushdnadal działa, użyj, bluetoothctlaby ustawić discoverable on. Teraz sparuj z drugiego urządzenia. Parowanie MUSI zostać wykonane podczas obexpushddziałania, w przeciwnym razie inne urządzenie nie rozpozna, że ​​usługa jest dostępna. Jeśli telefon jest już sparowany, usuń go z drugiego urządzenia, użyj, bluetoothctlaby usunąć go z komputera Ubuntu i ponownie sparuj.

Po połączeniu (ostatni punkt z powyższej listy) powinieneś być w stanie odbierać pliki. Pojawią się w /bluetoothkatalogu. Zauważ, że będą własnością root, więc będziesz potrzebować sudo, aby uzyskać do nich dostęp. Lub możesz zrobić chmod 0777 /bluetoothdla publicznego katalogu wymiany, ponieważ uwierzytelnianie Bluetooth jest oparte na urządzeniach, a nie na użytkownikach.

Aby zautomatyzować polecenie obexpushd, utwórz plik /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

Następnie ustaw opcję automatycznego uruchamiania za pomocą

sudo systemctl enable obexpush

Po ponownym uruchomieniu lub ponownym uruchomieniu usługi za pomocą sudo systemctl daemon-reload, powinieneś być teraz w stanie wysyłać i odbierać pliki w obu kierunkach.

Nie zapomnij podłączyć urządzeń podczas próby odebrania plików.

emk2203
źródło
Instrukcje te zostały dwukrotnie sprawdzone za pomocą telefonu z Androidem i laptopa Ubuntu. Konfiguracja, wysyłanie i odbieranie potwierdzone do pracy.
emk2203
Ostrożnie: /etc/systemd/system/dbus-org.bluez.servicenajprawdopodobniej jest dowiązaniem symbolicznym /lib/systemd/...i nie chcesz go modyfikować. Powinieneś użyć przesłonięcia: utwórz /etc/systemd/system/dbus-org.bluez.service.dkatalog i umieść w nim plik kończący się na .conf(jak add-compat-flag.conf), zawierający tylko: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(oczywiście z poprawnymi liniami)
Pikrass