端末からBluetooth経由で2台のコンピューター間でファイルを共有する


8

コンソールモードでLinuxを実行しているコンピュータとWindows 10を実行しているコンピュータの2台が隣接しています。2台のコンピュータ間でファイルを転送したいのですが、どちらにもBluetooth機能があります。最初は、USBを接続することを考えて、次の手順を実行しました。

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

次に、USBデバイスを取り外して他のコンピューターに接続し、ファイルを転送します。しかし、なぜbluetoothを使用して直接ファイルを共有しないのかと思いました。

そのコンピューターにGUIがないので、ターミナルからBluetoothを使用できますか?これまでの経験はありませんので、可能であれば詳細な回答が必要です。

回答:


5

まず、する必要がありapt install bluez-tools obexpushdます。

ファイルを送受信するには、まずデバイスをセットアップしてペアリングする必要があります。

セットアップ


Arch Wikiから-bluetooth

Bluetoothctl

bluetoothctl対話式コマンドを開始します。help利用可能なコマンドのリストを取得するために入力できます。

  • と入力して、コントローラの電源を入れpower onます。デフォルトではオフになっています。
  • 入力devicesして、ペアリングするデバイスのMACアドレスを取得します。
  • scan onデバイスがまだリストにない場合は、コマンドを使用してデバイス検出モードに入ります。
  • でエージェントをオンにしagent onます。
  • Enterキーpair MAC Addressを押してペアリングを行います(タブ補完機能)。
  • PINなしでデバイスを使用している場合、正常に再接続するには、デバイスを手動で信頼する必要があります。入力trust MAC Address してください。
  • 最後に、を使用connect MAC_addressして接続を確立します。

最後の2つの箇条書きは、ファイル転送の送信部分には必要ありませんが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"

ヒント:すべてのBTインターフェイスに一致させるにKERNEL=="hci0"KERNEL=="hci[0-9]*"、で置き換えます。

サスペンド/レジュームサイクルの後、カスタム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デバイス名を使用してユニットのインスタンスを有効にします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編集後、サービスを再起動または再起動します。受信したファイルが置かれる特定のディレクトリを選択します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実行したら、2つ目のターミナルウィンドウを開きます。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ディレクトリに表示されます。これらはrootが所有するため、それらにアクセスするにはsudoが必要です。またはchmod 0777 /bluetooth、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 2016年

注意:/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.