--- name: apply_chromium_cdp_flag kind: function lang: bash domain: browser version: "1.0.0" purity: impure signature: "apply_chromium_cdp_flag [--port N] [--network] [--fragment-path ] [--remove] [--dry-run]" description: "Gestiona de forma idempotente el fragmento /etc/chromium.d/cdp que activa Chrome DevTools Protocol global en todo chromium que el usuario lance en el equipo. Escribe, actualiza o borra el fragmento con backup automático." tags: [navegator, chromium, cdp, devtools, browser, automation, infra] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] tested: false tests: [] test_file_path: "" params: - name: "--port N" desc: "Puerto TCP donde Chromium escuchará conexiones CDP. Default 9222." - name: "--network" desc: "Si se pasa, añade --remote-debugging-address=0.0.0.0 (accesible desde la red local). Por defecto solo loopback (127.0.0.1). Imprime advertencia de seguridad." - name: "--fragment-path " desc: "Ruta del fragmento a escribir/borrar. Default /etc/chromium.d/cdp." - name: "--remove" desc: "Borra el fragmento (desactiva CDP global). Idempotente: si no existe, no-op." - name: "--dry-run" desc: "Imprime el fragmento que se escribiría sin tocar nada. No requiere sudo." output: "Sale 0 en éxito (aplicado, ya-aplicado, o eliminado). Sale != 0 en error con mensaje a stderr. En caso de actualización imprime ruta del backup creado." file_path: "bash/functions/browser/apply_chromium_cdp_flag.sh" --- ## Ejemplo ```bash # Activar CDP global en loopback puerto 9222 (proyecto web_scraping, regla 8) source bash/functions/browser/apply_chromium_cdp_flag.sh apply_chromium_cdp_flag # Previsualizar el fragmento sin escribir nada (no requiere sudo) apply_chromium_cdp_flag --port 9222 --dry-run # Puerto alternativo (para correr en paralelo al navegador del usuario) apply_chromium_cdp_flag --port 9333 # Activar expuesto a la red local (RIESGO: cualquier host de la LAN puede controlar el navegador) apply_chromium_cdp_flag --port 9222 --network # Desactivar CDP global apply_chromium_cdp_flag --remove # Ruta personalizada (útil en pruebas o entornos chroot) apply_chromium_cdp_flag --port 9222 --fragment-path /tmp/test_cdp_fragment --dry-run ``` ## Cuando usarla Al preparar un PC nuevo para controlar el chromium diario del usuario vía CDP (primer setup del proyecto `web_scraping`, regla 8). Al cambiar el puerto CDP del sistema. Al desactivar esa capacidad antes de prestar o formatear el equipo. Sustituye el paso manual "crear `/etc/chromium.d/cdp` con sudo" documentado en `CHROMIUM_SYSTEM.md`. ## Gotchas - **Requiere sudo** para escribir bajo `/etc/`. En este equipo usar `pass show claude/sudo | sudo -S apply_chromium_cdp_flag` o ejecutar como root. - **`--network` (0.0.0.0) es un riesgo de seguridad serio**: cualquier máquina en la red local puede conectarse al puerto CDP y controlar Chromium completamente (leer cookies, sesiones, inyectar JavaScript). Solo usar en entornos de red aislados o laboratorios. - **El chromium ya abierto antes del cambio no hereda el flag** hasta que se reinicie. El fragmento solo se aplica en el próximo arranque de `/usr/bin/chromium`. - **Dos procesos chromium no pueden compartir el mismo puerto**. Si el usuario ya tiene un chromium con CDP en 9222, la automatización dedicada debe arrancar con `chrome_launch_go_browser` en otro puerto (ej. 9333) o usar `--port 9333` en esta función. - **Idempotente**: si el fragmento ya existe con contenido idéntico, la función sale 0 sin tocar nada ni crear backup. - **Backup automático**: al sobreescribir, crea `.bak.YYYYMMDD`. Si ya existe un backup del mismo día, no lo sobreescribe (el primero del día se preserva). - **Validación post-escritura**: tras escribir, verifica con `grep` que la línea `export CHROMIUM_FLAGS` con el puerto correcto quedó en el archivo. Si falla, restaura el backup y sale con error. - Ver `projects/web_scraping/CHROMIUM_SYSTEM.md` para el contexto completo del sistema CDP de este equipo.