Linux 03 Październik 2026

Obsidian Vault directamente desde Dropbox (`rclone mount`): alias o servicio de systemd

También en:

Guardo mi vault de Obsidian en Dropbox, pero sin el cliente de Dropbox. En lugar de sincronizar decenas de gigabytes al disco del portátil, monto la carpeta de la nube como un directorio y la abro en Obsidian. Lo hace rclone mount a través de FUSE — un solo comando, sin demonio de sincronización, sin copia local.

Este post describe dos variantes: un alias (más simple, manual) y un servicio systemd de usuario (se monta solo, se recupera tras caídas).

Cómo funciona

Dropbox (nube)
   └── carpeta /Obsidian  (en la raíz de la cuenta)
         │
         │  rclone: remote "Obsidian", tipo dropbox, token OAuth
         │  rclone mount  →  FUSE (fuse3 / fusermount3)
         ▼
   ~/Obsidian            ← punto de montaje (sistema de archivos fuse.rclone)
         │
         ▼
   Obsidian abre este directorio como vault

Algunas consecuencias de esta arquitectura que conviene conocer antes de implementarla:

  • No hay copia local. Los archivos se leen y escriben a través de la red en tiempo real. Al desmontar, ~/Obsidian es un directorio vacío y Obsidian no verá ninguna nota.
  • El cliente de Dropbox no participa. No necesita estar instalado.
  • Sin red no hay vault. Esta es la principal desventaja frente a la sincronización clásica: no se puede trabajar sin conexión.
  • Los archivos grandes y adjuntos serán más lentos. Cada apertura es un viaje de ida y vuelta a Dropbox.
  • El vault se puede compartir con otros dispositivos a través de la misma carpeta en Dropbox, pero entonces aparecen archivos de conflicto (más sobre esto en la sección de problemas).

La flag clave es --vfs-cache-mode writes. Con ella, rclone almacena las escrituras localmente (en ~/.cache/rclone/vfs/) y solo después las envía a la nube. Sin ella, Obsidian se cuelga — abre archivos para escritura y los modifica aleatoriamente, algo que el modo por defecto no soporta.

Qué instalar

rclone y fuse

sudo apt install -y rclone, fuse3

Fuse en 26.04 prácticamente siempre ya está presente. Los binarios necesarios (fusermount3, fusermount) vienen incluidos con fuse3.

Obsidian — usa .deb, no AppImage

# descarga el .deb actual de https://obsidian.md/download , luego (fíjate en el "./"):
sudo apt install ./obsidian_*_amd64.deb

apt install ./archivo.deb en lugar de dpkg -i — apt resolverá las dependencias automáticamente (incluyendo libxss1), en vez de dejar el paquete en estado half-configured y requerir un sudo apt -f install de rescate.

Trampa: AppImage de Obsidian en 26.04

No lo uses, por dos razones independientes:

  1. El AppImage de Obsidian está compilado para FUSE 2, pero 26.04 incluye FUSE 3 — puede que ni siquiera arranque.
  2. Desde Ubuntu 24.04 se aplica kernel.apparmor_restrict_unprivileged_userns=1, lo que rompe el sandbox de Electron en los AppImages (error: The SUID sandbox helper binary was found, but is not configured correctly).

Los parches que circulan por internet (--no-sandbox, sysctl …userns=0, chmod 4755 chrome-sandbox) debilitan la seguridad de todo el sistema. La versión .deb no tiene ninguno de los dos problemas — incluye su propio perfil AppArmor, que el sistema carga automáticamente durante la instalación, y no necesita trucos.

Lo que no necesitas: el cliente de Dropbox, nautilus-dropbox (una extensión de GNOME, inútil en Plasma), bindfs, sshfs, davfs2, ni ninguna capa crypt en rclone.


Configuración de rclone

Toda la configuración es un solo remote en ~/.config/rclone/rclone.conf:

[Obsidian]
type = dropbox
token = <JSON largo con token OAuth>

Elige el nombre del remote deliberadamente — distingue mayúsculas de minúsculas y será referenciado tanto por el alias como por el servicio. El mío es Obsidian (con mayúscula).

Desde cero

rclone config

Respuestas en el asistente:

Pregunta Respuesta
n/s/q> n (new remote)
name> Obsidian
Storage> dropbox
client_id> (Enter — vacío)
client_secret> (Enter — vacío)
Edit advanced config? n
Use web browser to automatically authenticate? y
confirmación y (keep this remote) → q (quit)

Dejar vacíos client_id/client_secret significa que usas el app ID compartido e integrado de rclone. Ventaja: no necesitas crear nada en la Dropbox App Console. Desventaja: el app ID compartido puede sufrir rate-limiting por parte de Dropbox con tráfico intenso — esto vuelve a aparecer en la sección sobre Baloo.

Realiza la autorización en la sesión gráfica de tu usuario, no mediante sudo — de lo contrario, el token terminará en /root/.config/rclone/rclone.conf.

Cómo se ve el callback de OAuth

Rclone levanta un servidor local en http://127.0.0.1:53682/ e intenta abrirlo en el navegador predeterminado mediante xdg-open. Si la ventana no se abre sola (puede pasar con Firefox de snap, que tiene acceso restringido a /tmp y localhost), no te alarmes — rclone imprimirá la URL en la consola. Cópiala y pégala en el navegador manualmente; la autorización funcionará igual. Si el callback es rechazado, haz la autorización en un navegador que no sea snap o en modo headless (rclone authorize "dropbox" en otra máquina).

Sin GUI en absoluto — el asistente sugerirá la ruta headless por sí mismo.

Migración desde una máquina antigua

Mi caso fue migrar de un portátil viejo a uno nuevo, así que pude elegir la opción rápida, que omite OAuth:

mkdir -p ~/.config/rclone
# copia rclone.conf desde la máquina antigua (scp / medio cifrado), luego:
chmod 600 ~/.config/rclone/rclone.conf

⚠️ El campo token es una credencial OAuth que otorga acceso completo a tu cuenta de Dropbox. Trátalo como una contraseña: no lo envíes por correo electrónico, no lo pegues en chats, tickets ni repositorios, no lo subas a git. Transfiere mediante scp por SSH o en un medio cifrado, y después de copiar establece chmod 600.

Si tras la migración rclone reporta token expired, invalid_grant o HTTP 401 — refresca la autorización sin perder el resto de la configuración:

rclone config reconnect Obsidian:

Verificar que el remote existe:

rclone listremotes        # esperado: Obsidian:
rclone about Obsidian:    # debería mostrar Total / Used / Free

Método 1: alias en ~/.bash_aliases

La versión que usé durante bastante tiempo. Tiene la ventaja de que el directorio no está montado cuando no lo necesitas.
Toda la "magia" es una sola línea:

alias mnt_obsidian="nohup rclone mount Obsidian:Obsidian ~/Obsidian/ --vfs-cache-mode writes &"

Añádela a ~/.bash_aliases y recarga el shell. Desglose:

  • nohup … & — ejecuta rclone en segundo plano y lo desacopla del terminal para que el montaje sobreviva al cierre de la ventana. Un efecto secundario es un archivo basura ~/nohup.out en el directorio home.
  • Obsidian:Obsidian — remote Obsidian, subcarpeta Obsidian dentro de él. La primera parte es el nombre del remote, la segunda es la ruta en la nube. Para montar toda la raíz de la cuenta, simplemente usa Obsidian:.
  • ~/Obsidian/ — punto de montaje.

Desmontaje:

fusermount3 -u ~/Obsidian

Ventajas: dos minutos de trabajo, sin archivos del sistema, montas solo cuando realmente quieres.

Desventajas: después de cada reinicio hay que escribir el comando manualmente. Si el proceso muere (suspensión, red perdida), nadie lo levantará.


Método 2: servicio systemd de usuario

En el portátil nuevo me pasé a esto y mi único arrepentimiento es no haberlo hecho antes, porque uso Obsidian frecuentemente. El montaje se levanta solo después del login y se reinicia automáticamente tras las caídas.

El archivo de unit listo está en un snippet en Bitbucket como rclone-obsidian.service. Guárdalo como ~/.config/systemd/user/rclone-obsidian.service — es un unit de usuario, no del sistema. Discuto todas las directivas importantes a continuación, así que no necesitas leerlo a ciegas.

Activación:

systemctl --user daemon-reload
systemctl --user enable --now rclone-obsidian.service
systemctl --user status rclone-obsidian.service

El último comando te dirá inmediatamente si funciona. En el estado correcto verás Active: active (running), y en la línea Status: el estado actual de la caché VFS directamente de rclone — incluyendo el número de archivos esperando ser enviados a Dropbox.

Vista de logs en tiempo real:

journalctl --user -u rclone-obsidian.service -f

Qué es importante aquí

Type=notify. Rclone soporta sd-notify, así que le dice a systemd "estoy listo" solo después de montar efectivamente. Esto asegura que los servicios dependientes del vault no arranquen demasiado pronto y vean un directorio vacío. También funciona con rclone 1.60.1 de apt.

%h en lugar de ~. Systemd no expande la tilde. %h es un especificador que sustituye el directorio home del usuario — hace que el mismo archivo de unit sea portable entre máquinas y cuentas.

Ruta absoluta al binario. Systemd no usa PATH como lo hace el shell. La elección del método de instalación de rclone afecta directamente a ExecStart:

Instalación de rclone ExecStart
apt (Variante A) /usr/bin/rclone
instalador de rclone.org (Variante B) /usr/local/bin/rclone

Verifica la tuya con command -v rclone y usa ese valor exacto. Lo mismo para fusermount3 — en 26.04 /bin es un enlace simbólico a /usr/bin, así que ambas rutas funcionan, pero verifícalo con command -v fusermount3.

Restart=on-failure + RestartSec=10. Esto es exactamente lo que falta en el enfoque con alias: cuando rclone muere por una conexión de red perdida, systemd lo levantará después de diez segundos.

ExecStop con fusermount3 -u. Sin esto, al detener el servicio quedaría una entrada de montaje muerta en el kernel, y ls ~/Obsidian te recibiría con Transport endpoint is not connected.

Montaje sin iniciar sesión gráfica

Por defecto, los servicios de usuario arrancan al iniciar sesión y mueren al cerrarla. Si el montaje debe vivir independientemente de la sesión (p. ej., para estar disponible por SSH tras un reinicio), activa linger:

sudo loginctl enable-linger $USER

Yo no lo activé — solo necesito el vault cuando estoy sentado frente al escritorio con sesión iniciada.

Alias y servicio — no los combines

Cuando el servicio está activado, el alias deja de ser necesario y empieza a causar problemas: intentar mnt_obsidian en un directorio ya montado fallará con un error sobre un punto de montaje no vacío.

Qué variante elegir

Alias Servicio systemd
Se monta tras reinicio manualmente automáticamente
Se recupera tras caída del proceso no sí (Restart=on-failure)
Logs nohup.out / ninguno journalctl --user -u …
Funciona fuera de sesión gráfica no sí (con enable-linger)
Esfuerzo de configuración una línea un archivo + enable
Control "monto cuando quiero" total necesitas stop/disable

El alias tiene sentido si abres el vault de vez en cuando y prefieres tener control consciente. Para trabajo diario, el servicio es claramente mejor.


KDE: desactiva la indexación del montaje en Baloo

Esta es la diferencia más importante entre GNOME y KDE en toda esta configuración y lo primero que hay que hacer después de montar.

Plasma ejecuta en segundo plano el indexador de archivos Baloo, que por defecto indexa todo $HOME. Como ~/Obsidian está dentro de $HOME, Baloo lo tratará como un directorio local normal y empezará a rastrear todo el vault a través de la red — leyendo cada archivo para indexar su contenido. Los efectos:

  • transferencia constante e innecesaria desde Dropbox (con un vault de decenas de GB, es una cantidad enorme de datos),
  • caché VFS inflándose en ~/.cache/rclone/,
  • montaje lento y procesos baloo_file_extractor consumiendo CPU,
  • en casos extremos, rate-limiting del lado de Dropbox (más fácil de provocar porque el app ID de rclone es compartido).

En GNOME este problema no se presentaba de esta forma, así que es fácil encontrárselo precisamente al migrar.

# Plasma 6 → balooctl6 (en Plasma 5 el binario se llama balooctl)
balooctl6 config add excludeFolders ~/Obsidian
balooctl6 disable && balooctl6 enable      # recargar configuración

# verificación:
balooctl6 config list excludeFolders
balooctl6 status

Resultado correcto:

excludeFolders:
    /home/sarniak/Obsidian/

Si no existe ni balooctl6 ni balooctl — Baloo no está instalado y esto no te afecta. Alternativamente por GUI: Preferencias del sistema → Búsqueda → Búsqueda de archivos → añade ~/Obsidian y configúralo como "No indexado". También puedes desactivar la indexación de archivos por completo (balooctl6 disable) si no usas la búsqueda en KRunner y Dolphin.


Conectar el vault en Obsidian

Inicia Obsidian después de montar y en la pantalla de bienvenida elige "Open folder as vault" → ~/Obsidian.

El orden importa doblemente: monta antes de iniciar Obsidian, y la exclusión de Baloo hazla antes de la primera sesión prolongada con el vault — de lo contrario, el indexador empezará a descargar todo en segundo plano antes de que notes el problema.

Los plugins, temas y ajustes no necesitan transferirse. Están en ~/Obsidian/.obsidian/, es decir, dentro del vault, es decir, en Dropbox — llegarán solos al montar el remote.


Verificación

He reunido todas las comprobaciones en el script obsidian-mount-check.sh en el mismo snippet de Bitbucket. Ejecútalo después de montar:

./obsidian-mount-check.sh

El script no modifica nada, no necesita sudo y termina con código cero solo cuando pasan las diez comprobaciones: presencia de rclone, existencia del remote, respuesta de Dropbox (lo que también detecta tokens expirados), directorio de montaje, entrada de montaje en el kernel, proceso rclone vivo, contenido no vacío del vault, estado del unit de systemd, y dos comprobaciones específicas de KDE y Debian — exclusión del vault de Baloo y si Obsidian proviene de .deb en lugar de AppImage. En otros sistemas, las dos últimas reportan "no aplica" en vez de dar error.

Si prefieres comprobarlo manualmente, lo esencial son cuatro cosas: tipo fuse.rclone para el directorio del vault, tamaño razonable en df, un proceso rclone mount vivo y notas visibles con ls. Si las cuatro coinciden — funciona.


Problemas comunes

Rendimiento lento, tirones en archivos grandes

Parcialmente inherente a la arquitectura — los archivos viajan por la red, y --vfs-cache-mode writes solo cachea escrituras. En KDE, primero verifica Baloo y Dolphin (más abajo), porque suelen ser los culpables, no las flags de rclone en sí. Si no es eso, vale la pena considerar:

  • --vfs-cache-mode full — cachea también lecturas; reabrir archivos es mucho más rápido, pero consume espacio en ~/.cache/rclone/,
  • --dir-cache-time 24h — consultas menos frecuentes del listado de directorios,
  • --poll-interval 15s — qué tan rápido el montaje detecta cambios hechos desde otro dispositivo.

KDE: transferencia constante y baloo_file_extractor en CPU

Baloo está indexando el montaje — vuelve a la sección sobre Baloo. Diagnóstico:

balooctl6 status
ps -ef | grep [b]aloo
balooctl6 config list excludeFolders

Limitaciones (compromisos deliberados)

  • Sin red no hay vault. Esta es la diferencia fundamental respecto al cliente de Dropbox u Obsidian Sync, que mantienen una copia local. Si necesitas tus notas en el tren, esta configuración no es para ti.
  • Los datos en la nube están sin cifrar. Puedes cambiarlo añadiendo un remote de tipo crypt, pero entonces pierdes la posibilidad de leer notas a través de la interfaz web de Dropbox y desde dispositivos sin rclone.
  • El token OAuth en rclone.conf significa acceso completo a la cuenta. Permisos de archivo 600 son lo mínimo; el token puede invalidarse cambiando la contraseña de Dropbox o revocando el acceso de la aplicación, así que ten a mano rclone config reconnect.
  • El app ID compartido de rclone puede sufrir rate-limiting. Con tráfico intenso, vale la pena crear tu propia aplicación en la Dropbox App Console e introducir el client_id/client_secret.
  • Rclone de apt es antiguo. En Ubuntu 26.04 sigue siendo 1.60.1. El upstream más reciente tiene muchas correcciones específicamente en mount/VFS.

Resumen

Todo el mecanismo es un solo comando rclone mount y un remote en la configuración de rclone. Un alias en ~/.bash_aliases basta para empezar y es esencialmente gratuito, pero después de cada reinicio te recuerda su existencia. Un servicio systemd de usuario es un archivo más y un enable — a cambio, el montaje aparece solo, se reinicia tras caídas y registra en el journal, donde puedes comprobar qué salió mal.

Si lo haces en KDE, haz dos cosas de inmediato, porque de lo contrario perderás medio día con ellas: excluye el vault de la indexación de Baloo e instala Obsidian desde .deb, no desde AppImage.