Transmission: Córrelo como servicio de usuario
Hoy me dió por tener corriendo mi daemon de BitTorrent preferido: Transmission, como un servicio de sistema. La neta, correrlo de manera global con el usuario transmission por defecto está chido si estás en un servidor dedicado, pero en mi compu personal (mi Fedora 44 de diario) es una lata. Yo quería que leyera mis configuraciones locales, que las descargas cayeran directo en mi carpeta personal (~/Downloads/torrents) y, sobre todo, que se levantara nomás cuando yo inicio mi sesión de usuario.
Así que me di a la tarea de crearle un servicio de usuario a nivel de systemd para quitarme de broncas. Aquí te cuento de volada cómo lo armé pa' que no le batalles.
Procedimiento
Para lograr que jale como un servicio local y lea tus configuraciones de usuario, el proceso está bien pleada. Nomás sigue estos pasos:
Crear el archivo de servicio de usuario: En lugar de modificar el archivo global en /usr/lib, copié la base del servicio y creé un archivo local en tu $HOME.
# ~/.config/systemd/user/transmission-daemon.service [Unit] Description=Transmission BitTorrent Daemon Wants=network-online.target After=network-online.target Documentation=man:transmission-daemon(1) [Service] Type=notify-reload ExecStart=/usr/bin/transmission-daemon -f --log-level=error -g %E/transmission # Hardening CapabilityBoundingSet= DevicePolicy=closed KeyringMode=private LockPersonality=true NoNewPrivileges=true MemoryDenyWriteExecute=true PrivateTmp=true PrivateDevices=true ProtectClock=true ProtectKernelLogs=true ProtectControlGroups=true ProtectKernelModules=true ProtectSystem=true ProtectHostname=true ProtectKernelTunables=true ProtectProc=invisible RestrictNamespaces=true RestrictSUIDSGID=true RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 RestrictRealtime=true SystemCallFilter=@system-service SystemCallArchitectures=native SystemCallErrorNumber=EPERM [Install] WantedBy=default.target
Note
Le quité la directiva User=transmission porque los servicios de usuario de systemd ya corren con tu propio UID de cajón. Además, agregué la opción -g %E/transmission (usando el especificador de systemd %E que apunta al directorio raíz de configuración del usuario, que por defecto es ~/.config o el valor de $XDG_CONFIG_HOME) para que lea los mismos archivos que usa la interfaz gráfica (GTK) de Transmission y no se me haga un desmadre con directorios separados.
Recargar systemd y arrancar el servicio: Una vez guardado el archivo, dile a systemd que recargue tu configuración de usuario y levanta el daemon de volada.
systemctl --user daemon-reload systemctl --user enable --now transmission-daemon.service
Evitar que se te sobreescriban los cambios: Si necesitas cambiar alguna configuración en el settings.json (por ejemplo, habilitar la interfaz web o el RPC), ten mucho cuidado. Si editas el archivo con el daemon corriendo, al momento de reiniciarlo o apagar la compu el daemon va a vaciar su estado en memoria y te va a mandar tus cambios a la chingada.
Para evitar esto, el flujo correcto es detener el servicio antes de meterle mano al archivo:
systemctl --user stop transmission-daemon.service # Edita tu ~/.config/transmission/settings.json ahora sí systemctl --user start transmission-daemon.service
¿Cómo quedó el cotorreo?
Una vez que el daemon arranca con la ruta de tu configuración local, la integración es transparente y bien chingona:
- Descargas automáticas: Todo cae directamente en tu directorio configurado (por ejemplo, ~/Downloads/torrents).
- Directorio de monitoreo: Si dejas caer un archivo .torrent en la carpeta de watch (en mi caso, la misma carpeta de descargas), el daemon lo detecta y lo empieza a bajar de volón.
- Control Remoto: Como habilité el RPC, puedo administrar mis descargas desde el navegador entrando a http://localhost:9091/ o usando clientes como transmission-remote-gtk sin que me consuma recursos tener la interfaz gráfica de Transmission abierta todo el día.
Warning
¡Cuidado con correr ambos al mismo tiempo! Si tienes el daemon activo en segundo plano e intentas abrir la interfaz gráfica de Transmission (GTK), van a chocar por el puerto de red (generalmente el 51413) y pueden corromper los archivos de estado. Te recomiendo usar la interfaz web o una herramienta remota para controlar el daemon. La ventaja es que te vas a ahorrar un buen de memoria RAM.
Conclusiones
La neta, configurar Transmission como servicio de usuario es un paro enorme si eres de los que deja descargas corriendo en segundo plano pero no quieres configurar un servidor dedicado para eso. Con unos cuantos minutos y systemd de tu lado, dejas tu Fedora 44 bien optimizada y lista para el jale pesado.
¿Cómo la ves? A poco no está bien suave tener el control total de tus torrents sin desmadres de permisos, no?!