Jellyfin 10.11: Bucle de autenticación en Fire TV y Android TV

Vamos a ver cómo solucionar un bucle de autenticación en Jellyfin 10.11.x cuando utilizamos clientes Android TV o Fire TV. Este problema se manifiesta cuando un usuario introduce correctamente sus credenciales, el servidor valida la autenticación, pero el cliente es inmediatamente desconectado y vuelve a pedir login.

Para realizar esta reparación necesitaremos:

  • Acceso por ssh al servidor donde corre Jellyfin (en mi caso, un OpenMediaVault con Docker Compose).
  • El contenedor de Jellyfin funcionando (imagen linuxserver/jellyfin).
  • Conocer la ruta del volumen de configuración del contenedor.
  • sqlite3 instalado en el host (o capacidad de instalarlo).

Síntomas

Los logs del contenedor muestran un patrón repetitivo:

Authentication request for ninos has succeeded.
Current/Max sessions for user ninos: 1/0
Logging out access token ...
Creating new access token for user ...

La clave está en la línea Current/Max sessions for user ninos: 1/0. El valor 1/0 indica 1 sesión activa contra un límite máximo de 0 sesiones. Jellyfin crea el token, detecta que excede el límite, y lo revoca inmediatamente.

Causa raíz

En Jellyfin 10.11.x existe un bug donde el campo “Número máximo de sesiones simultáneas por usuario” se establece o interpreta como 0 en lugar de desactivarse. La interfaz web indica que 0 desactiva la característica, pero el código la aplica como un límite estricto de cero sesiones.

Además, en versiones antiguas del cliente Android TV / Fire TV (como la 0.16.11), existe un bug de deserialización que provoca que el cliente reintente la autenticación en bucle cuando el servidor responde con ciertos campos inesperados.

Pasos para solucionarlo

1. Instalar sqlite3 en el host

El contenedor de LinuxServer.io no incluye sqlite3 ni python3. Debemos editar la base de datos directamente desde el host:

sudo apt update && sudo apt install -y sqlite3

2. Verificar la ruta de la base de datos

Localizamos el archivo jellyfin.db en el volumen de configuración:

find / -name "jellyfin.db" 2>/dev/null

En mi caso, la ruta es:

/config/docker-data/jellyfin/data/data/jellyfin.db

3. Corregir el límite de sesiones para todos los usuarios

Actualizamos el campo MaxActiveSessions a -1 (ilimitado) para todos los usuarios:

sudo sqlite3 /config/docker-data/jellyfin/data/data/jellyfin.db \
  "UPDATE Users SET MaxActiveSessions = -1;"

Verificamos que se aplicó correctamente:

sudo sqlite3 /config/docker-data/jellyfin/data/data/jellyfin.db \
  "SELECT Username, MaxActiveSessions FROM Users;"

Debería mostrar:

user1|-1
user2|-1
user3|-1

4. Limpiar dispositivos obsoletos

Eliminamos las entradas de dispositivos previos que puedan estar en estado inconsistente:

sudo sqlite3 /config/docker-data/jellyfin/data/data/jellyfin.db \
  "DELETE FROM Devices WHERE UserId IN \
   (SELECT Id FROM Users WHERE Username IN ('user1','user2','user3'));"

5. Reiniciar el contenedor

docker restart <container_id>

6. Actualizar el cliente Fire TV / Android TV

El paso más importante: el cliente debe estar en una versión compatible. La versión 0.16.11 tiene un bug de deserialización conocido.

  • Ve al Amazon Appstore en tu Fire TV y busca actualizaciones de Jellyfin.
  • Si no hay actualización disponible, descarga el APK más reciente desde GitHub releases.
  • Instálalo vía adb:
adb connect <ip-fire-tv>
adb install jellyfin-androidtv-v0.17.x-release.apk

7. Limpiar datos de la aplicación en el dispositivo

Desde el Fire TV:

  • Configuración > Aplicaciones > Aplicaciones instaladas > Jellyfin > Borrar datos

Esto elimina cualquier token o configuración cacheada que pueda forzar el reintento con credenciales obsoletas.

Verificación

Tras reiniciar, los logs deberían mostrar:

Authentication request for ninos has succeeded.
Current/Max sessions for user ninos: 0/-1
Creating new access token for user ...

Sin la línea de Logging out access token inmediatamente después.

Fuentes