Parece que se duplicó el mensaje (es idéntico al anterior) — te dejo la versión condensada y prolija, lista para pegar en tu tutorial:


OpenCLI + Chromium headless en Arch Linux (TTY)

1. Instalar dependencias

sudo pacman -S chromium nodejs npm unzip
npm install -g @jackwener/opencli

2. Descargar y descomprimir la extensión

cd ~/Downloads
unzip opencli-extension-*.zip -d opencli-extension

3. Lanzar Chromium headless con la extensión

EXT_PATH="$HOME/Downloads/opencli-extension"

chromium --headless=new \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/chrome-debug-profile" \
  --disable-extensions-except="$EXT_PATH" \
  --load-extension="$EXT_PATH" \
  --remote-allow-origins="*" \
  --no-sandbox &

4. Conectar OpenCLI al puerto CDP

export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9222"
opencli doctor   # debe decir [OK] Extension: connected

5. Usar

opencli bilibili hot --limit 5

Para evitar el CAPTCHA (sitios como Google)

El CAPTCHA aparece porque --headless=new tiene un fingerprint detectable. Reemplazá el paso 3 por xvfb-run, que corre Chromium “headed” dentro de una pantalla virtual (sin abrir ventana real ni dejar fingerprint de headless):

sudo pacman -S xorg-server-xvfb xorg-xauth

xvfb-run --auto-servernum chromium \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/chrome-debug-profile" \
  --disable-extensions-except="$EXT_PATH" \
  --load-extension="$EXT_PATH" \
  --remote-allow-origins="*" &

Después repetís los pasos 4 y 5 igual.


Nota para el tutorial: vale la pena aclarar que --headless=new es más simple pero más detectable (CAPTCHA en sitios estrictos como Google), mientras que xvfb-run requiere un paquete extra pero el comportamiento es indistinguible de un Chrome normal.

Problema de CAPTCHAS

Antes de seguir a ciegas, necesito ver qué está pasando realmente. Pasame la salida de esto:

echo $OPENCLI_CDP_ENDPOINT
ps aux | grep -i chrom
ps aux | grep -i xvfb
curl http://127.0.0.1:9222/json/version

Mi sospecha principal: el Chromium anterior (el de --headless=new, PID 13549) probablemente sigue corriendo en background sobre el mismo --user-data-dir. Si después corriste el comando con xvfb-run, chocó con el mismo error de SingletonLock que ya vimos — pero esta vez quizás falló silenciosamente (sin que lo notaras) y nunca llegó a levantar el nuevo proceso, dejando el puerto 9222 muerto o apuntando al Chromium viejo que ya no tiene la extensión activa de la misma forma.

Solución rápida — matar todo y arrancar limpio:

pkill -9 chromium
pkill -9 Xvfb
rm -f "$HOME/chrome-debug-profile/SingletonLock"

EXT_PATH="$HOME/Downloads/opencli-extension"

xvfb-run --auto-servernum chromium \
  --remote-debugging-port=9222 \
  --disable-extensions-except="$EXT_PATH" \
  --load-extension="$EXT_PATH" \
  --remote-allow-origins="*" &

# --user-data-dir="$HOME/chrome-debug-profile" \

sleep 3
export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9222"
opencli doctor

El sleep 3 es para darle tiempo a Chromium a levantar antes de chequear — a veces opencli doctor corre demasiado rápido y el browser todavía no terminó de iniciar la extensión.

Pasame el resultado de los echo/ps/curl de arriba (sobre todo si curl devuelve algo o un “connection refused”) y lo afinamos con datos reales en vez de suposiciones.

Para discord uso discordo-git

yay -S discordo-git y export DISCORDO_TOKEN=“aisodjaojdid” en el .bashrc

Si queres usar chromium con un proxy:

xvfb-run --auto-servernum chromium \
  --remote-debugging-port=9222 \
  --disable-extensions-except="$EXT_PATH" \
  --load-extension="$EXT_PATH" \
  --proxy-server="socks5://localhost:9050" \
  --remote-allow-origins="*"  &

Para escapar las comillas dobles en vim al usar opencli

:s/"/\\"/g

Siempre usa --format plain