Chia sẻ tệp giữa 2 máy tính qua bluetooth từ thiết bị đầu cuối


8

Tôi có hai máy tính liền kề một chạy linux với chế độ console và một có windows 10. Tôi muốn chuyển tập tin giữa hai máy và cả hai đều có khả năng bluetooth. Lúc đầu, tôi nghĩ đến việc cắm một chiếc usb và thực hiện quy trình sau:

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

Và sau đó, tôi sẽ gỡ thiết bị usb và cắm nó vào máy tính khác, và chuyển các tập tin sang nó; Nhưng tôi nghĩ, tại sao tôi không sử dụng bluetooth để chia sẻ tập tin trực tiếp?

Tôi có thể sử dụng bluetooth từ thiết bị đầu cuối vì tôi không có GUI trên máy tính đó không? Tôi không có kinh nghiệm trước đó trong việc này, vì vậy nếu có thể, tôi cần câu trả lời chi tiết.

Câu trả lời:


5

Đầ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 bluetoothctllệ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 onlệ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 connectsau 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 udevquy 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 systemdcơ 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 systemdthay đổ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 sudocũ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 obexpushdcầ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.servicebằng trình chỉnh sửa bạn chọn bằng cách thêm -Ccờ 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-reloadsau 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 obexpushdsử 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 obexpushdchạ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 obexpushdvẫ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 /bluetooththư 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 /bluetooththư 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.


Các hướng dẫn này đã được kiểm tra hai lần với điện thoại Android và máy tính xách tay Ubuntu. Thiết lập, gửi và nhận xác nhận để làm việc.
emk2203

Cẩn thận: /etc/systemd/system/dbus-org.bluez.servicerất có thể là một liên kết tượng trưng /lib/systemd/...và bạn không muốn sửa đổi liên kết này. Bạn nên sử dụng ghi đè: tạo /etc/systemd/system/dbus-org.bluez.service.dthư mục và đặt một tệp vào đó kết thúc bằng .conf(như add-compat-flag.conf), chỉ chứa: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(với các nguồn cấp dữ liệu phù hợp tất nhiên)
Gulrass
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.