El cuaderno de notas de elSultan

Conectar KeePassXC con Ungoogled Chromium (Flatpak) en Linux

Publicado el: por elSultan

3 min de lectura

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 oboonakemofpalcgghocfoadofidjkkk es el estándar oficial de KeePassXC-Browser. Si instalaste la extensión de forma manual desde un archivo .crx distinto, comprueba en chrome://extensions que coincida exactamente.

Paso 4: Habilitar la integración en KeePassXC

  1. Abre la aplicación de escritorio KeePassXC y ve a Herramientas > Configuración > Integración con navegadores.
  2. Marca las casillas Habilitar la integración con navegadores y Chromium.
  3. Desbloquea tu base de datos en KeePassXC.

Paso 5: Emparejar el navegador

  1. Reinicia Ungoogled Chromium.
  2. Pulsa en el icono de la extensión KeePassXC-Browser y haz clic en Conectar.
  3. 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 del path en el JSON es correcta.
  • "Native messaging host not found": la ruta del path en el manifest no es correcta. Usa una ruta absoluta (/home/tu-usuario/...) y verifica que el archivo existe con ls -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-proxy se 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