Sincronizziamo automaticamente le foto col Bluetooth


Dopo essermi stancato di togliere la microSD dal cellulare e fare copia incolla, ho pensato ad un modo più intelligente di sincronizzare le foto. Si tratta di montare il cellulare come una qualasiasi memoria di massa (via Bluetooth) e poi di sincronizzare le foto con rsync in modo da matenere anche tutti i metadati. Tutto questo fatto automaticamente da uno script all’avvio.

Prima di poter iniziare è necessario fare alcune operazioni preliminari. Innanzitutto sul computer che effettuerà la sincronizzazione installiamo alcuni pacchetti. Se usate Arch:

$ sudo pacman -Sy bluez bluez-utils obexfs

Accendiamo il Bluetooth sul cellulare e mettiamolo in modalità rilevabile.
Adesso facciamo il paring fra computer e cellulare. Se usate un programma grafico saltate questo passaggio. In breve:

$ bluetoothctl

aprirà il programma di gestione Bluetooth. Eseguite alla lettera queste operazioni all’interno del programma:

[bluetooth]# agent KeyboardOnly
[bluetooth]# default-agent
[bluetooth]# scan on

Dovrebbe apparire il nostro cellulare. Copiate l’indirizzo MAC.

[bluetooth]# pair MAC_mio_cellulare
[agent] Enter PIN code: a_scelta_o_dato_dal_cellulare

Se non ottenete: Pairing successful allora studiatevi questa wiki che descrive in dettaglio il procedimento.

Se tutto va bene creiamo un mount point nella home, così da evitare di usare i privilegi di root:

mkdir ~/mnt_phone

Questa sarà la directory root sulla quale faremo la sincronizzazione.

Adesso montiamo il cellulare con obexfs

$ obexfs -b MAC_del_cellulare ~/mnt_phone

Se tutto va bene potete navigare fra le directory, vedere foto, video, documenti, ecc…. Se invece trovate problemi con questo passaggio, molto probabilmente non avete il servizio ftp Bluetooth attivo sul cellulare. Ho notato che con i cellulari vecchi non ci sono problemi, mentre con Android è necessario installare un’applicazione che ci permette di attivare il servizio come Bluetooth File Transfer che trovate gratis nello store.

Finite le nostre operazioni di prova facciamo l’unmounting del telefono:

fusermount -u ~/mnt_phone

Lo script seguente permette di fare tutte queste operazioni (inclusa la sincronizzazione con rsync) in modo automatico. Inoltre supporta più di un cellulare e scrive un log delle operazioni(*).
Apriamo il nostro editor:

$ nano ~/photo_sync.sh

E modifichiamo lo script secondo le nostre esigenze (vedere parte CONFIG):

#!/bin/bash

PATH=/usr/bin:/home/localadmin

# Bluetooth auto sync photos

# ver 0.0

# Franco Masotti

# Note
# ====
# Tutti i path devono essere completi per evitare ambiguità
# N.B: cell_0 è tendenzialmente un percorso del tipo ~/mnt_phone
#      (*) per scrivere sul log file dovete avere la directory /var/log
#          alrimenti createla:
#          $ mkdir /var/log
#          e assicuratevi che lo script abbia i permessi per scrivere
#          sul file.

# -- CONFIG --
# Sorgente foto, mantenere "/*" così viene copiato solo il contenuto
source=("cell_0/*" "cell_1/*" "cell_n/*")
# mountpoint che abbiamo creato
mount=("cell_0/" "cell_1/" "cell_n/")
# destinazione file
dest=("dest_0" "dest_1" "dest_n")
MAC=("MAC_0" "MAC_1" "MAC_n")
# Nome arbitrario da usare nel log file
name=("nome_0" "nome_1" "nome_n")
# intervallo di attesa fra una sincronizzazione e l'altra
# bisogna contare in più uno scarto di qualche secondo ad ogni tentativo di mount 
intervallo_attesa=3600 # in secondi
# -- END CONFIG -- 

# -- DO NOT EDIT BELOW THIS LINE --
num=${#MAC[@]} # count number of elements

sleep 60 # intervallo iniziale per aspettare che la periferica bt sia pronta

while true # ciclo infinito
do
 for (( i=0; i<${num}; i++))
   else
    # per questioni di spazio sono andato a capo...
    echo "[$(date '+%Y-%m-%d, %T') OK\
 mobile_photo_sync] ${MAC[$i]} ${name[$i]} ;\
 ${dest[$i]} ; $(( ($FINISH-$START) ))s" >> /var/log/rsync.log
   fi

   fusermount -u ${mount[$i]} # unmount bluetooth filesystem
   #tts=(3600 - $(( ($FINISH-$START) )))

  else
   FINISH=$(date +%s)
   echo "[$(date '+%Y-%m-%d, %T') FAILED\
 mobile_photo_sync ret_obexfs=$ret_obexfs] ${MAC[$i]}\
 ${name[$i]} ; ${dest[$i]}" >> /var/log/rsync.log
   #tts=(3600 - $(( ($FINISH-$START) )))
  fi

  #sleep $tts # time to sleep
  sleep $intervallo_attesa

 done
done

Salviamo il file, diamogli i permessi di esecuzione e avviamolo per testarlo:

$ chmod +x photo_sync.sh
$ ./photo_sync.sh

Quando il programma è terminato controliamo il file di log:

$ cat /var/log/rsync.log

Una volta verificato il funzionamento possiamo aggiungere lo script come programma in avvio automatico:

$ crontab -e

e aggiungiamo queste righe:

# mobile photo sync
@reboot /percorso/della/home/photo_sync.sh

sostituendo /percorso/della/home/ con il valore corretto.

Spero di essere stato utile. Alla prossima…

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...