Obsidian Vault directamente desde Dropbox (`rclone mount`): alias o servicio de systemd
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,
~/Obsidianes 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:
- El AppImage de Obsidian está compilado para FUSE 2, pero 26.04 incluye FUSE 3 — puede que ni siquiera arranque.
- 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.debno 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 mediantexdg-open. Si la ventana no se abre sola (puede pasar con Firefox de snap, que tiene acceso restringido a/tmpy 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.outen el directorio home.Obsidian:Obsidian— remoteObsidian, subcarpetaObsidiandentro 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 usaObsidian:.~/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_extractorconsumiendo 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.confsignifica 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 manorclone 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.