jueves, 5 de noviembre de 2020

Onedrive actualizado en Linux

A pesar de ser un usuario de Dropbox desde que esta aplicación nació, y que además tengo contratada una licencia plus de 2TB, por razones profesionales —los documentos oficiales de mi Universidad tienen que localizarse solo en el software y en el servicio de alojamiento contratado por ella— no me ha quedado más remedio que usar también OneDrive. El problema para lograr un trabajo fluido por alguien que usa software libre para todo está en que no existe un demonio cliente oficial que permita sincronizar OneDrive con el disco duro de trabajo en un sistema operativo Linux. He mirado las posibilidades no oficiales. La que parece más sencilla, Insync, no es GPL y además es de pago. La siguiente posibilidad, Rclone (página propia aquí), sí es GPL y gratuita, y que además permite sincronizar Google Drive, la veo complicada en su configuración (véase aquí y aquí, para el que quiera). Lo que he visto más sencillo y rápido es onedrive, el cliente gratuito y libre de OneDrive de MS.

La instalación y preparación es sencilla. Una buena página que indica lo más importante es ésta. Por pasos:

1. Instalamos

su -c 'dnf install onedrive'


2. Ejecutamos:

$ onedrive

y en el terminal aparece una URL muy grande que nos conecta al sistema Microsoft. Hay que abrir la cuenta y luego (o si ya la tienes abierta también) queda una página en blanco. Copiamos la URL de esa página en el terminal donde decía Enter the response uri:

y con ello permitimos la conexión y sincronización de onedrive con nuestro disco duro.


 

3. Sincronizamos

$ onedrive --synchronize

y aparece en nuestro nautilus —ahora llamado Archivos—. Esta orden actualiza en ambas direcciones TODO el contenido de OneDrive. Si queremos sincronizar solo parte de los directorios o ficheros de nuestro OneDrive, generamos un fichero sync_list en el directorio /home/usuario/.config/onedrive. Ese fichero podría líneas similares a: 

Apuntes
Imagenes
Documenots/fichero1.odt

Siendo los primeros directorios y el último un fichero en concreto que queremos que se sincronice. 

Hasta ahora estoy sincronizándolo todo.

Después de cada cambio, se resincroniza mediante

$ onedrive --synchronize --resync

4. Si queremos evitar la resincronización continua, podemos incluir el cliente onedrive en systemd. De este modo se sincroniza de manera continua desde el inicio y nos olvidamos de resincronizar

$ systemctl --user enable onedrive # permiso
$ systemctl --user start onedrive # inicio servicio

Si queremos comprobar que onedrive está monitorizando los cambios:

$ systemctl status --user onedrive

Si tenemos la monitorización activada y aparece un problema al ejecutar una sincronización al ejecutar onedrive --synchronize --resync—que no es necesario hacer, ya que el sistema se monitoriza automáticamente—, podemos apagar el servicio onedrive en systemd

$ systemctl --user stop onedrive

luego resincronizar OneDrive

$ onedrive --synchronize --resync 

y luego reiniciar el servicio
 
$ systemctl --user start onedrive

Sencillo.


# ACTUALIZACIÓN

He tenido algunos problemas de corte de sincronización y pérdida de identificación. La única forma de solucionarlo ha sido ejecutar

$ onedrive --logout

y luego repetir el proceso de identificación (onedrive, copia del url, acceder a el y copiar la respuesta en el terminal, para luego sincronizar de nuevo onedrive --synchronize).

7 comentarios:

  1. Excelente mi universidad también me obliga a usar toda la suite de windows, incluyendo onedrive, bueno no me obligan porque es gratis. Esto soluciona mi amado linux y onedrive.

    ResponderEliminar
    Respuestas
    1. Gratis el uso para los profesores y alumnos; la Universidad estará pagando algo, y los estudiantes que se han acostumbrado a MS lo pagarán en el futuro. Das los caramelitos gratis a los niños y se los cobras cuatro veces cuando son mayores y no pueden prescindir de ellos

      Eliminar
    2. Sí lo sé, pero no hay de otra además, pues 5 teras de almacenamiento en nube, mmm es un buen caramelito, aunque en general uso Linux, solo el office cuando es necesario por cuestiones de formato, pero si puedo enviar pdf pues el office vale maye... por cierto... no paso ni del loging mira me sale esto al intentar pasar la url de respuesta:

      HTTP request returned status code 400 (Bad Request)
      {
      "correlation_id": "2f815e14-83bd-4aaf-9a95-28c507abfca7",
      "error": "invalid_grant",
      "error_codes": [
      9002313
      ],
      "error_description": "AADSTS9002313: Invalid request. Request is malformed or invalid.\r\nTrace ID: 2116b06e-16e6-42a2-b580-2fcde7dcb400\r\nCorrelation ID: 2f815e14-83bd-4aaf-9a95-28c507abfca7\r\nTimestamp: 2021-02-12 04:22:31Z",
      "error_uri": "https:\/\/login.microsoftonline.com\/error?code=9002313",
      "timestamp": "2021-02-12 04:22:31Z",
      "trace_id": "2116b06e-16e6-42a2-b580-2fcde7dcb400"
      }
      ----------------
      ??:? [0x555a40a009d9]
      ??:? [0x555a409ffcb5]
      ??:? [0x555a40a00b65]
      ??:? [0x555a409fef58]
      ??:? [0x555a409fe8c5]
      ??:? [0x555a40a0c7a8]
      ??:? void rt.dmain2._d_run_main2(char[][], ulong, extern (C) int function(char[][])*).runAll() [0x7f1b84d329db]
      ??:? _d_run_main2 [0x7f1b84d327ee]
      ??:? _d_run_main [0x7f1b84d3265d]
      ??:? __libc_start_main [0x7f1b8491e0b2]
      ??:? [0x555a409d75ed]

      Eliminar
    3. Ya lo solucioné, solo es instalar la ultima versión, funciona bien, pero me desconfigura mi xfce de manera irremediable, en fin.

      Eliminar
    4. Como he dicho, yo lo uso por orden superior. Mis datos los tengo en dropbox desde 2007. Sí, lo sé, es de pago, pero me he acostumbrado tanto a él que no puedo corregir esta adicción

      Eliminar
  2. ¿Se puede sincronizar solo una carpeta específica o que pueda seleccionar varias?

    ResponderEliminar
    Respuestas
    1. Sí. Tenía la intención de escribirlo, pero no tengo tiempo, así que te llevo a la URL que había recomendado en la entrada. En el punto 2b lo explica.
      https://www.linuxuprising.com/2020/02/how-to-keep-onedrive-in-sync-with.html

      Eliminar