Conectar KeePassXC con Ungoogled Chromium (Flatpak) en Linux
Si usas Ungoogled Chromium empaquetado en Flatpak y pretendes conectarlo con KeePassXC instalado de forma nativa en tu distribución (como openSUSE Tumbleweed, Debian, Arch u otra distro), habrás notado que al pulsar el botón "Conectar" en la extensión KeePassXC-Browser no ocurre nada o aparece el error "Intercambio de clave no fue correcto".
Esto sucede porque la aplicación dentro de Flatpak se ejecuta en un entorno aislado (sandbox) y no puede ver los archivos ni los sockets de comunicación IPC del sistema anfitrión.
A continuación, se detalla el paso a paso para crear un script wrapper mediante flatpak-spawn y configurar los permisos necesarios.
Paso 1: Conceder permisos D-Bus y acceso al socket en Flatpak
Para que el navegador pueda comunicarse con la interfaz D-Bus de Flatpak y acceder al socket de KeePassXC en el sistema, ejecuta los siguientes comandos en tu terminal:
# Permitir a Chromium ejecutar mandatos en el sistema anfitrión
flatpak override --user io.github.ungoogled_software.ungoogled_chromium --talk-name=org.freedesktop.Flatpak
# Dar acceso al directorio del socket IPC del usuario ($XDG_RUNTIME_DIR)
flatpak override --user io.github.ungoogled_software.ungoogled_chromium --filesystem=/run/user/$(id -u):ro
Nota sobre seguridad: el acceso a
/run/user/$(id -u)en solo lectura expone todos los sockets de la sesión (PipeWire, D-Bus, Wayland...). Si quieres ser más restrictivo, puedes limitarlo al socket de KeePassXC (/run/user/$(id -u)/keepassxc_browser.sock), aunque el nombre exacto puede variar según la versión.
Paso 2: Crear el script wrapper
Crea un script intermediario que invoque keepassxc-proxy fuera del sandbox transmitiendo la variable de entorno XDG_RUNTIME_DIR necesaria para ubicar el socket de la base de datos:
# Crear directorio de binarios dentro del perfil del Flatpak
mkdir -p ~/.var/app/io.github.ungoogled_software.ungoogled_chromium/data/bin
# Generar el script puente
cat > ~/.var/app/io.github.ungoogled_software.ungoogled_chromium/data/bin/keepassxc-proxy-wrapper.sh << 'EOF'
#!/bin/bash
USER_ID=$(id -u)
export XDG_RUNTIME_DIR="/run/user/$USER_ID"
exec flatpak-spawn --host --env=XDG_RUNTIME_DIR=/run/user/$USER_ID /usr/bin/keepassxc-proxy "$@"
EOF
# Dar permisos de ejecución al script
chmod +x ~/.var/app/io.github.ungoogled_software.ungoogled_chromium/data/bin/keepassxc-proxy-wrapper.sh
Paso 3: Configurar el archivo manifest (Native Messaging)
El navegador necesita conocer la existencia de la extensión mediante un archivo JSON en su ruta de configuración de Native Messaging:
# Crear directorio de NativeMessagingHosts en el perfil Flatpak de Chromium
mkdir -p ~/.var/app/io.github.ungoogled_software.ungoogled_chromium/config/chromium/NativeMessagingHosts/
# Crear el manifiesto apuntando al wrapper usando la ruta absoluta de tu usuario
cat > ~/.var/app/io.github.ungoogled_software.ungoogled_chromium/config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json << EOF
{
"name": "org.keepassxc.keepassxc_browser",
"description": "KeePassXC integration with native messaging support",
"path": "/home/$USER/.var/app/io.github.ungoogled_software.ungoogled_chromium/data/bin/keepassxc-proxy-wrapper.sh",
"type": "stdio",
"allowed_origins": [
"chrome-extension://oboonakemofpalcgghocfoadofidjkkk/"
]
}
EOF
Nota sobre el ID de la extensión: el ID
oboonakemofpalcgghocfoadofidjkkkes el estándar oficial de KeePassXC-Browser. Si instalaste la extensión de forma manual desde un archivo.crxdistinto, comprueba enchrome://extensionsque coincida exactamente.
Paso 4: Habilitar la integración en KeePassXC
- Abre la aplicación de escritorio KeePassXC y ve a Herramientas > Configuración > Integración con navegadores.
- Marca las casillas Habilitar la integración con navegadores y Chromium.
- Desbloquea tu base de datos en KeePassXC.
Paso 5: Emparejar el navegador
- Reinicia Ungoogled Chromium.
- Pulsa en el icono de la extensión KeePassXC-Browser y haz clic en Conectar.
- Acepta la ventana emergente que aparecerá en KeePassXC asignándole un nombre a la conexión (ej.
chromium-flatpak).
Si algo falla
- "Intercambio de clave no fue correcto": el wrapper no está ejecutándose o no recibe
XDG_RUNTIME_DIR. Comprueba que el script tiene permisos de ejecución (chmod +x) y que la ruta delpathen el JSON es correcta. - "Native messaging host not found": la ruta del
pathen el manifest no es correcta. Usa una ruta absoluta (/home/tu-usuario/...) y verifica que el archivo existe conls -l. - El botón "Conectar" no hace nada: falta el permiso D-Bus. Revisa los overrides activos con
flatpak override --user --show io.github.ungoogled_software.ungoogled_chromium. - Sigue sin funcionar tras reiniciar: comprueba que el proceso
keepassxc-proxyse está lanzando. Puedes ejecutar el wrapper a mano para ver el error:~/.var/app/io.github.ungoogled_software.ungoogled_chromium/data/bin/keepassxc-proxy-wrapper.sh