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 bluetoothctl
perintah interaktif. Di sana orang dapat memasukkan help
untuk mendapatkan daftar perintah yang tersedia.
- Nyalakan daya ke pengontrol dengan memasukkan
power on
. Ini mati secara default.
- Masukkan
devices
untuk mendapatkan Alamat MAC perangkat yang digunakan untuk memasangkan.
- Masuk ke mode penemuan perangkat dengan
scan on
perintah jika perangkat belum ada dalam daftar.
- Nyalakan agen dengan
agent on
.
- Masuk
pair MAC Address
untuk 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_address
untuk membuat koneksi.
Dua poin terakhir tidak diperlukan untuk mengirim bagian dari transfer file, tetapi Anda perlu connect
nanti 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 udev
aturan:
/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 systemd
infrastruktur 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 systemd
perubahan yang diperlukan dengan
systemctl --user start obex
sudo systemctl --global enable obex
Ini memastikan Anda dapat mengirim file. A sudo
juga 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 obexpushd
diperlukan.
Bendera kompatibilitas pada daemon Bluetooth diperlukan, Anda harus mengedit /etc/systemd/system/dbus-org.bluez.service
dengan editor pilihan Anda dengan menambahkan -C
bendera ke akhir ExecStart=
baris. Seharusnya terlihat seperti ini:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Mulai ulang atau mulai ulang layanan dengan sudo systemctl daemon-reload
setelah 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 obexpushd
digunakan secara default. Dalam hal ini, ubah saluran menjadi 23 seperti ini:
sudo obexpushd -B23 -o /bluetooth -n
untuk menggunakan saluran 23.
Setelah Anda obexpushd
menjalankan, 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 obexpushd
masih berjalan, gunakan bluetoothctl
untuk mengatur discoverable on
. Sekarang pasangkan dari perangkat Anda yang lain. Memasangkan HARUS dilakukan saat obexpushd
sedang berjalan, atau perangkat lain tidak akan mengenali layanan yang tersedia. Jika telepon sudah dipasangkan, hapus dari perangkat Anda yang lain, gunakan bluetoothctl
untuk 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 /bluetooth
direktori. Perhatikan bahwa mereka akan dimiliki oleh root, jadi Anda perlu sudo untuk mengaksesnya. Atau Anda dapat melakukannya chmod 0777 /bluetooth
untuk 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.
/etc/systemd/system/dbus-org.bluez.service
kemungkinan besar adalah symlink/lib/systemd/...
, dan Anda tidak ingin memodifikasi yang ini. Anda harus menggunakan override: membuat/etc/systemd/system/dbus-org.bluez.service.d
direktori dan meletakkan file di sana berakhiran.conf
(sepertiadd-compat-flag.conf
), hanya berisi:[Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C
(dengan feed baris yang tepat tentu saja)