Windows tiene Previous Versions. macOS tiene Time Machine en el Finder. En Linux, durante años, mirar el pasado de un fichero en el gestor de archivos significaba salir a una herramienta técnica (Btrfs Assistant, snapper, montar a mano). KIO Snapshot viene a cubrir precisamente ese hueco en KDE Plasma.
El 20 de agosto de 2026 salió KIO Snapshot 1.0, de Bharadwaj Raju y el proyecto KDE: un worker KIO (snapshot://) y un plugin de menú contextual para Dolphin (y cualquier app KDE Frameworks). No inventa snapshots. Solo los hace usables donde ya trabajas: clic derecho → historial. El anuncio oficial del autor es Btrfs Snapshot Integration in KDE; el código vive en invent.kde.org/system/kio-snapshot.
Lo probé en un portátil con CachyOS, Plasma 6.7 y Btrfs (@ + @home), usando Snapper y snap-pac. En esta guía veremos la instalación real, los permisos necesarios para acceder sin root y un detalle fácil de pasar por alto: si solo tienes la configuración root de Snapper, tus ficheros de $HOME no están en esos snapshots. Este post no sustituye el del autor: es la experiencia de dejarlo usable en un layout típico Arch/CachyOS.
Qué es (y qué no es) KIO Snapshot
KIO Snapshot expone dos vistas:
- Snapshots de un subvolumen — el árbol completo tal como quedó en cada captura.
- Versiones de un fichero concreto — carpeta virtual con las copias distintas de ese path a lo largo de los snapshots del subvolumen que lo contiene.
Lo importante: no crea snapshots. Orquesta la lectura vía libbtrfsutil + Solid, sin daemon root (el diseño final evita el servicio D-Bus privilegiado del primer intento). Quien tome las capturas sigue siendo tú, Snapper, snap-pac, Limine, etc.
El matiz de Snapper que importa
Si usas Snapper, el README de KIO Snapshot es claro: en cada config relevante:
ALLOW_USERS=tu usuarioSYNC_ACL=yes
Sin eso, .snapshots es de root y Dolphin no puede listar nada útil. Con ACL sincronizadas, el usuario lee el historial sin sudo. En esta instalación, tras ALLOW_USERS, también se pueden crear snapshots de home sin sudo (snapper -c home create …). Configurar (set-config, create-config) sigue pidiendo privilegios; consultar y crear capturas, no.
Eso no basta si tu layout es el típico de Arch/CachyOS:
Btrfs
│
├── @ → /
│ └── Snapper config: root
│ └── snapshots del sistema
│
└── @home → /home
└── Snapper config: home
└── snapshots de tus ficheros
| Montaje | Subvolumen | Qué cubre Snapper root |
|---|---|---|
/ |
@ |
Sistema (/etc, /usr…) |
/home |
@home |
Nada — en el snapshot de root, /home es un directorio vacío (punto de montaje) |
Conclusión operativa: para Previous Versions de documentos, configs y proyectos en el home hace falta config Snapper home sobre /home, no solo root.
Qué había ya en esta máquina
Antes de tocar KIO Snapshot:
- Btrfs en
/y/home(compress=zstd:1, SSD). snapper+cachyos-snapper-support+snap-pac+limine-snapper-sync+ Btrfs Assistant.- Config única:
root→/, con cientos de pre/post de pacman. TIMELINE_CREATE=noen root (las capturas vienen de hooks de pacman, no de timeline horario).- Plasma 6.7.4.
Faltaba el eslabón de “verlo en Dolphin” y el acceso ACL + cobertura de @home.
Instalación verificada (CachyOS / Arch)
En Arch/CachyOS el paquete ya está en extra (mismo día del anuncio):
sudo pacman -S kio-snapshot
Para empaquetarlo también en el árbol derivado de CachyOS hay una PR abierta: Add kio-snapshot (#408) en CachyOS/cachyos-aur-derived. Si te interesa que entre por ese canal, el seguimiento es ahí.
Queda:
- Worker:
/usr/lib/qt6/plugins/kf6/kio/kio_snapshot.so - Menú contextual:
/usr/lib/qt6/plugins/kf6/kfileitemaction/snapshotfileitemaction.so
Reinicia Dolphin (o cierra sesión de Plasma) si el menú no aparece al primer intento.
Permisos Snapper en root y home
# Acceso sin root a los snapshots del sistema
sudo snapper -c root set-config "ALLOW_USERS=$USER"
sudo snapper -c root set-config "SYNC_ACL=yes"
No ejecutes el siguiente comando a ciegas si ya tienes una configuración Snapper para /home o una estructura de snapshots creada por tu distribución. Comprueba primero:
snapper list-configs
Si home no aparece:
sudo snapper -c home create-config /home
En ambos casos (config nueva o ya existente):
sudo snapper -c home set-config "ALLOW_USERS=$USER"
sudo snapper -c home set-config "SYNC_ACL=yes"
# Asegurar que ambas configs están activas
# /etc/conf.d/snapper → SNAPPER_CONFIGS="root home"
Comprueba que puedes listar sin sudo:
ls /.snapshots | head
ls /home/.snapshots | head
snapper -c root list | tail
snapper -c home list
Si sigue “Permission denied”, no inventes ACL a mano a ciegas. Primero inspecciona:
getfacl /.snapshots
getfacl /home/.snapshots
Tras SYNC_ACL=yes y un snapshot nuevo, en esta máquina quedó así (usuario dguillermo):
# file: /home/.snapshots
# owner: root
# group: root
user::rwx
user:dguillermo:r-x
group::r-x
mask::r-x
other::---
Si no aparece tu user:…:r-x, crea un snapshot nuevo (sin sudo, si ya tienes ALLOW_USERS) para que Snapper sincronice ACL en limpio:
snapper -c home create -d "kio-snapshot bootstrap" -c number
getfacl /home/.snapshots
En esta instalación quedó activo snapper-timeline.timer con TIMELINE_CREATE=yes en home (límites por defecto: pocas horarias/diarias). En root se dejó el timeline apagado: ahí ya sobran los pre/post de snap-pac. Ajusta límites si el disco va justo; aquí el volumen iba al 73 % — por debajo del umbral de alarma del lab, pero no es espacio infinito.
Prueba real: modificar, snapshot y recuperar
Esto es el momento “funciona” — no te quedes solo en el menú vacío.
mkdir -p ~/kio-snapshot-test
echo "Primera versión" > ~/kio-snapshot-test/prueba.txt
snapper -c home create \
-d "Antes de modificar prueba.txt" \
-c number
echo "Segunda versión" > ~/kio-snapshot-test/prueba.txt
Comprueba el fichero actual:
cat ~/kio-snapshot-test/prueba.txt
# Segunda versión
En teoría, en Dolphin: clic derecho → View snapshots…. En la práctica, con @ + @home en el mismo UUID Btrfs, Solid hace que el menú no aparezca y que snapshot:/file/… liste solo Current (ver troubleshooting). Mientras tanto, las versiones reales están en Snapper:
ls /home/.snapshots/*/snapshot/"$USER"/kio-snapshot-test/prueba.txt
cat /home/.snapshots/3/snapshot/"$USER"/kio-snapshot-test/prueba.txt
# Primera versión
Eso deja claro actual vs snapshot. No es un diálogo “Restaurar” al estilo Windows: cuando el menú/KIO funcionen bien será un directorio virtual; hoy, en este layout, el camino fiable es .snapshots.
Opcional, borrar y recuperar sin la UI (mismo filesystem):
rm ~/kio-snapshot-test/prueba.txt
# Localiza la copia en un snapshot legible
grep -l "Primera versión" \
/home/.snapshots/*/snapshot/"$USER"/kio-snapshot-test/prueba.txt
# Copia de vuelta (ajusta el path al que te devolvió grep)
cp -a /home/.snapshots/<N>/snapshot/"$USER"/kio-snapshot-test/prueba.txt \
~/kio-snapshot-test/prueba.txt
cat ~/kio-snapshot-test/prueba.txt # → Primera versión
Cómo verificar
Estas son las comprobaciones que hice después de configurarlo:
pacman -Qi kio-snapshot
test -f /usr/lib/qt6/plugins/kf6/kio/kio_snapshot.so
test -f /usr/lib/qt6/plugins/kf6/kfileitemaction/snapshotfileitemaction.so
snapper list-configs
snapper -c root get-config | grep -E 'ALLOW_USERS|SYNC_ACL'
snapper -c home get-config | grep -E 'ALLOW_USERS|SYNC_ACL'
ls /home/.snapshots | head
snapper -c home list
getfacl /home/.snapshots
Esperado: paquete 1.0.0, ambos plugins presentes, configs root + home, ALLOW_USERS con tu usuario, SYNC_ACL=yes, listado de /home/.snapshots sin sudo, y user:<tu-usuario>:r-x en el getfacl.
Snapshot ≠ backup. KIO Snapshot te permite recuperar estados anteriores almacenados en el mismo filesystem. Si pierdes el disco, pierdes también sus snapshots. Es undo local barato sobre CoW, no un plan de disaster recovery.
Troubleshooting
Dolphin no muestra «View snapshots…» / «Browse snapshots…»
El plugin sí está instalado; el menú solo aparece si hasSnapshots() encuentra capturas. En un layout típico @ + @home (mismo UUID Btrfs) hay un fallo concreto:
Solid (storageAccessFromPath) devuelve filePath=/ también para rutas bajo /home, porque / y /home son el mismo dispositivo. El plugin (y el worker listDirForFile) iteran subvolúmenes desde ese filePath. Con fsRoot=/ no ven los snapshots de Snapper en /home/.snapshots; con fsRoot=/home sí.
Comprobado en esta máquina:
Solid → filePath=/ → hasSnapshots(/home/…) = FALSE → sin menú
iterar desde /home → hasSnapshots = TRUE
snapshot:/file/… → solo entra “Current” (mismo fallo)
Workaround fiable mientras no lo corrijan (KIO Snapshot debería resolver el mount más específico vía mountinfo, no el filePath de Solid):
# Abrir la copia histórica directamente
dolphin /home/.snapshots/<N>/snapshot/"$USER"/kio-snapshot-test/
# o leerla
cat /home/.snapshots/<N>/snapshot/"$USER"/ruta/relativa/al/fichero
dolphin "snapshot:/file$HOME/…" abre la UI de KIO, pero en este layout suele listar solo Current.
Comprobaciones básicas (por si el paquete no cargó):
test -f /usr/lib/qt6/plugins/kf6/kio/kio_snapshot.so && echo OK_worker
test -f /usr/lib/qt6/plugins/kf6/kfileitemaction/snapshotfileitemaction.so && echo OK_menu
kbuildsycoca6 --noincremental
# cierra todas las ventanas de Dolphin y vuelve a abrir
El texto del menú (cuando Solid acierte el mount) es View snapshots… (fichero) o Browse snapshots… (carpeta), no “Previous Versions”.
Permission denied en .snapshots
snapper -c home get-config | grep -E 'ALLOW_USERS|SYNC_ACL'
getfacl /home/.snapshots
Si falta tu usuario en ALLOW_USERS o SYNC_ACL no es yes, corrígelo y crea un snapshot nuevo. No empieces por setfacl manual salvo que sepas exactamente qué estás haciendo.
Veo snapshots de / pero no versiones de mis documentos
findmnt -no SOURCE,FSROOT /
findmnt -no SOURCE,FSROOT /home
snapper list-configs
Si salen @ y @home separados y solo existe config root, ahí tienes el problema: los snapshots del sistema no contienen tu home.
Si ya tienes config home, ACL OK y el menú/KIO no listan versiones históricas (solo Current o nada), es el caso Solid/filePath=/ de arriba. Las copias siguen en /home/.snapshots/.
Límites que conviene decir en voz alta
- Solo Btrfs (y layouts donde el usuario pueda enumerar subvolúmenes/snapshots). No es un Time Machine genérico para ext4.
- No genera capturas: sin Snapper (u otro orquestador), el menú estará vacío.
@≠@home: olvidar la confighomees el fallo más probable en distros rolling con subvolúmenes separados.- Espacio: los snapshots son baratos hasta que dejas de limpiar;
snapper-cleanup.timery losNUMBER_*/TIMELINE_LIMIT_*no son decoración. - KDE Linux planea llevar Snapper + KIO Snapshot de fábrica; en CachyOS/Arch lo montas tú en cinco minutos — y el detalle del home es tu responsabilidad.
Cierre
Previous Versions en el escritorio Linux no era un problema de kernel: Btrfs ya hacía el CoW. Faltaba el último metro hasta Dolphin. KIO Snapshot es ese metro.
En la práctica: pacman -S kio-snapshot, permisos de Snapper, una config home si /home vive en su propio subvolumen, y las versiones anteriores dejan de ser algo que tienes que buscar desde la terminal.
Referencias
- Btrfs Snapshot Integration in KDE — anuncio y diseño, por Bharadwaj Raju
- kio-snapshot en invent.kde.org — código fuente
- CachyOS PR #408: Add kio-snapshot — solicitud para el repo derivado de CachyOS
- KDE Linux Alpha — en este blog: Snapper + KIO Snapshot de fábrica en la distro de referencia de KDE