How to Resolve OneDrive Sync Errors and Reauthorize in Linux

Previously, I wrote an article on how to use OneDrive on Linux. However, since then, there have been significant changes in the installation process, so I’ve updated the article with the latest information. The new method simplifies the setup and improves performance.

You can find the OneDrive client here:
https://github.com/abraunegg/onedrive

I’ve left the old article at the bottom for reference, so feel free to compare the old and new procedures. By understanding the differences, you may gain a deeper understanding of how to use OneDrive on Linux.


Steps to Use OneDrive on Ubuntu 24.04

Install Required Dependencies

First, install the necessary packages:

sudo apt update
sudo apt install build-essential
sudo apt install libcurl4-openssl-dev libsqlite3-dev pkg-config git curl
sudo apt install libnotify-dev # If you want to enable notification support

Install and Activate the D Language Compiler

Since the OneDrive client is written in the D programming language, you’ll need to install the DMD compiler:

curl -fsS https://dlang.org/install.sh | bash -s dmd

You will see a message similar to the following:

Downloading https://dlang.org/d-keyring.gpg
######################################################################## 100.0%
Downloading https://dlang.org/install.sh
######################################################################## 100.0%
gpg: Directory ‘/home/mamu/.gnupg’ has been created
gpg: Keybox ‘/home/mamu/.gnupg/pubring.kbx’ has been created
gpg: /home/mamu/.gnupg/trustdb.gpg: Trust database has been created
The latest version of this script was installed as ~/dlang/install.sh.
It can be used to install further D compilers.
Run ~/dlang/install.sh –help for usage information.

Downloading and unpacking https://downloads.dlang.org/releases/2.x/2.109.1/dmd.2.109.1.linux.tar.xz
######################################################################## 100.0%
Using dub 1.38.1 shipped with dmd-2.109.1

Run source ~/dlang/dmd-2.109.1/activate in your shell to use dmd-2.109.1.
This will set up PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run deactivate later on to restore your environment.

Important Point

Pay close attention to the message that appears at the end.

Run `source ~/dlang/dmd-2.109.1/activate` in your shell to use dmd-2.109.1.

This is the command to activate the DMD compiler. However, the version number (2.109.1) may vary depending on when it was installed.

Activating the DMD Compiler

Check the installed version of DMD

Enter the following command in the terminal:

ls ~/dlang

This command will display the files and folders in the ~/dlang directory.
Example output:

d-keyring.gpg dmd-2.109.1 install.sh

The folder starting with dmd- indicates the installed version of DMD.

Activating DMD

To activate DMD without worrying about the version number, use a wildcard (*):

source ~/dlang/dmd-*/activate

This will automatically select the folder starting with dmd- in the ~/dlang directory and activate the DMD compiler. Alternatively, if you want to activate the latest version, use the following command:

source $(ls -d ~/dlang/dmd-* | sort -V | tail -n 1)/activate

This will activate the DMD compiler.

Note: If you skip this step, you will encounter errors during the compilation process later.

Verifying the Activation

After running the command, the terminal prompt will change as follows:

(dmd-2.109.1) username@computername:~$

If the terminal prompt displays (dmd-version number) at the beginning, the DMD compiler has been successfully activated.

Notes

  • If the version number differs: DMD versions are updated regularly, so the number will change depending on the installed version. By using the wildcard *, you can always activate the latest version.
  • If multiple versions of DMD are installed: You can specify a particular version to activate if more than one version is installed.
    Example:
    source ~/dlang/dmd-2.109.1/activate
  • To deactivate: To revert the environment and deactivate the DMD compiler, run the following command:
    deactivate

With these steps, you have successfully installed and activated the DMD compiler. You can now proceed to build and install the OneDrive client.

Additional Notes

  • Why activation is necessary: Activating the DMD compiler sets up the system environment variables, allowing the dmd command to be used. Skipping this step may result in errors during the later build process.
  • If you encounter an error: If you receive an error like “command not found,” make sure the activation command was executed correctly.

Download and Install the OneDrive Client

git clone https://github.com/abraunegg/onedrive.git
cd onedrive

Build and Install

./configure
make clean; make
sudo make install

If you want to enable notification support:

./configure --enable-notifications
make clean; make
sudo make install

After running the make clean; make command, the following message was displayed:

rm -f onedrive onedrive.o version
rm -rf autom4te.cache
rm -f config.log config.status
if [ -f .git/HEAD ] ; then \
git describe –tags > version ; \
else \
echo v2.5.0 > version ; \
fi
dmd -w -J. -O -L-lcurl -L-lsqlite3 -L-ldl src/main.d src/config.d src/log.d src/util.d src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d -ofonedrive

This output shows the result of the make clean and make commands.

Explanation of the Output

Cleanup Process

rm -f onedrive onedrive.o version
rm -rf autom4te.cache
rm -f config.log config.status
  • rm -f onedrive onedrive.o version: Deletes the previously generated executable file onedrive, object file onedrive.o, and version information file version from the previous build.
  • rm -rf autom4te.cache: Recursively deletes the auto-generated cache directory autom4te.cache.
  • rm -f config.log config.status: Deletes the configuration log file config.log and the configuration status file config.status.

Generating Version Information

if [ -f .git/HEAD ] ; then \
git describe --tags > version ; \
else \
echo v2.5.0 > version ; \
fi
  • Retrieves the latest tag information from the Git repository and writes it to the version file. If a Git repository is not available, the default version v2.5.0 is used.

Compilation

dmd -w -J. -O -L-lcurl -L-lsqlite3 -L-ldl src/main.d src/config.d src/log.d src/util.d \
src/qxor.d src/curlEngine.d src/onedrive.d src/webhook.d src/sync.d src/itemdb.d \
src/sqlite.d src/clientSideFiltering.d src/monitor.d src/arsd/cgi.d -ofonedrive

dmd: The D language compiler is used to compile the source code.

Explanation of Options:

  • -w: Display all warnings.
  • -J.: Add the current directory to the import path.
  • -O: Enable optimization.
  • -L-lcurl -L-lsqlite3 -L-ldl: Use the libcurl, libsqlite3, and libdl libraries during linking.
  • -ofonedrive: Specify the output file name as onedrive.

Source Files:

Each .d file in the src directory is being compiled.

After running the sudo make install command, the following output was displayed:

/usr/bin/install -c -D onedrive /usr/local/bin/onedrive
/usr/bin/install -c -D -m 0644 onedrive.1 /usr/local/share/man/man1/onedrive.1
/usr/bin/install -c -D -m 0644 contrib/logrotate/onedrive.logrotate /usr/local/etc/logrotate.d/onedrive
mkdir -p /usr/local/share/doc/onedrive
/usr/bin/install -c -D -m 0644 readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md /usr/local/share/doc/onedrive
/usr/bin/install -c -d -m 0755 /usr/lib/systemd/user /usr/lib/systemd/system
/usr/bin/install -c -m 0644 contrib/systemd/onedrive@.service /usr/lib/systemd/system
/usr/bin/install -c -m 0644 contrib/systemd/onedrive.service /usr/lib/systemd/user

This output shows the process of installing the OneDrive client on the system using the sudo make install command.

Explanation of the Output

Installing the Executable File

/usr/bin/install -c -D onedrive /usr/local/bin/onedrive

The onedrive executable is being installed to /usr/local/bin/onedrive.

Installing the Manual Page

/usr/bin/install -c -D -m 0644 onedrive.1 /usr/local/share/man/man1/onedrive.1

The manual page onedrive.1 is being installed to /usr/local/share/man/man1/.

Installing the Log Rotation Configuration

/usr/bin/install -c -D -m 0644 contrib/logrotate/onedrive.logrotate /usr/local/etc/logrotate.d/onedrive

The logrotate configuration file is being installed to /usr/local/etc/logrotate.d/.

Creating the Documentation Directory

mkdir -p /usr/local/share/doc/onedrive

A directory for documentation is being created.

Installing Documentation Files

/usr/bin/install -c -D -m 0644 readme.md config LICENSE changelog.md docs/advanced-usage.md docs/application-config-options.md docs/application-security.md docs/business-shared-items.md docs/client-architecture.md docs/contributing.md docs/docker.md docs/install.md docs/national-cloud-deployments.md docs/podman.md docs/privacy-policy.md docs/sharepoint-libraries.md docs/terms-of-service.md docs/ubuntu-package-install.md docs/usage.md docs/known-issues.md docs/webhooks.md /usr/local/share/doc/onedrive

Various documentation files are being installed to /usr/local/share/doc/onedrive.

Creating the systemd Service File Directory

/usr/bin/install -c -d -m 0755 /usr/lib/systemd/user /usr/lib/systemd/system

Directories for the systemd user and system unit files are being created.

Installing the systemd Service Files

/usr/bin/install -c -m 0644 contrib/systemd/onedrive@.service /usr/lib/systemd/system
/usr/bin/install -c -m 0644 contrib/systemd/onedrive.service /usr/lib/systemd/user

The onedrive systemd service files are being installed in the appropriate directories.


Deactivating the DMD Compiler

Once the build is complete, deactivate the DMD compiler:

deactivate

Alternatively, you can restart the terminal.


Setting up OneDrive

Run the onedrive command:

onedrive

A URL will be displayed in the terminal. Open this URL in a browser and log in with your Microsoft account. After logging in, copy the URL displayed in the browser’s address bar and paste it into the terminal.

After running the onedrive command, the following output will be displayed:

Using IPv4 and IPv6 (if configured) for all network operations
Attempting to contact Microsoft OneDrive Login Service
Successfully reached Microsoft OneDrive Login Service
Configuring Global Azure AD Endpoints
Authorize this application by visiting:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=********-****-****-****-************&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient

Note: The client_id in the URL above is partially masked with *. When publishing articles, please be careful not to include any personal or sensitive information related to security.

This message is displayed when running the OneDrive client for the first time, indicating that authentication with your Microsoft account is required.

Authentication Procedure

  1. Open the URL displayed in the terminal:
    Copy the URL displayed in the terminal and open it in a web browser.
  2. Log in with your Microsoft account:
    In the browser, enter the email address and password of the Microsoft account you want to sync with OneDrive.
  3. Grant access to the app:
    The application will request permission to access your OneDrive data. Click “Allow” or “Consent” to grant access.
  4. Copy the redirected URL:
    After authentication, the browser will redirect to a URL such as https://login.microsoftonline.com/common/oauth2/nativeclient?code=.... The page may display a blank screen or an error, but copy the entire URL from the address bar.
  5. Paste into the terminal:
    Return to the terminal and ensure the following prompt is displayed:
    Enter the response uri:
    Paste the URL you copied earlier and press Enter.
  6. Complete authentication:
    If authentication is successful, the following message will be displayed:
    Authorization successful.
    Initialization complete.
    The setup of the OneDrive client is now complete, and it is ready to sync.

Note: After completing the browser-based authentication and pasting the redirected URL into the terminal, the following output will be displayed:

Enter the response uri from your browser: https://login.microsoftonline.com/common/oauth2/nativeclient?code=**********

The application has been successfully authorised, but no extra command options have been specified.

Please use ‘onedrive –help’ for further assistance in regards to running this application.

Explanation

The message indicates that the authentication was successful:

The application has been successfully authorised

However, since no additional command options were specified, no specific action was performed:

but no extra command options have been specified.

You are prompted to use the onedrive --help command to check available options:

Please use 'onedrive --help' for further assistance in regards to running this application.

How to Check the Configuration

To verify the settings that the OneDrive client is using, run the following command:

onedrive --display-config

This command displays the current configuration options and how they are interpreted at runtime. In my case, the following output was displayed:

Application version = onedrive v2.5.0-8-g88e2493
Compiled with = DMD 2109
User Application Config path = /home/mamu/.config/onedrive
System Application Config path = /etc/onedrive
Applicable Application ‘config’ location = /home/mamu/.config/onedrive/config
Configuration file found in config location = false – using application defaults
Applicable ‘sync_list’ location = /home/mamu/.config/onedrive/sync_list
Applicable ‘items.sqlite3’ location = /home/mamu/.config/onedrive/items.sqlite3
Config option ‘drive_id’ =
Config option ‘sync_dir’ = ~/OneDrive
Config option ‘enable_logging’ = false
Config option ‘log_dir’ = /var/log/onedrive
Config option ‘disable_notifications’ = false
Config option ‘skip_dir’ =
Config option ‘skip_dir_strict_match’ = false
Config option ‘skip_file’ = ~*|.~*|*.tmp|*.swp|*.partial
Config option ‘skip_dotfiles’ = false
Config option ‘skip_symlinks’ = false
Config option ‘monitor_interval’ = 300
Config option ‘monitor_log_frequency’ = 12
Config option ‘monitor_fullscan_frequency’ = 12
Config option ‘read_only_auth_scope’ = false
Config option ‘dry_run’ = false
Config option ‘upload_only’ = false
Config option ‘download_only’ = false
Config option ‘local_first’ = false
Config option ‘check_nosync’ = false
Config option ‘check_nomount’ = false
Config option ‘resync’ = false
Config option ‘resync_auth’ = false
Config option ‘cleanup_local_files’ = false
Config option ‘classify_as_big_delete’ = 1000
Config option ‘disable_upload_validation’ = false
Config option ‘disable_download_validation’ = false
Config option ‘bypass_data_preservation’ = false
Config option ‘no_remote_delete’ = false
Config option ‘remove_source_files’ = false
Config option ‘sync_dir_permissions’ = 700
Config option ‘sync_file_permissions’ = 600
Config option ‘space_reservation’ = 52428800
Config option ‘application_id’ = d50ca740-c83f-4d1b-b616-12c519384f0c
Config option ‘azure_ad_endpoint’ =
Config option ‘azure_tenant_id’ =
Config option ‘user_agent’ = ISV|abraunegg|OneDrive Client for Linux/v2.5.0-8-g88e2493
Config option ‘force_http_11’ = false
Config option ‘debug_https’ = false
Config option ‘rate_limit’ = 0
Config option ‘operation_timeout’ = 3600
Config option ‘dns_timeout’ = 60
Config option ‘connect_timeout’ = 10
Config option ‘data_timeout’ = 60
Config option ‘ip_protocol_version’ = 0
Config option ‘threads’ = 8
Compile time option –enable-notifications = false

Selective sync ‘sync_list’ configured = false

Config option ‘sync_business_shared_items’ = false

Config option ‘webhook_enabled’ = false

Points

  • sync_dir: The location of the directory where files are synced locally. By default, it is set to ~/OneDrive.
  • Config path: The location where the configuration file is stored.

Note

If you are using multiple OneDrive accounts, you need to specify the configuration directory using the --confdir option.


OneDrive Client Operation Modes

The OneDrive client has two operation modes:

  1. Standalone Sync Mode (single synchronization):
    onedrive --synchronize
    Or shortened:
    onedrive -s
  2. Monitor Mode (real-time sync):
    onedrive --monitor
    Or shortened:
    onedrive -m

Tip

  • Use Standalone Sync Mode if you want to sync files only once.
  • Use Monitor Mode if you want to sync file changes in real-time.

Client-Side Filtering Settings

By default, all data from your OneDrive account is synced locally. However, if you want to sync only specific folders or files, you need to configure filtering.

Method 1: Using the sync_list file

  1. Navigate to the configuration directory:
    cd ~/.config/onedrive
  2. Create a sync_list file and specify the paths to the folders or files you want to sync:
    nano sync_list
    Example: To sync only the Documents and Pictures/Vacation folders:
    Documents
    Pictures/Vacation
  3. Save and exit the file.

Method 2: Using command-line options

  • Exclude specific directories from sync:
    onedrive --synchronize --exclude-dir 'directory_name'
  • Exclude dotfiles from sync:
    onedrive --synchronize --skip-dotfiles
  • Exclude specific file types:
    onedrive --synchronize --skip-file 'pattern'
    Example: To exclude .tmp files:
    onedrive --synchronize --skip-file '*.tmp'

Troubleshooting

Common Errors in Monitor Mode

  1. Initialization FailureCause:
    The system has reached the limit of inotify watches.Solution: Increase the value of fs.inotify.max_user_watches. Check the current value:
    sysctl fs.inotify.max_user_watches
    To increase the value:
    sudo sysctl fs.inotify.max_user_watches=1048576
  2. Unable to Add New inotify Watch
    Cause and Solution: Same as above.

Making the Changes Permanent

Add the following line to the /etc/sysctl.conf file:

fs.inotify.max_user_watches=1048576

Testing the Configuration

When testing the OneDrive client configuration, it is safer to use the --dry-run option. This option simulates the sync operation without actually downloading, uploading, or deleting any files.

Example:

onedrive --synchronize --verbose --dry-run

Point:

  • By using the --dry-run option, you can verify the sync behavior without affecting any actual files.
  • Combining it with the --verbose option will display detailed log information.

Running Sync with Microsoft OneDrive

By default, all files will be downloaded to the ~/OneDrive directory. You can change this download location using the sync_dir option in the configuration file.

Basic Sync Command:

onedrive --synchronize

Or shortened:

onedrive -s

This will sync the files from your OneDrive account to your local ~/OneDrive directory or the location specified in sync_dir.

Tip:

If you want to treat your local files as the “trusted source,” use the following command:

onedrive --synchronize --local-first

Syncing Specific Directories Only

In some cases, you may want to sync only a specific directory within ~/OneDrive without changing the configuration. You can use the --single-directory option for this.

Example:

onedrive --synchronize --single-directory 'directory_name'

Specific example:

To sync only the ~/OneDrive/linux directory:

onedrive --synchronize --single-directory 'linux'

Performing “One-Way” Download Sync

If you want to perform a “download-only” sync from OneDrive to your local machine, use the --download-only option.

Command:

onedrive --synchronize --download-only

Important Notes:

  • All content from OneDrive will be downloaded locally.
  • Files deleted online will remain locally; they will not be automatically deleted.

Important:

In version v2.5.x and later, when using the --download-only option, files deleted online will remain on the local machine.

If you want to delete files locally that were deleted online, use the following command:

Clean up files deleted online:

onedrive --synchronize --download-only --cleanup-local-files

Performing “One-Way” Upload Sync

If you want to perform an “upload-only” sync from your local machine to OneDrive, use the --upload-only option.

Command:

onedrive --synchronize --upload-only

Important Notes:

  • In “upload-only” mode, the existing content on OneDrive is not checked or synced.
  • Files and folders deleted locally will also be deleted from OneDrive.

To prevent deleting data on OneDrive:

To ensure files deleted locally are not removed from OneDrive, add the --no-remote-delete option.

Command:

onedrive --synchronize --upload-only --no-remote-delete

Points:

  • --upload-only: Uploads local changes (additions, modifications, moves, deletions) to OneDrive.
  • --no-remote-delete: Even if files are deleted locally, they will not be removed from OneDrive. This creates a one-way archive on OneDrive where files are only added and not deleted.

Important Notes for Beginners

When using critical options, always test first with the --dry-run option.

Using the wrong options can result in unintended data deletion.

Make sure you fully understand the configuration file and command options before proceeding.

Performing Selective Sync Using the sync_list File

With the OneDrive client, you can perform “selective sync” using a sync_list file to sync only specific files and directories. This allows you to sync only the data you need while preventing unnecessary data from being synced.

Creating the sync_list File

  1. Navigate to the configuration directory:
    cd ~/.config/onedrive
  2. Create the sync_list file:
    nano sync_list
  3. Write the files or directories you want to sync:
    For each line, write the relative path from sync_dir (by default, ~/OneDrive).
    Example:
    # Comment: Sync the Documents folder
    Documents/
    # Comment: Sync the Pictures/Vacation folder
    Pictures/Vacation/
    # Comment: Sync a specific file
    Notes/meeting_minutes.docx
  4. Save the file and exit:
    Press Ctrl + O to save, then Ctrl + X to exit the editor.

Important Notes About sync_list

  • Default Exclusion Setting:
    When using sync_list, any files or directories not listed in the file will be excluded from sync.
  • Path Specification:
    The paths should be relative to sync_dir.Add a / at the end of the folder name to specify that it is a directory.
  • Using Wildcards:
    You can use * to match any string.
    Example:
    # Sync all `.pdf` files
    Documents/*.pdf
  • Exclusion Rules:
    Add ! or - at the beginning of a line to exclude matching items.
    Example:
    # Exclude the Temp folder
    !Documents/Temp/

Important After Using sync_list

After creating or modifying a sync_list, you need to perform a full resync with the following command:

onedrive --synchronize --resync

Warning:

Using the --resync option will reset the local sync state. In some cases, this may result in local data being overwritten.

Make sure to back up your local data before proceeding.

Using the --resync Option

The --resync option is used to rebuild the sync state. It is necessary in the following cases:

  • When configuration changes are made:
    Such as changes to sync_dir, skip_file, skip_dir, skip_dotfiles, etc.
  • When the sync_list file is created, modified, or deleted.
  • When the sync state is unclear.

How to Run --resync

onedrive --synchronize --resync

Warning During Execution:

Using –resync will delete your local ‘onedrive’ client state, so there won’t be a record of your current ‘sync status.’
This may potentially overwrite local versions of files with older versions downloaded from OneDrive, leading to local data loss.
If in doubt, back up your local data before using –resync.

Are you sure you want to proceed with –resync? [Y/N]

To proceed, enter Y.

Note:

Use --resync with caution.

When used in automated environments, adding the --resync-auth option will automatically approve the confirmation prompt, but it increases the risk of data loss, so it is not recommended.


Using the --force-sync Option

If you want to temporarily sync only specific files or directories, you can use the --force-sync option to ignore the skip_file and skip_dir settings without changing the configuration.

How to Use:

onedrive --synchronize --single-directory 'directory_name' --force-sync

Example:

onedrive --synchronize --single-directory 'Projects/Important' --force-sync

Warning During Execution:

WARNING: Overriding application configuration to use application defaults for skip_dir and skip_file due to –sync –single-directory –force-sync being used

Using –force-sync will reconfigure the application to use defaults. This may have unknown future impacts.
By proceeding with this option, you accept any impacts, including potential data loss resulting from using –force-sync.

Are you sure you want to proceed with –force-sync? [Y/N]

To proceed, enter Y.

Note:

When using --force-sync, some settings will be ignored, which may lead to unexpected behavior or the risk of data loss.

Use it cautiously and only when necessary.


Summary of Key Points

Using sync_list:

  • Effective for syncing only the necessary files and folders.
  • Always run --resync after creating or modifying the sync_list.

Using --resync:

  • Used to reset and rebuild the sync state.
  • There is a risk of data loss, so back up your data and use it with caution.

Using --force-sync:

  • Temporarily bypasses settings for specific sync operations.
  • There is a risk of unexpected behavior, so only use it when needed.

Advice for Beginners

The Importance of Backups:

Always back up your data before making significant changes or using critical options.

Using the --dry-run Option:

This option allows you to verify the operation without performing actual file actions.

Example Command:

onedrive --synchronize --dry-run --verbose

Refer to the Official Documentation:

For any questions or detailed information, refer to the official documentation or use the help command:

onedrive --help

How to Handle Password Changes for Microsoft OneDrive Accounts

Sync Errors Due to Password Changes

When you change the password for your Microsoft OneDrive account, the OneDrive client’s authentication credentials become invalid, preventing it from syncing. The next time you run the client, you may see the following error message:

ERROR: AADSTS50173: The provided grant has expired due to it being revoked, a fresh auth token is needed. The user might have changed or reset their password. The grant was issued on ‘‘ and the TokensValidFrom date (before which tokens are not valid) for this user is ‘‘.

ERROR: You will need to issue a –reauth and re-authorise this client to obtain a fresh auth token.

Explanation:

The AADSTS50173 error code indicates that the authentication token has been invalidated.

This is caused by the existing authentication credentials becoming invalid due to a password change or reset.


Steps for Reauthentication

To reauthenticate the client after a password change, follow these steps:

Stop the OneDrive Client

  • If running as a system service:
    systemctl --user stop onedrive
    or
    systemctl stop onedrive
    (Use the appropriate command depending on your service.)
  • If running manually:Simply close the client.

Run the Reauthentication Command

In the terminal, run the following command:

onedrive --reauth

Note:

If you are using multiple accounts or a specific configuration directory, add the --confdir option:

onedrive --confdir="~/.config/onedrive-personal" --reauth

Reauthenticate via Browser

After running the command, a URL will appear in the terminal for authentication.

Open this URL in your browser and log in to your Microsoft account.

Grant the app access permissions.

Copy the redirected URL from the browser and paste it into the terminal.


Restart the Client

  • If running as a system service:
    systemctl --user start onedrive
    or
    systemctl start onedrive
  • If running manually:
    onedrive --synchronize

Verify Sync

Ensure that the client resumes syncing properly.


Determining Sync Results and Handling Errors

Successful Sync

If the sync completes without errors, the following message will be displayed:

Sync with OneDrive is complete

When Sync Errors Occur

If an error occurs during the sync process, the following message will be displayed:

Sync with OneDrive has completed, however there were some errors.

Handling Sync Errors

When a sync error occurs, the following message will be displayed:


You can check the details of the error to identify the cause.

How to Handle Errors

Check the Logs

Review the client’s output or log files to determine which files or directories caused the error.

Common Causes and Solutions

  • Network Error:Check your internet connection and try syncing again.
  • File Name Issues:If the issue is caused by special characters or long file names, rename the file.
  • Permission Issues:Check and correct the permissions for the affected files or directories.

Retry Syncing

onedrive --synchronize

Perform Reauthentication or Resync if Needed

  • For authentication errors: Follow the reauthentication steps above.
  • To reset the sync state:
    onedrive --synchronize --resync

Note:

Using --resync will reset the local sync database. Be sure to back up your data beforehand.


Password Expiration and Regular Checks

If your organization enforces password expiration policies, you’ll need to change your password regularly. Sync errors may occur when the password changes, so keep the following points in mind:

  • After changing your password, reauthentication will be required for the client.
  • If an error occurs, promptly follow the reauthentication steps to resume syncing.

Comparison Between the Linux OneDrive Client and Rclone

Linux OneDrive Client

  • Official Name: onedrive (or onedrive-d)
  • Developer: Community-led open-source project
  • Key Features:
    • Bidirectional sync with Microsoft OneDrive
    • Supports symbolic links
    • Real-time monitoring of file changes (Monitor mode)
    • Selective sync and filtering options

Advantages:

  • Native OneDrive Support:
    • Optimized specifically for Microsoft OneDrive, allowing full use of its features.
  • Real-Time Sync:
    • Automatically syncs files as changes are detected.
  • Detailed Configuration:
    • Allows fine-tuned control over sync targets using the sync_list file and various options.

Disadvantages:

  • Limited to One Cloud Service:
    • Only works with OneDrive; does not support other cloud storage services.
  • Complex Setup:
    • While offering advanced configuration options, it may be challenging for beginners.
  • Maintenance Frequency:
    • Being an open-source project, updates can be sporadic depending on development progress.

Rclone

  • Developer: Nick Craig-Wood (Open-source project)
  • Key Features:
    • Integration with over 30 cloud services (OneDrive, Google Drive, Dropbox, etc.)
    • Command-line-based file transfer and sync tool
    • Advanced features like encryption, caching, and virtual file system (VFS)

Advantages:

  • Multi-Cloud Support:
    • Manage multiple cloud services with a single tool.
  • Rich Functionality:
    • Supports sync, copy, move, delete, and mount operations.
  • Automation-Friendly:
    • As a command-line tool, it integrates well with scripts and automation.

Disadvantages:

  • Real-Time Sync Complexity:
    • Achieving real-time bidirectional sync requires additional tools like Cron.
  • Complex Setup:
    • Due to its many features, mastering the setup and usage requires a learning curve.
  • Incremental Change Detection Limitations:
    • Some cloud services may have limitations on detecting changes, affecting sync efficiency.

Comparison and Considerations

Choosing Based on Use Case:

  • If you only use OneDrive and prioritize real-time sync:The Linux OneDrive client is ideal, as it’s optimized for OneDrive and supports real-time syncing with Monitor mode.
  • If you need to manage multiple cloud services:Rclone is a powerful choice. It simplifies management by integrating various services into one tool.

Setup and Usability:

  • For simpler setup:The Linux OneDrive client is more focused, with fewer configuration options tailored specifically to OneDrive.
  • For flexibility and advanced features:Rclone offers extensive customization options and features to meet various needs.

Performance and Reliability:

  • For high-performance, real-time sync:The Linux OneDrive client is optimized for efficient synchronization with OneDrive.
  • For handling large datasets or complex sync requirements:Rclone provides advanced features such as parallel transfers, bandwidth throttling, and encryption, making it suitable for large-scale operations.

Conclusion

The Linux OneDrive client is a simple and effective tool for users who want to use OneDrive on Linux. It offers real-time sync, selective sync, and OneDrive-specific features.

Rclone is best suited for users who need to manage multiple cloud services or require advanced features. It is highly customizable and can meet diverse needs.

In my opinion:

  • For OneDrive users on Linux: The Linux OneDrive client is the better choice for real-time sync and OneDrive-specific features.
  • For managing multiple cloud services or automating tasks: Rclone is the ideal tool for its flexibility and extensive feature set.

We will set up OneDrive on Ubuntu 20.04. All you need to do is copy and paste the commands from the GitHub page. First, we will install the necessary dependencies.

https://github.com/abraunegg/onedrive

sudo apt install build-essential
sudo apt install libcurl4-openssl-dev
sudo apt install libsqlite3-dev
sudo apt install pkg-config
sudo apt install git
sudo apt install curl
curl -fsS https://dlang.org/install.sh | bash -s dmd

mamushi@mamushipc:~$ curl -fsS https://dlang.org/install.sh | bash -s dmd
Downloading https://dlang.org/d-keyring.gpg

################################################################## 100.0%

Downloading https://dlang.org/install.sh

################################################################## 100.0%

The latest version of this script was installed as ~/dlang/install.sh.
It can be used it to install further D compilers.
Run ~/dlang/install.sh --help for usage information.

Downloading and unpacking http://downloads.dlang.org/releases/2.x/2.098.1/dmd.2.098.1.linux.tar.xz

################################################################## 100.0%

Using dub 1.27.0 shipped with dmd-2.098.1

Run source ~/dlang/dmd-2.098.1/activate in your shell to use dmd-2.098.1.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run deactivate later on to restore your environment.

Here is the output that was displayed when using the Curl command. In this case, copy and paste the following into the terminal. This seems to activate the D programming language. Once you do this, “dmd” will appear in front of your username in the terminal.

source ~/dlang/dmd-2.098.1/activate

Next, we will retrieve the files from Git, configure, and install them.

git clone https://github.com/abraunegg/onedrive.git
cd onedrive
./configure
make clean; make;
sudo make install

After this step is complete, deactivate the D programming language or restart the terminal. When you type “onedrive”, a URL will be displayed, prompting you to enter a response URL. At this point, access the URL shown in the browser.


After entering your OneDrive username and password, a blank page will be displayed. The URL of this blank page is the response URL, so copy and paste it into the terminal to complete the process.

Now, let’s try syncing with the Linux version of OneDrive. First, verify the configuration.

onedrive --display-config

To sync everything, enter the synchronization command, but if you add --dry-run at the end, you can perform a test run. The files that would be downloaded, uploaded, or deleted will be displayed, but since this is a test, no actual changes will occur.

onedrive --synchronize --verbose --dry-run

I didn’t need to sync everything, so I decided to sync only a specific folder under OneDrive.

onedrive --synchronize --single-directory '<dir_name>'

mamushi@mamushipc:~$ onedrive –synchronize –single-directory ‘linux’
Configuring Global Azure AD Endpoints
Initializing the Synchronization Engine …
WARNING: The requested path for –single-directory does not exist locally. Creating requested path within /home/mamushi/OneDrive
Syncing changes from selected OneDrive path …
Downloading file linux/test.ods … done.
Downloading file linux/kehai.xlsx … done.
Uploading differences of linux
Uploading new items of linux

It seems there is also an option for one-way synchronization.