Đầu tiên, bạn cần phải apt install bluez-tools obexpushd
.
Để gửi và nhận tệp, bạn cần thiết lập và ghép nối các thiết bị trước.
THIẾT LẬP
từ Arch Wiki - bluetooth :
Bluetoothctl
Bắt đầu bluetoothctl
lệnh tương tác. Ở đó người ta có thể nhập vào help
để có được một danh sách các lệnh có sẵn.
- Bật nguồn cho bộ điều khiển bằng cách nhập
power on
. Nó được tắt theo mặc định.
- Nhập
devices
để nhận Địa chỉ MAC của thiết bị cần ghép nối.
- Vào chế độ khám phá thiết bị bằng
scan on
lệnh nếu thiết bị chưa có trong danh sách.
- Bật đại lý với
agent on
.
- Nhập
pair MAC Address
để thực hiện ghép nối (hoàn thành tab hoạt động).
- Nếu sử dụng thiết bị không có mã PIN, người ta có thể cần phải tin tưởng thiết bị theo cách thủ công trước khi thiết bị có thể kết nối lại thành công. Nhập
trust MAC Address
để làm như vậy.
- Cuối cùng, sử dụng
connect MAC_address
để thiết lập kết nối.
Hai điểm cuối cùng không cần thiết cho phần gửi của một lần chuyển tập tin, nhưng bạn cần phần connect
sau cho phần nhận.
Một phiên ví dụ có thể nhìn theo cách này:
# 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
Để thay đổi vĩnh viễn và để thiết bị hoạt động sau khi khởi động lại, cần có một udev
quy tắc:
/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"
Mẹo : Thay thế KERNEL=="hci0"
bằng KERNEL=="hci[0-9]*"
để phù hợp với tất cả các giao diện BT.
Sau một chu kỳ tạm dừng / tiếp tục, thiết bị có thể được bật tự động bằng cách sử dụng dịch vụ systemd tùy chỉnh:
/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
Ví dụ, bật một thiết bị của đơn vị bằng tên thiết bị bluetooth của bạn bluetooth-auto-power@hci0.service
.
Bây giờ các thiết bị của bạn đã được ghép nối. Kiểm tra xem bạn có thể thấy cái khác với bt-device -l
.
GỬI
Tiếp theo, bạn phải gửi systemd
cơ sở hạ tầng của mình để gửi đi làm, nếu không, bạn sẽ gặp lỗi sau:
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.
Thực hiện các systemd
thay đổi cần thiết với
systemctl --user start obex
sudo systemctl --global enable obex
Điều này đảm bảo bạn có thể gửi tập tin. A sudo
cũng trong dòng đầu tiên sẽ thất bại !
Bạn có thể gửi các tập tin bây giờ bằng cách bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
. Nếu chuyển khoản bị treo ở mức 100%, việc ctrlchoàn tất sẽ được thực hiện (hoặc hủy bỏ trước đó).
Để biết tên thiết bị của bạn (12: 34: 56: 78: 9A: BC), bạn có thể phát hành bt-device -l
.
NHẬN ĐƯỢC
từ diễn đàn Raspberry Pi :
Chúng tôi muốn thiết lập một máy chủ đẩy OBEX, đây là lý do obexpushd
cần thiết.
Cần có cờ tương thích trên daemon Bluetooth, bạn phải chỉnh sửa /etc/systemd/system/dbus-org.bluez.service
bằng trình chỉnh sửa bạn chọn bằng cách thêm -C
cờ vào cuối ExecStart=
dòng. Nó sẽ giống như thế này:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Khởi động lại hoặc khởi động lại dịch vụ sudo systemctl daemon-reload
sau khi chỉnh sửa. Chọn một thư mục cụ thể nơi các tập tin nhận được được đặt, ví dụ bởi sudo mkdir /bluetooth
.
Khởi động máy chủ với sudo obexpushd -B -o /bluetooth -n
, nó sẽ phản hồi với:
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
Nếu điều đó không hiệu quả, và bạn nhận được:
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
có thể là do bạn có một trình nền hoặc chương trình khác đang chạy chiếm kênh rfcomm 9 obexpushd
sử dụng theo mặc định. Trong trường hợp này, thay đổi kênh thành 23 như thế này:
sudo obexpushd -B23 -o /bluetooth -n
sử dụng kênh 23.
Khi bạn obexpushd
chạy, mở một cửa sổ đầu cuối thứ hai. Bạn có thể xác minh rằng dịch vụ OBEX đã được đăng ký với
sudo sdptool browse local
Nó nên liệt kê (tại kênh 23 trong trường hợp này), trong số những người khác, điều này:
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
Trong cửa sổ đó, trong khi obexpushd
vẫn đang chạy, sử dụng bluetoothctl
để thiết lập discoverable on
. Bây giờ ghép nối từ thiết bị khác của bạn. Việc ghép nối PHẢI được thực hiện trong khi obexpushd
đang chạy hoặc thiết bị khác sẽ không nhận ra dịch vụ khả dụng. Nếu điện thoại đã được ghép nối, hãy xóa điện thoại khỏi thiết bị khác của bạn, sử dụng bluetoothctl
để xóa điện thoại khỏi máy tính Ubuntu và ghép nối lại.
Sau khi bạn kết nối (điểm đạn cuối cùng từ danh sách trên), bạn sẽ có thể nhận tệp. Chúng sẽ xuất hiện trong /bluetooth
thư mục. Lưu ý rằng chúng sẽ được sở hữu bởi root, vì vậy bạn sẽ cần sudo để truy cập chúng. Hoặc bạn có thể thực hiện một chmod 0777 /bluetooth
thư mục trao đổi công khai, vì xác thực bluetooth là dựa trên thiết bị và dù sao cũng không dựa trên người dùng.
Để tự động hóa lệnh obExushd, hãy tạo tệp /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
Sau đó, thiết lập để tự khởi động với
sudo systemctl enable obexpush
Sau khi khởi động lại hoặc khởi động lại dịch vụ với sudo systemctl daemon-reload
, bạn sẽ có thể gửi và nhận tệp theo cả hai hướng ngay bây giờ.
Đừng quên kết nối các thiết bị khi cố gắng nhận tệp.