터미널에서 블루투스를 통해 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에서-블루투스 :

블루투스

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 인터페이스와 일치하는.

일시 중단 / 다시 시작주기 후 사용자 지정 시스템 서비스를 사용하여 장치의 전원을 자동으로 켤 수 있습니다.

/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

이렇게하면 파일을 보낼 수 있습니다. sudo첫 번째 줄에도 A 가 실패합니다 !

까지 파일을 보낼 수 있습니다 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하는데 이것이 필요한 이유 입니다.

Bluetooth 데몬의 호환성 플래그가 필요 합니다. 행 의 끝에 플래그를 /etc/systemd/system/dbus-org.bluez.service추가하여 선택한 편집기 로 편집 해야합니다 . 다음과 같아야합니다.-CExecStart=

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

sudo systemctl daemon-reload편집 후 서비스를 재부팅하거나 다시 시작하십시오 . 수신 된 파일이있는 특정 디렉토리 (예 : by)를 선택하십시오 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

obexpushd기본적으로 사용되는 rfcomm 채널 9를 차지하는 다른 디먼 또는 프로그램이 실행 중일 수 있습니다 . 이 경우 다음과 같이 채널을 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이제 양방향으로 파일을주고받을 수 있습니다.

파일을 수신하려고 할 때 장치를 연결하는 것을 잊지 마십시오.


이 지침은 안드로이드 폰과 Ubuntu 랩톱으로 다시 확인되었습니다. 설정, 전송 및 수신 확인이 작동합니다.
emk2203

주의 : /etc/systemd/system/dbus-org.bluez.service는의 심볼릭 링크 일 가능성이 높으며이 링크 /lib/systemd/...를 수정하고 싶지 않습니다. 당신은 재정의를 사용해야 만들기 /etc/systemd/system/dbus-org.bluez.service.d디렉토리를하고 끝나는 거기에 파일을 넣어 .conf(같은 add-compat-flag.conf) 만 포함 : [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(물론 적절한 라인 피드로)
Pikrass
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.