Bagikan file antara 2 komputer melalui bluetooth dari terminal

8

Saya memiliki dua komputer yang berdekatan satu menjalankan linux dengan mode konsol dan satu dengan windows 10. Saya ingin mentransfer file di antara keduanya, dan mereka berdua memiliki kemampuan bluetooth. Pada awalnya, saya berpikir untuk menghubungkan usb dan melakukan prosedur berikut:

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

Dan kemudian, saya akan menghapus perangkat usb dan menancapkannya ke komputer lain, dan mentransfer file ke sana; Tapi saya pikir, mengapa saya tidak menggunakan bluetooth untuk berbagi file secara langsung?

Bisakah saya menggunakan bluetooth dari terminal karena saya tidak punya GUI di komputer itu? Saya tidak punya pengalaman sebelumnya dalam hal ini, jadi jika memungkinkan, saya perlu jawaban terperinci.


sumber

Jawaban:

5

Pertama, kamu harus apt install bluez-tools obexpushd.

Untuk mengirim dan menerima file, Anda harus mengatur dan memasangkan perangkat terlebih dahulu.

MENDIRIKAN


dari Arch Wiki - bluetooth :

Bluetoothctl

Mulai bluetoothctlperintah interaktif. Di sana orang dapat memasukkan helpuntuk mendapatkan daftar perintah yang tersedia.

  • Nyalakan daya ke pengontrol dengan memasukkan power on. Ini mati secara default.
  • Masukkan devicesuntuk mendapatkan Alamat MAC perangkat yang digunakan untuk memasangkan.
  • Masuk ke mode penemuan perangkat dengan scan onperintah jika perangkat belum ada dalam daftar.
  • Nyalakan agen dengan agent on.
  • Masuk pair MAC Addressuntuk melakukan pemasangan (penyelesaian tab bekerja).
  • Jika menggunakan perangkat tanpa PIN, seseorang mungkin perlu mempercayai perangkat secara manual sebelum dapat terhubung kembali dengan sukses. Masuk trust MAC Address untuk melakukannya.
  • Akhirnya, gunakan connect MAC_addressuntuk membuat koneksi.

Dua poin terakhir tidak diperlukan untuk mengirim bagian dari transfer file, tetapi Anda perlu connectnanti untuk bagian yang menerima.

Contoh sesi dapat terlihat seperti ini:

# 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

Untuk membuat perubahan permanen dan agar perangkat aktif setelah reboot, diperlukan udevaturan:

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

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

Tip : Ganti KERNEL=="hci0"dengan KERNEL=="hci[0-9]*"untuk mencocokkan semua antarmuka BT.

Setelah penundaan / melanjutkan siklus, perangkat dapat dihidupkan secara otomatis menggunakan layanan systemd kustom:

/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

Aktifkan instance unit menggunakan nama perangkat bluetooth Anda, misalnya [email protected].


Sekarang perangkat Anda dipasangkan. Periksa apakah Anda dapat melihat yang lain dengan bt-device -l.

KIRIM

Selanjutnya, Anda harus mengirim systemdinfrastruktur Anda agar pengiriman berfungsi, jika tidak Anda akan mendapatkan kesalahan berikut:

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.

Buat systemdperubahan yang diperlukan dengan

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

Ini memastikan Anda dapat mengirim file. A sudojuga di baris pertama akan gagal !

Anda dapat mengirim file sekarang dengan bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2. Jika suatu transfer hang pada 100%, sebuah ctrlcmenyelesaikannya (atau membatalkan sebelumnya).

Untuk mengetahui nama perangkat Anda (12: 34: 56: 78: 9A: BC), Anda dapat menerbitkan bt-device -l.

MENERIMA


dari forum Raspberry Pi :

Kami ingin mengatur server push OBEX, inilah mengapa obexpushddiperlukan.

Bendera kompatibilitas pada daemon Bluetooth diperlukan, Anda harus mengedit /etc/systemd/system/dbus-org.bluez.servicedengan editor pilihan Anda dengan menambahkan -Cbendera ke akhir ExecStart=baris. Seharusnya terlihat seperti ini:

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

Mulai ulang atau mulai ulang layanan dengan sudo systemctl daemon-reloadsetelah diedit. Pilih direktori tertentu tempat file yang diterima ditempatkan, misalnya oleh sudo mkdir /bluetooth.

Mulai server dengan sudo obexpushd -B -o /bluetooth -n, itu harus menanggapi dengan:

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

Jika itu tidak berhasil, dan Anda mendapatkan:

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

bisa jadi karena Anda memiliki daemon atau program lain yang berjalan yang menempati saluran rfcomm 9 yang obexpushddigunakan secara default. Dalam hal ini, ubah saluran menjadi 23 seperti ini:

sudo obexpushd -B23 -o /bluetooth -n

untuk menggunakan saluran 23.

Setelah Anda obexpushdmenjalankan, buka jendela terminal kedua. Anda dapat memverifikasi bahwa layanan OBEX terdaftar

sudo sdptool browse local

Seharusnya daftar (pada saluran 23 dalam kasus ini), antara lain, ini:

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

Di jendela itu, saat obexpushdmasih berjalan, gunakan bluetoothctluntuk mengatur discoverable on. Sekarang pasangkan dari perangkat Anda yang lain. Memasangkan HARUS dilakukan saat obexpushdsedang berjalan, atau perangkat lain tidak akan mengenali layanan yang tersedia. Jika telepon sudah dipasangkan, hapus dari perangkat Anda yang lain, gunakan bluetoothctluntuk menghapusnya dari komputer Ubuntu, dan pasang kembali.

Setelah Anda terhubung (poin terakhir dari daftar di atas), Anda seharusnya dapat menerima file. Mereka akan muncul di /bluetoothdirektori. Perhatikan bahwa mereka akan dimiliki oleh root, jadi Anda perlu sudo untuk mengaksesnya. Atau Anda dapat melakukannya chmod 0777 /bluetoothuntuk direktori pertukaran publik, karena otentikasi bluetooth berbasis perangkat dan bukan berbasis pengguna.

Untuk mengotomatiskan perintah obexpushd, buat file /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

Kemudian, atur agar mulai otomatis dengan

sudo systemctl enable obexpush

Setelah reboot atau restart layanan dengan sudo systemctl daemon-reload, Anda seharusnya dapat mengirim dan menerima file di kedua arah sekarang.

Jangan lupa menghubungkan perangkat saat mencoba menerima file.

emk2203
sumber
Petunjuk ini diperiksa ulang dengan ponsel Android dan laptop Ubuntu. Pengaturan, kirim dan terima dikonfirmasi untuk bekerja.
emk2203
Hati-hati: /etc/systemd/system/dbus-org.bluez.servicekemungkinan besar adalah symlink /lib/systemd/..., dan Anda tidak ingin memodifikasi yang ini. Anda harus menggunakan override: membuat /etc/systemd/system/dbus-org.bluez.service.ddirektori dan meletakkan file di sana berakhiran .conf(seperti add-compat-flag.conf), hanya berisi: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(dengan feed baris yang tepat tentu saja)
Pikrass