Traditional FUSE drivers like davfs2 suffer from significant performance bottlenecks: synchronous single-threaded I/O, heavy file explorer UI freezes, and latency when traversing directory trees.

Using Rclone configured with full VFS caching and managed as a Systemd user service provides native-like speed, asynchronous directory caching, and seamless background mounting.


1. Install Rclone

On RPM-based distributions (Fedora, RHEL):

sudo dnf install rclone -y

On Debian/Ubuntu:

sudo apt update && sudo apt install rclone -y

2. Configure the WebDAV Remote

Generate the obscured password string required by Rclone:

rclone obscure "YOUR_PASSWORD_HERE"

Create or edit ~/.config/rclone/rclone.conf:

[remote-webdav]
type = webdav
url = https://cloud.example.com/remote.php/dav/files/username/
vendor = nextcloud
user = username
pass = YOUR_OBSCURED_PASSWORD_STRING

(Set vendor = other if mounting a standard WebDAV instance instead of Nextcloud/ownCloud.)


3. Prepare the Mount Directory

Create the target mount path in your home directory:

mkdir -p ~/Nextcloud

4. Create the Systemd User Service

Running the mount as a user-level service ensures no root privileges are required and avoids boot race conditions with network availability.

Create the user service directory:

mkdir -p ~/.config/systemd/user/

Create ~/.config/systemd/user/rclone-webdav.service:

[Unit]
Description=Rclone WebDAV Mount Service
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/rclone mount remote-webdav: %h/Nextcloud \
    --vfs-cache-mode full \
    --vfs-cache-max-age 24h \
    --vfs-read-chunk-size 32M \
    --vfs-read-chunk-size-limit 2G \
    --buffer-size 64M \
    --dir-cache-time 72h \
    --attr-timeout 10m \
    --transfers 8 \
    --checkers 16 \
    --vfs-cache-max-size 10G \
    --allow-non-empty
ExecStop=/usr/bin/fusermount -u %h/Nextcloud
Restart=on-failure
RestartSec=10

[Install]
WantedBy=default.target

Key Flags Breakdown:

  • --vfs-cache-mode full: Enables full POSIX read/write compatibility for local applications.
  • --dir-cache-time 72h: Keeps the directory structure cached in RAM to make file explorer listings instant.
  • --vfs-read-chunk-size 32M and --buffer-size 64M: Optimizes file streaming without full downloads upfront.

5. FUSE user_allow_other Configuration

Allow processes from other users or sandboxes (such as Flatpak) to access FUSE mount points created by your user:

# Add the directive to the global FUSE configuration file
sudo bash -c 'echo "user_allow_other" >> /etc/fuse.conf'

# Ensure non-root users can read the config file
sudo chmod 644 /etc/fuse.conf

In the Rclone mount command (or in your .service file), make sure to include the flag:

--allow-other

6. Filesystem Access Permissions for Flatpak (Brave)

The Flatpak sandbox cannot resolve paths outside its default user space, which can result in 0 byte uploads when files are stored on /mnt or other external FUSE filesystems.

Grant access to the host filesystem and the specific mount point:

# Allow access to the host filesystem and the mount point
flatpak override --user --filesystem=host com.brave.Browser
flatpak override --user --filesystem=/mnt/nxtc com.brave.Browser

# Restart the browser to apply the sandbox changes
flatpak kill com.brave.Browser

To revoke the permissions at any time:

flatpak override --user --reset com.brave.Browser

7. Enable and Start the Service

Reload the user systemd daemon, enable the service on login, and start it immediately:

systemctl --user daemon-reload
systemctl --user enable --now rclone-webdav.service

Verify service status and file access:

systemctl --user status rclone-webdav.service
ls -la ~/Nextcloud