Documentsbluefin
GNOME Remote Storage Integration
GNOME Remote Storage Integration
Type
Topic
Status
Published
Created
Jul 9, 2026
Updated
Jul 9, 2026

GNOME Remote Storage Integration#

GNOME Online Accounts (GOA) and gvfs together form the two-layer stack that powers internet-based storage in GNOME Files (Nautilus) on Bluefin:

  • GOA (goa-daemon) is the credential and account broker. It runs as a D-Bus session service (org.gnome.OnlineAccounts) and exposes each account as an object under /org/gnome/OnlineAccount/Accounts/. It handles OAuth2 token refresh, password retrieval from GNOME Keyring, and presents the account setup UI in GNOME Settings → Online Accounts.
  • gvfs is the userspace virtual filesystem built on GIO/GLib. Its gvfs-goa-volume-monitor daemon watches the D-Bus for accounts that implement org.gnome.OnlineAccounts.Files and surfaces them as GVolume objects in the file chooser and GNOME Files sidebar. The actual file I/O is delegated to a backend-specific daemon (gvfsd-*).
GNOME Settings → GOA (goa-daemon) → D-Bus: org.gnome.OnlineAccounts.Files
                        gvfs-goa-volume-monitor → GVolume in Nautilus
                         gvfsd-google / gvfsd-dav / … ← actual I/O

Bluefin note: No custom configuration for GOA or gvfs was found in the Bluefin build layers. Both components ship as standard GNOME session services and work out of the box on the GNOME desktop.


Supported Providers (Files integration)#

Only providers that implement the org.gnome.OnlineAccounts.Files interface are mounted as virtual drives in GNOME Files.

ProviderFilesMailCalendarContactsPhotos
Google
Nextcloud
Microsoft
Microsoft Exchange
IMAP/SMTP
Kerberos

WebDAV (manual mount): gvfs ships a dav backend (requires libsoup, libxml) that you can connect to directly in GNOME Files via Other Locations → Connect to Server using a dav:// or davs:// URL — no GOA account required.


Architecture: How a Mount Happens#

  1. User adds an account in Settings → Online Accounts. goa-daemon stores credentials in GNOME Keyring.
  2. gvfs-goa-volume-monitor detects the new account object on D-Bus and advertises a GVolume in GIO.
  3. When the user opens GNOME Files or a file dialog, the volume appears in the sidebar. On first access gvfs auto-mounts it.
  4. gvfs spawns the matching backend:
    • Google Drivegvfsd-google (uses libgdata + libgoa)
    • Nextcloud / WebDAVgvfsd-dav (uses libsoup + libxml)
  5. The backend performs service-specific protocol I/O. Non-GIO apps can access mounts via the FUSE bridge at ~/.gvfs/ or /run/user/<uid>/gvfs/.

Key D-Bus Interfaces & Diagnostics#

Interface / ToolPurpose
org.gnome.OnlineAccounts (session bus)Account objects, credential state
org.gnome.OnlineAccounts.FilesSignals to gvfs that an account has storage
org.gnome.OnlineAccounts.OAuth2BasedOAuth2 token management
org.gnome.OnlineAccounts.PasswordBasedPassword-based credential management
org.gtk.vfs.GoaVolumeMonitorgvfs-goa-volume-monitor service name
gvfs-mount -lList all gvfs drives, volumes, and mounts
journalctl + G_MESSAGES_DEBUG=allRuntime debug logs for goa-daemon / gvfsd

Credential issues: Tokens and passwords live in GNOME Keyring. Use seahorse and search for goa to inspect stored credentials. Call EnsureCredentials on the D-Bus account object to validate token state.

gvfsd not running? Confirm gvfs-goa-volume-monitor is present and running with user privileges. Restart via systemctl --user restart gvfs-goa-volume-monitor.


Primary References#