Comparta archivos entre 2 computadoras a través de bluetooth desde la terminal

8

Tengo dos computadoras adyacentes, una que ejecuta Linux con el modo de consola y otra con Windows 10. Quiero transferir archivos entre los dos, y ambos tienen capacidades de Bluetooth. Al principio, pensé en conectar un usb y realizar el siguiente procedimiento:

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

Y luego, quitaría el dispositivo usb y lo conectaría a la otra computadora, y transferiría los archivos a él; Pero pensé, ¿por qué no uso bluetooth para compartir archivos directamente?

¿Puedo usar bluetooth desde la terminal ya que no tengo GUI en esa computadora? No tengo experiencia previa en esto, así que si es posible, necesito una respuesta detallada.


fuente

Respuestas:

5

Primero, necesitas hacerlo apt install bluez-tools obexpushd.

Para enviar y recibir archivos, primero debe configurar y emparejar los dispositivos.

PREPARAR


de Arch Wiki - bluetooth :

Bluetoothctl

Inicia el bluetoothctlcomando interactivo. Allí se puede ingresar helppara obtener una lista de comandos disponibles.

  • Encienda el controlador al ingresar power on. Está apagado por defecto.
  • Ingrese devicespara obtener la dirección MAC del dispositivo con el que emparejar.
  • Ingrese al modo de descubrimiento de dispositivos con el scan oncomando si el dispositivo aún no está en la lista.
  • Encienda el agente con agent on.
  • Ingrese pair MAC Addresspara hacer el emparejamiento (la finalización de la pestaña funciona).
  • Si utiliza un dispositivo sin PIN, es posible que deba confiar manualmente en el dispositivo antes de que pueda volver a conectarse correctamente. Ingrese trust MAC Address para hacerlo.
  • Finalmente, use connect MAC_addresspara establecer una conexión.

Los dos últimos puntos no son necesarios para la parte de envío de una transferencia de archivos, pero necesita la connectúltima para la parte de recepción.

Una sesión de ejemplo puede verse así:

# 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 realizar cambios permanentes y para que el dispositivo udevesté activo después de un reinicio, se necesita una regla:

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

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

Consejo : Reemplace KERNEL=="hci0"con KERNEL=="hci[0-9]*"para que coincida con todas las interfaces BT.

Después de un ciclo de suspensión / reanudación, el dispositivo se puede encender automáticamente usando un servicio 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

Habilite una instancia de la unidad usando el nombre de su dispositivo bluetooth, por ejemplo [email protected].


Ahora sus dispositivos están emparejados. Comprueba que puedas ver al otro con bt-device -l.

ENVIAR

A continuación, debe enviar su systemdinfraestructura para el envío al trabajo; de lo contrario, obtendrá el siguiente error:

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.

Realice los systemdcambios necesarios con

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

Esto asegura que pueda enviar archivos. ¡A sudotambién en la primera línea fallará !

Puede enviar archivos ahora por bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2. Si una transferencia se bloquea al 100%, la ctrlcfinaliza (o cancela antes).

Para conocer el nombre de su dispositivo (12: 34: 56: 78: 9A: BC), puede emitir bt-device -l.

RECIBIR


del foro Raspberry Pi :

Queremos configurar un servidor push OBEX, por eso obexpushdera necesario.

Se necesita el indicador de compatibilidad en el demonio Bluetooth, debe editarlo /etc/systemd/system/dbus-org.bluez.servicecon el editor que elija agregando el -Cindicador al final de la ExecStart=línea. Debe tener un aspecto como este:

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

Reinicie o reinicie el servicio sudo systemctl daemon-reloaddespués de editarlo. Elija un directorio específico donde se colocan los archivos recibidos, por ejemplo, por sudo mkdir /bluetooth.

Inicie el servidor con sudo obexpushd -B -o /bluetooth -n, debe responder con:

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

Si eso no funciona y obtienes:

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

podría deberse a que tiene otro demonio o programa en ejecución que ocupa el canal 9 de rfcomm que obexpushdusa de manera predeterminada. En este caso, cambie el canal a 23 así:

sudo obexpushd -B23 -o /bluetooth -n

para usar el canal 23.

Una vez que empiece a obexpushdcorrer, abra una segunda ventana de terminal. Puede verificar que el servicio OBEX esté registrado en

sudo sdptool browse local

Debería enumerar (en el canal 23 en este caso), entre otros, esto:

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

En esa ventana, mientras obexpushdaún se está ejecutando, use bluetoothctlpara configurar discoverable on. Ahora empareje desde su otro dispositivo. El emparejamiento DEBE hacerse mientras se obexpushdestá ejecutando, o el otro dispositivo no reconocerá que el servicio está disponible. Si el teléfono ya está emparejado, quítelo de su otro dispositivo, úselo bluetoothctlpara eliminarlo de la computadora Ubuntu y vuelva a emparejarlo.

Después de conectarse (el último punto de la lista anterior), debería poder recibir archivos. Aparecerán en el /bluetoothdirectorio. Tenga en cuenta que serán propiedad de root, por lo que necesitará sudo para acceder a ellos. O puede hacer un chmod 0777 /bluetoothdirectorio de intercambio público, ya que la autenticación de bluetooth se basa en el dispositivo y no en el usuario de todos modos.

Para automatizar el comando obexpushd, cree el archivo /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

Luego, configúrelo para que se inicie automáticamente con

sudo systemctl enable obexpush

Después de reiniciar o reiniciar el servicio con sudo systemctl daemon-reload, ahora debería poder enviar y recibir archivos en ambas direcciones.

No olvide conectar los dispositivos cuando intente recibir archivos.

emk2203
fuente
Estas instrucciones fueron verificadas dos veces con un teléfono Android y una computadora portátil Ubuntu. Configurar, enviar y recibir confirmado para trabajar.
emk2203
Cuidado: /etc/systemd/system/dbus-org.bluez.servicees muy probable que sea un enlace simbólico /lib/systemd/..., y no desea modificar este. Debería usar una anulación: cree el /etc/systemd/system/dbus-org.bluez.service.ddirectorio y coloque un archivo que termine en .conf(como add-compat-flag.conf), que contenga solo: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(con los
avances de