Échec du démarrage de Chrome CDP sur le port 18800
Pourquoi Chromium en snap casse le contrôle du navigateur OpenClaw sous Linux
Vous demandez à l’agent d’ouvrir une page et l’appel d’outil revient avec une seule ligne de JSON : Failed to start Chrome CDP on port 18800 for profile openclaw. Rien dans ce message n’indique quelle partie a échoué, et sur une machine Linux sans bureau le navigateur n’apparaît jamais. La cause habituelle n’est pas OpenClaw, c’est le navigateur qu’apt a installé pour vous.
Quatre messages d’erreur, quatre causes différentes
- Failed to start Chrome CDP on port 18800 for profile openclaw signifie que le profil géré n’arrive pas à démarrer sur son port de débogage. Sous Ubuntu, la raison habituelle est que le Chromium présent sur la machine est un paquet snap et non un vrai binaire de navigateur.
- The profile appears to be in use by another Chromium process désigne des fichiers de verrou Singleton restés dans le répertoire du profil géré. OpenClaw supprime ces verrous et réessaie une fois lorsque le verrou pointe vers un processus mort sur l’hôte courant, mais les verrous qui nomment un autre hôte sont conservés tant que vous n’avez pas confirmé que le profil n’est plus utilisé, y compris après un changement de nom de machine.
- Missing X server or $DISPLAY signifie qu’un navigateur visible a été explicitement demandé sur un hôte sans session graphique. Les profils gérés locaux basculent déjà en mode headless sous Linux quand DISPLAY et WAYLAND_DISPLAY sont tous deux absents : voir cette erreur veut donc dire qu’un réglage force l’affichage, OPENCLAW_BROWSER_HEADLESS=0, browser.headless à false, ou la même clé sur un profil précis.
- L’erreur Port N is in use for profile NAME but not by openclaw apparaît lorsqu’un service CDP externe est déjà configuré en local alors que attachOnly est resté à false. Le correctif consiste à ne plus demander à OpenClaw de lancer son propre navigateur, c’est-à-dire la voie attach-only décrite plus bas.
Le confinement AppArmor de snap perturbe la façon dont OpenClaw lance et surveille le processus du navigateur.
Pourquoi apt install chromium est la cause racine
Sous Ubuntu et la plupart des distributions Linux, apt install chromium ne vous donne pas un navigateur. Le paquet se résout en chromium-browser, apt signale qu’il a sélectionné chromium-browser à la place de chromium, et ce qui arrive sur le disque est un paquet snap. Cela compte, car lorsque OpenClaw lance un navigateur en local il prend le premier trouvé dans l’ordre Chrome, Brave, Edge, Chromium, Chrome Canary, et son chemin de recherche Linux couvre /usr/bin, /snap/bin, /opt/google, /opt/brave.com, /usr/lib/chromium et /usr/lib/chromium-browser, plus le Chromium géré par Playwright sous PLAYWRIGHT_BROWSERS_PATH ou ~/.cache/ms-playwright. Sur un serveur neuf où le snap est le seul binaire de la famille Chromium installé, la détection le trouve et chaque lancement géré échoue dessus. Aucune combinaison d’options ne corrige cela, et c’est pourquoi la réponse documentée est un autre binaire plutôt qu’un autre réglage.
Trois gestes qui règlent le problème
- Installez le vrai Google Chrome, c’est le correctif recommandé. Récupérez google-chrome-stable_current_amd64.deb sur dl.google.com, installez-le avec dpkg -i, puis lancez sudo apt --fix-broken install -y si des dépendances manquent. Réglez ensuite browser.executablePath sur /usr/bin/google-chrome-stable dans ~/.openclaw/openclaw.json, avec enabled, headless et noSandbox à true.
- Si le Chromium snap doit rester, passez en mode attach-only. Mettez browser.attachOnly à true pour qu’OpenClaw ne lance plus rien, et démarrez le navigateur vous-même avec chromium-browser --headless --no-sandbox --disable-gpu --remote-debugging-port=18800 --user-data-dir=$HOME/.openclaw/browser/openclaw/user-data about:blank.
- Faites survivre ce navigateur manuel à votre session avec un service systemd utilisateur. Une unité dans ~/.config/systemd/user/openclaw-browser.service qui exécute /snap/bin/chromium avec les mêmes options, plus Restart=on-failure et RestartSec=5, activée par systemctl --user enable --now openclaw-browser.service, garde le port CDP à l’écoute avant même qu’OpenClaw le demande.
La surface de configuration tient en six réglages, et les valeurs par défaut conviennent à un poste de travail, pas à un serveur. browser.enabled active le contrôle du navigateur et vaut déjà true. browser.executablePath est le chemin vers un binaire de la famille Chromium, Chrome, Brave, Edge ou Chromium, détecté automatiquement si vous l’omettez, avec une préférence pour le navigateur par défaut du système quand il est de cette famille. browser.headless fait tourner le navigateur sans interface et vaut false par défaut, donc un serveur doit le régler explicitement, OPENCLAW_BROWSER_HEADLESS servant de surcharge par processus, non définie par défaut. browser.noSandbox ajoute l’option --no-sandbox dont certaines installations Linux ont besoin, false par défaut, et browser.attachOnly empêche OpenClaw de lancer un navigateur, false par défaut. Le mode attach-only est aussi la réponse documentée sur un Raspberry Pi, un hôte VPS ancien ou un stockage lent, quand Chrome met plus de temps à exposer son point d’entrée HTTP CDP que le délai accordé au navigateur géré. OpenClaw sous Linux couvre l’installation Linux en général, et OpenClaw sur un VPS est la liste de contrôle pour un serveur sans personne devant.
Échec de démarrage CDP ou blocage de navigation
Une fois le navigateur configuré, vérifiez-le avant de chercher ailleurs. Ces appels vont au service de contrôle du navigateur d’OpenClaw, pas au port CDP de Chrome utilisé au lancement, et son port dérive de gateway.port : 18791 par défaut, soit le port de la passerelle plus deux, à ajuster si vous avez déplacé la passerelle. Interrogez la racine avec curl et vous obtenez running, pid et chosenBrowser ; envoyez un POST sur /start ; puis un GET sur /tabs. Déroulez ensuite l’échelle qui sépare les deux familles de panne : openclaw browser --browser-profile openclaw start, puis tabs, puis open https://example.com. Si start échoue avec not reachable after start, le plan de contrôle est en mauvaise santé et c’est la disponibilité CDP qu’il faut traiter. Si start réussit et que tabs échoue, cela reste un problème d’accessibilité, pas un problème de page. Si start et tabs passent tous les deux et que seul open ou navigate échoue, le navigateur va bien et vous regardez la politique de navigation ou la page elle-même, ce qui est un autre chemin de code : la configuration du navigateur applique par défaut une politique SSRF fermée même si vous n’avez jamais écrit browser.ssrfPolicy, et un start ou un tabs réussi n’autorise rien pour l’adresse suivante. Quand une exception est vraiment nécessaire, une entrée de nom d’hôte exact dans allowedHostnames vaut mieux que d’ouvrir le réseau privé, et dangerouslyAllowPrivateNetwork n’a sa place que dans un environnement examiné en connaissance de cause. l’outil navigateur d’OpenClaw présente l’outil que l’agent appelle vraiment, et l’API de contrôle du navigateur est la référence complète de l’API de contrôle et de la ligne de commande.
Sur Diali
Diali héberge OpenClaw, donc cette soirée ne vous concerne pas. Chaque client fait tourner son propre assistant plutôt qu’une part d’un assistant commun, et la configuration d’exécution est générée depuis ce que vous réglez dans le tableau de bord, puis réécrite à chaque version : il n’y a pas d’openclaw.json sur un serveur à réparer après une mise à jour, ni de choix entre snap et deb à faire. Tout ce que l’assistant conserve vit sur un volume persistant, avec des instantanés quotidiens et une restauration en un clic grâce à l’option Sauvegardes (incluse avec Max). OpenClaw hébergé sur Diali décrit l’offre hébergée et Tarifs Diali indique les tarifs.
- apt install chromium donne un paquet snap, pas un navigateur.
- Le vrai Chrome d’abord, attach-only et une unité systemd ensuite.
- start et tabs passent mais open échoue : c’est la politique, pas CDP.
Arrêtez de lire, construisez le vôtre
Configurez un agent, choisissez un canal, et faites-le travailler dans l’application que vous gardez déjà ouverte.
