Ubuntu – How to Sync OneDrive Business (Office 365) on Linux (Ubuntu)

sync

I tried the solution proposed by Sayed Metwaly (How to Sync OneDrive Business /Office 365 on Linux?) but I got the following error message:

=== Job === OneDrive_Sync: 'office365://xxxxxxxxx-my.sharepoint.com/personal/xxxxxx_oasis_xxxxxxxxx_be/Documents' <-> 'file:///home/xxxxxx/Onedrive'
142724 L: No file system for office365://xxxxxxxxx-my.sharepoint.com/personal/xxxxxx_oasis_xxxxxxxxx_be/Documents
File system at office365://xxxxxxxxx-my.sharepoint.com/personal/xxxxxx_oasis_xxxxxxxxx_be/Documents has been replaced by New OneDrive V2 API.
Click Browse button to Re-Browse to your OneDrive sync folder, as New OneDrive requires browser-based authentication (OAuth2)

Any idea on what I did wrong? Thanks

Best Answer

Here's what I did to get it working very quickly:

  1. Used a Windows machine to set up a sync using the Windows version of Goodsync. This includes setting up the (browser-based) authorization with Office 365.
  2. Used the "Export" option in the Windows version of Goodsync to create a jobs.tix file.
  3. Created a ~/.goodsync folder on the Linux machine.
  4. Placed the jobs.tix file in that folder.
  5. This is a NEW STEP I had to discover on my own: RENAMED the jobs.tix file to jobs-groups-options.tix — this allowed the entire configuration to be used.
  6. Applied the following changes, as shown by the diff output from the original Windows jobs.tix file:
    $ diff ~/Downloads/jobs.tix ~/.goodsync/jobs-groups-options.tix
    51c51
    <     Url = "file://"
    –––
    >     Url = "file:///home/tomh/onedrive"
    54c54
    <   Url = "file:///~tomh-a/od"
    –––
    >   Url = "file:///home/tomh/onedrive"
    68c68
    <  } Bookmarks = { }   TimeStamp = 013061702176
    –––
    >  } Bookmarks = { }   TimeStamp = 013061705503
    84c84
    <     Url = "file:///~tomh-a/od"
    –––
    >     Url = "file:///home/tomh/onedrive"
    87c87
    <   AcctUrl = "file:///~tomh-a/od"
    –––
    >   AcctUrl = "file:///home/tomh/onedrive"
    
    Where tomh-a is my Windows username, od was my local Windows OneDrive folder, tomh is my Linux username, and onedrive is my local Linux OneDrive folder. You can safely ignore the TimeStamp lines, I just left them in for completeness. Note that this diff output was not sanitized or changed in any way except to replace certain characters with the corresponding HTML entities. So yes, you all now know my Windows and Linux user names and OneDrive sync folders. Can't see how that compromises my security, and it improves the chances that it is typo-free.
  7. One obscure thing I changed that make it work: You'll find these two lines in the file:
    Side2 = <SideOptions>
    Conn = <Connect>
    I changed the second line as follows:
    Side2 = <SideOptions>
    Dir = <Connect>
    and it immediately started working.
    Disclaimer: After I ran the sync (next step) Goodsync changed the line back to Conn = <Connect>. So I could be wrong. Maybe I could have left it as-was (and is again). But that's the last change I made before it started working. It's entirely possible that I changed something else at the same time that made it work. But at least making that change didn't break it for me :)
  8. Run the sync with
    gsync sync "Onedrive"
    substituting "Onedrive" with whatever appears in the lines that look like:
    Jobs = { <Job>
    Name = "Onedrive"

It is my belief that the API v2.0 requirement of using OAuth has made it impossible to simply take someone else's jobs-groups-options.tix file and make it work for yourself simply using Linux. That is, until they decide to make a GUI version for Linux — or at least add the OAuth code that launches your browser to establish the authorization.

Related Question