แชร์ไฟล์ระหว่างคอมพิวเตอร์ 2 เครื่องผ่านบลูทู ธ จากเครื่องเทอร์มินัล


8

ฉันมีคอมพิวเตอร์ที่อยู่ติดกันสองเครื่องเครื่องหนึ่งที่ใช้ linux พร้อมโหมดคอนโซลและอีกเครื่องหนึ่งที่มี windows 10 ฉันต้องการถ่ายโอนไฟล์ระหว่างเครื่องทั้งสองและพวกเขาทั้งสองมีความสามารถในบลูทู ธ ตอนแรกฉันคิดว่าจะเสียบ usb และทำตามขั้นตอนต่อไปนี้:

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

จากนั้นฉันจะลบอุปกรณ์ usb และเสียบเข้ากับคอมพิวเตอร์เครื่องอื่นและถ่ายโอนไฟล์ไปยังอุปกรณ์นั้น แต่ฉันคิดว่าทำไมฉันไม่ใช้บลูทู ธ เพื่อแชร์ไฟล์โดยตรง

ฉันสามารถใช้บลูทู ธ จากเทอร์มินัลได้เนื่องจากไม่มี GUI บนคอมพิวเตอร์เครื่องนั้นหรือไม่? ฉันไม่เคยมีประสบการณ์มาก่อนในเรื่องนี้ดังนั้นถ้าเป็นไปได้ฉันต้องการคำตอบโดยละเอียด

คำตอบ:


5

apt install bluez-tools obexpushdครั้งแรกที่คุณจะต้อง

ในการส่งและรับไฟล์คุณต้องตั้งค่าและจับคู่อุปกรณ์ก่อน

ติดตั้ง


จาก Arch Wiki - bluetooth :

Bluetoothctl

เริ่มbluetoothctlคำสั่งแบบโต้ตอบ มีหนึ่งสามารถป้อนhelpเพื่อรับรายการคำสั่งที่ใช้ได้

  • เปิดเครื่องไปที่คอนโทรลเลอร์โดยpower onเปิด มันถูกปิดโดยค่าเริ่มต้น
  • ป้อนdevicesเพื่อรับที่อยู่ MAC ของอุปกรณ์ที่จะจับคู่
  • เข้าสู่โหมดค้นหาอุปกรณ์พร้อมscan onคำสั่งหากอุปกรณ์ไม่ได้อยู่ในรายการ
  • agent onเปิดตัวแทนขึ้นกับ
  • ป้อนpair MAC Addressเพื่อทำการจับคู่ (การเติมแท็บให้สมบูรณ์)
  • หากใช้อุปกรณ์ที่ไม่มี PIN อาจต้องเชื่อถืออุปกรณ์ด้วยตนเองก่อนจึงจะสามารถเชื่อมต่อใหม่ได้สำเร็จ เข้าtrust MAC Address สู่การทำเช่นนั้น
  • สุดท้ายใช้connect MAC_addressเพื่อสร้างการเชื่อมต่อ

สัญลักษณ์แสดงหัวข้อย่อยสองจุดสุดท้ายไม่จำเป็นสำหรับส่วนส่งของการถ่ายโอนไฟล์ แต่คุณต้องการส่วนรับในconnectภายหลัง

ตัวอย่างเซสชันอาจมีลักษณะเช่นนี้:

# 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

หากต้องการเปลี่ยนแปลงอย่างถาวรและเพื่อให้อุปกรณ์ใช้งานได้หลังจากรีบูตudevจำเป็นต้องมีกฎ:

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

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

เคล็ดลับ : แทนที่KERNEL=="hci0"ด้วยKERNEL=="hci[0-9]*"เพื่อให้ตรงกับส่วนต่อประสาน BT ทั้งหมด

หลังจากหยุดชั่วคราว / กลับสู่วงจรอุปกรณ์สามารถเปิดโดยอัตโนมัติโดยใช้บริการ systemd ที่กำหนดเอง:

/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

เปิดใช้งานอินสแตนซ์ของหน่วยโดยใช้ชื่ออุปกรณ์บลูทู ธ bluetooth-auto-power@hci0.serviceของคุณตัวอย่างเช่น


ตอนนี้อุปกรณ์ของคุณถูกจับคู่แล้ว ตรวจสอบว่าคุณสามารถเห็นอื่น ๆ bt-device -lที่มี

ส่ง

ถัดไปคุณต้องส่งsystemdโครงสร้างพื้นฐานเพื่อให้สามารถใช้งานได้มิฉะนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้:

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.

systemdทำการเปลี่ยนแปลงที่จำเป็นด้วย

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

ทำให้แน่ใจว่าคุณสามารถส่งไฟล์ได้ A sudoในบรรทัดแรกจะล้มเหลว !

bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2คุณสามารถส่งไฟล์ในขณะนี้โดย หากการถ่ายโอนแฮงค์ที่ 100% การโอนctrlcจะสิ้นสุด (หรือยกเลิกก่อนหน้านี้)

หากต้องการทราบชื่อของคุณอุปกรณ์ (12: 34: 56: 78: 9A: BC), bt-device -lคุณสามารถออก

รับ


จากฟอรัม Raspberry Pi :

เราต้องการตั้งค่าเซิร์ฟเวอร์พุช OBEX นี่คือเหตุผลที่obexpushdจำเป็น

จำเป็นต้องมีการตั้งค่าสถานะความเข้ากันได้บน daemon ของ Bluetooth คุณต้องแก้ไข/etc/systemd/system/dbus-org.bluez.serviceด้วยตัวแก้ไขที่คุณเลือกโดยเพิ่มการ-Cตั้งค่าสถานะที่ส่วนท้ายของExecStart=บรรทัด ควรมีลักษณะเช่นนี้:

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

เริ่มต้นใหม่หรือเริ่มบริการใหม่ด้วยsudo systemctl daemon-reloadหลังจากแก้ไข sudo mkdir /bluetoothเลือกไดเรกทอรีเฉพาะไฟล์ที่ได้รับจะถูกวางไว้เช่นโดยการ

เริ่มต้นเซิร์ฟเวอร์ด้วยsudo obexpushd -B -o /bluetooth -nควรตอบสนองด้วย:

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

ถ้ามันไม่ทำงานและคุณจะได้รับ:

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

อาจเป็นเพราะคุณมีดีมอนหรือโปรแกรมอื่นซึ่งใช้งานช่องสัญญาณ rfcomm 9 ซึ่งobexpushdใช้งานตามค่าเริ่มต้น ในกรณีนี้เปลี่ยนช่องเป็น 23 ดังนี้:

sudo obexpushd -B23 -o /bluetooth -n

เพื่อใช้ช่อง 23

เมื่อคุณเริ่มobexpushdทำงานให้เปิดหน้าต่างเทอร์มินัลที่สอง คุณสามารถตรวจสอบว่าบริการ OBEX ลงทะเบียนด้วย

sudo sdptool browse local

มันควรจะแสดงรายการ (ที่ช่อง 23 ในกรณีนี้) รวมถึงสิ่งนี้:

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

ในหน้าต่างที่ในขณะที่obexpushdยังคงทำงาน, การใช้งานชุดbluetoothctl discoverable onตอนนี้จับคู่จากอุปกรณ์อื่นของคุณ การจับคู่ต้องเสร็จสิ้นในขณะที่obexpushdกำลังใช้งานหรืออุปกรณ์อื่น ๆ ไม่สามารถรับรู้บริการได้ หากโทรศัพท์ถูกจับคู่แล้วให้นำออกจากอุปกรณ์อื่นของคุณใช้bluetoothctlเพื่อลบออกจากคอมพิวเตอร์ Ubuntu และทำการจับคู่ใหม่

หลังจากที่คุณเชื่อมต่อ (สัญลักษณ์ล่าสุดจากรายการด้านบน) คุณควรจะสามารถรับไฟล์ได้ พวกเขาจะปรากฏใน/bluetoothไดเรกทอรี โปรดสังเกตว่าพวกเขาจะเป็นเจ้าของโดยรูทดังนั้นคุณต้องใช้ sudo เพื่อเข้าถึงพวกเขา หรือคุณสามารถทำchmod 0777 /bluetoothเพื่อไดเรกทอรีแลกเปลี่ยนสาธารณะเนื่องจากการรับรองความถูกต้องบลูทู ธ เป็นอุปกรณ์ที่ใช้และไม่ได้ใช้งานอยู่แล้ว

ในการทำให้คำสั่ง obexpushd เป็นอัตโนมัติให้สร้างไฟล์ /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

จากนั้นตั้งค่าให้เริ่มอัตโนมัติด้วย

sudo systemctl enable obexpush

หลังจากรีบูตหรือรีสตาร์ทบริการด้วยsudo systemctl daemon-reloadคุณควรจะสามารถส่งและรับไฟล์ได้ทั้งสองทิศทางในขณะนี้

อย่าลืมเชื่อมต่ออุปกรณ์เมื่อพยายามรับไฟล์


คำแนะนำเหล่านี้ตรวจสอบซ้ำด้วยโทรศัพท์ Android และแล็ปท็อป Ubuntu ตั้งค่าส่งและรับยืนยันการทำงาน
emk2203

ระวัง: /etc/systemd/system/dbus-org.bluez.serviceอาจเป็น symlink /lib/systemd/...และคุณไม่ต้องการแก้ไขอันนี้ คุณควรใช้การ override: สร้างได/etc/systemd/system/dbus-org.bluez.service.d.confadd-compat-flag.conf[Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C
เร็กตอรี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.