diff --git a/lib/aur_manager.py b/lib/aur_manager.py index cdd7cce..90b5e4b 100644 --- a/lib/aur_manager.py +++ b/lib/aur_manager.py @@ -52,13 +52,21 @@ def detect_active_user() -> str | None: def _user_env(user: str) -> dict: pw = pwd.getpwnam(user) - return { + uid = pw.pw_uid + env = { "HOME": pw.pw_dir, "USER": user, "LOGNAME": user, - "XDG_RUNTIME_DIR": f"/run/user/{pw.pw_uid}", + "XDG_RUNTIME_DIR": f"/run/user/{uid}", "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + # Évite que sudo bloque sans TTY si le helper essaie d'appeler sudo pacman + "SUDO_ASKPASS": "/bin/false", } + # Socket DBUS de session (requis par paru/yay pour le build) + dbus_socket = Path(f"/run/user/{uid}/bus") + if dbus_socket.exists(): + env["DBUS_SESSION_BUS_ADDRESS"] = f"unix:path={dbus_socket}" + return env def check_aur_updates(user: str, helper: str) -> list[Package]: diff --git a/lib/daemon.py b/lib/daemon.py index de08f78..49d3b1a 100644 --- a/lib/daemon.py +++ b/lib/daemon.py @@ -265,6 +265,18 @@ class Daemon: except Exception: pass + async def _aur_pending_loop(self): + """Réessaie l'installation AUR toutes les 5 min si des paquets sont en attente. + + Nécessaire car le cycle AUR au démarrage échoue souvent (aucun utilisateur + connecté), et le prochain cycle horaire est trop tardif. + """ + while self._running: + await asyncio.sleep(300) + if self._state.get("pending_aur"): + logger.info("Paquets AUR en attente — nouvelle tentative d'installation") + await self.aur_cycle() + async def run(self): if SOCKET_PATH.exists(): SOCKET_PATH.unlink() @@ -290,6 +302,8 @@ class Daemon: await asyncio.sleep(FIRST_RUN_DELAY_SECONDS) await self.update_cycle() + asyncio.create_task(self._aur_pending_loop()) + while self._running: await asyncio.sleep(UPDATE_INTERVAL_SECONDS) await self.update_cycle()