Compartilhe arquivos entre 2 computadores via bluetooth do terminal

8

Eu tenho dois computadores adjacentes, um executando o Linux com o modo de console e outro com o Windows 10. Quero transferir arquivos entre os dois, e ambos têm recursos de Bluetooth. No começo, pensei em conectar um usb e executar o seguinte procedimento:

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

E então, eu removia o dispositivo usb e o conectava ao outro computador e transferia os arquivos para ele; Mas pensei: por que não uso o bluetooth para compartilhar arquivos diretamente?

Posso usar o bluetooth do terminal porque não tenho interface gráfica nesse computador? Não tenho experiência prévia nisso; portanto, se for possível, preciso de uma resposta detalhada.


fonte

Respostas:

5

Primeiro, você precisa apt install bluez-tools obexpushd.

Para enviar e receber arquivos, é necessário configurar e emparelhar os dispositivos primeiro.

CONFIGURAÇÃO


do Arch Wiki - bluetooth :

Bluetoothctl

Inicie o bluetoothctlcomando interativo. Lá é possível inserir helppara obter uma lista dos comandos disponíveis.

  • Ligue a alimentação inserindo power on. Ele está desligado por padrão.
  • Digite devicespara obter o endereço MAC do dispositivo com o qual emparelhar.
  • Entre no modo de descoberta de dispositivos com o scan oncomando se o dispositivo ainda não estiver na lista.
  • Ligue o agente com agent on.
  • Enter pair MAC Addresspara fazer o emparelhamento (a conclusão da guia funciona).
  • Se você estiver usando um dispositivo sem um PIN, pode ser necessário confiar no dispositivo manualmente antes de se reconectar com êxito. Entre trust MAC Address para fazer isso.
  • Por fim, use connect MAC_addresspara estabelecer uma conexão.

Os últimos dois pontos de marcador não são necessários para a parte de envio de uma transferência de arquivo, mas você precisa dos connectúltimos para a parte de recebimento.

Uma sessão de exemplo pode parecer assim:

# 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

Para tornar as alterações permanentes e para ativar o dispositivo após uma reinicialização, udevé necessária uma regra:

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

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

Dica : Substitua KERNEL=="hci0"por KERNEL=="hci[0-9]*"para corresponder a todas as interfaces BT.

Após um ciclo de suspensão / retomada, o dispositivo pode ser ligado automaticamente usando um serviço systemd personalizado:

/etc/systemd/system/[email protected]

[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

Ative uma instância da unidade usando o nome do seu dispositivo bluetooth, por exemplo [email protected].


Agora seus dispositivos estão emparelhados. Verifique se você pode ver o outro com bt-device -l.

ENVIAR

Em seguida, você deve enviar sua systemdinfraestrutura para que o envio funcione, caso contrário, você receberá o seguinte erro:

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.

Faça as systemdalterações necessárias com

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

Isso garante que você possa enviar arquivos. Um sudotambém na primeira linha falhará !

Você pode enviar arquivos agora por bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2. Se uma transferência parar em 100%, a ctrlcfinaliza (ou aborta mais cedo).

Para saber o nome do seu dispositivo (12: 34: 56: 78: 9A: BC), você pode emitir bt-device -l.

RECEBER


no fórum Raspberry Pi :

Queremos configurar um servidor de envio OBEX, por isso obexpushdfoi necessário.

O sinalizador de compatibilidade no daemon Bluetooth é necessário; você deve editar /etc/systemd/system/dbus-org.bluez.servicecom o editor de sua escolha adicionando o -Csinalizador ao final da ExecStart=linha. Deve ficar assim:

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

Reinicie ou reinicie o serviço sudo systemctl daemon-reloadapós a edição. Escolha um diretório específico onde os arquivos recebidos são colocados, por exemplo, por sudo mkdir /bluetooth.

Inicie o servidor com sudo obexpushd -B -o /bluetooth -n, ele deverá responder com:

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

Se isso não estiver funcionando, e você obtém:

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

pode ser porque você tem outro daemon ou programa em execução que ocupa o canal rfcomm 9 que obexpushdusa por padrão. Nesse caso, altere o canal para 23 assim:

sudo obexpushd -B23 -o /bluetooth -n

para usar o canal 23.

Depois de começar obexpushd, abra uma segunda janela do terminal. Você pode verificar se o serviço OBEX está registrado com

sudo sdptool browse local

Deve listar (no canal 23, neste caso), entre outros, o seguinte:

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

Nessa janela, enquanto obexpushdainda estiver em execução, use bluetoothctlpara definir discoverable on. Agora pareie do seu outro dispositivo. O emparelhamento DEVE ser feito enquanto obexpushdestiver em execução, ou o outro dispositivo não reconhecerá o serviço disponível. Se o telefone já estiver emparelhado, remova-o do outro dispositivo, use-o bluetoothctlpara removê-lo do computador Ubuntu e emparelhe novamente.

Depois de conectar (o último marcador da lista acima), você poderá receber arquivos. Eles aparecerão no /bluetoothdiretório Observe que eles serão de propriedade do root, portanto você precisará do sudo para acessá-los. Ou você pode fazer um chmod 0777 /bluetoothpara um diretório de troca pública, pois a autenticação bluetooth é baseada em dispositivo e, de qualquer maneira, não em usuário.

Para automatizar o comando obexpushd, crie o arquivo /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

Em seguida, defina isso para iniciar automaticamente com

sudo systemctl enable obexpush

Após uma reinicialização ou reinicialização do serviço sudo systemctl daemon-reload, você poderá enviar e receber arquivos nas duas direções agora.

Não se esqueça de conectar os dispositivos ao tentar receber arquivos.

emk2203
fonte
Essas instruções foram verificadas duas vezes com um telefone Android e um laptop Ubuntu. Configurar, enviar e receber confirmado para o trabalho.
emk2203
Cuidado: /etc/systemd/system/dbus-org.bluez.serviceprovavelmente é um link simbólico /lib/systemd/..., e você não deseja modificar este. Você deve usar uma substituição: crie o /etc/systemd/system/dbus-org.bluez.service.ddiretório e coloque um arquivo que termine com .conf(como add-compat-flag.conf), contendo apenas: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(com os feeds de linha adequados, é claro)
Pikrass em