#!/usr/bin/env python
#
# syncusb.py
# Sincroniza bidireccionalmente un dispositivo extraible al montar y al desmontar.
# Autor: Canx (http://canx.blogspot.com)
# Requisitos: unison, python-gobject-dev
# python-daemon(http://pypi.python.org/pypi/python-daemon/)
# INSTALACION
# 1.- Situar en el home con permisos de ejecucion.
# 2.- Agregar en Sistemas->Preferencias->Aplicaciones de Inicio
# CONFIGURACION
# uuid_usb -> identificador del dispositivo del tipo XXXX-XXXX (usar lsusb para averiguarlo)
# origen -> directorio del dispositivo extraible
# destino -> directorio local
uuid_usb="7F25-812D"
origen="/media/TRAVELDRIVE/prueba/"
destino="/home/kiwik/prueba/"
# FIN CONFIGURACION
import subprocess
import os
import gobject
import gio
import daemon
import syslog
class SyncPendrive:
def mount_pre_unmount(self, volume_monitor, drive):
syslog.syslog("sincronizando al desmontar...")
self.sincronizar(volume_monitor.get_mounts()[0].get_uuid())
def mount_added(self, volume_monitor, drive):
syslog.syslog("sincronizando al montar...")
self.sincronizar(volume_monitor.get_mounts()[0].get_uuid())
def sincronizar(self, uuid):
if uuid == uuid_usb:
if os.path.exists(origen) and os.path.exists(destino):
subprocess.call("unison -batch -perms 0 " + origen + " " + destino, shell=True)
syslog.syslog("sincronizacion completada!")
else:
syslog.syslog("no existe algun directorio!")
else:
syslog.syslog("no es nuestro dispositivo!")
def __init__(self):
monitor = gio.volume_monitor_get()
monitor.connect("mount-pre-unmount", self.mount_pre_unmount)
monitor.connect("mount-added", self.mount_added)
with daemon.DaemonContext():
prueba = SyncPendrive()
loop = gobject.MainLoop()
loop.run()