25054ff64e
Nueva función Bash del dominio browser para personalizar la apariencia de un perfil Chrome/Chromium y diferenciarlo de un vistazo. Edita `profile.info_cache.<perfil>` en el Local State del user-data-dir: - `--avatar <N>`: avatar built-in de Chrome (índice 0..55) vía `avatar_icon = chrome://theme/IDR_PROFILE_AVATAR_<N>`. Camino robusto. - `--avatar <ruta.png>`: avatar custom best-effort (copia la imagen al perfil y marca `is_using_default_avatar=false`); ver gotchas del .md. - `--color <#rrggbb>`: color del perfil. Convierte el hex a int32 con signo en formato ARGB (0xAARRGGBB) y lo aplica a `profile_highlight_color`, `profile_color_seed` y `default_avatar_fill_color`. Sigue el patrón de create/delete_chrome_profile: backup del Local State antes de escribir, validación del JSON resultante con restauración del backup si queda inválido, guard de SingletonLock (chromium debe estar cerrado), idempotente y con --dry-run. No crea perfiles (eso es create_chrome_profile); requiere que el perfil ya exista. Probada con --avatar 26 --color #1f6feb y casos edge. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.5 KiB
6.5 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | params | output | ||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| set_chrome_profile_appearance | function | bash | browser | 1.0.0 | impure | set_chrome_profile_appearance --user-data-dir <dir> --profile <dir-name> [--avatar <N|ruta.png>] [--color <#rrggbb>] [--dry-run] | Personaliza la apariencia visual de un perfil Chrome/Chromium existente: asigna un avatar built-in (índice 0..55) o una imagen PNG/JPG custom, y/o un color de acento (hex #rrggbb). Edita los campos avatar_icon, is_using_default_avatar, profile_highlight_color, profile_color_seed y default_avatar_fill_color en profile.info_cache de Local State. Requiere que Chromium esté cerrado sobre el user-data-dir. Hace backup de Local State antes de escribir y valida el JSON resultante. |
|
false | error_go_core | false | bash/functions/browser/set_chrome_profile_appearance.sh |
|
JSON en stdout con los campos resultantes del perfil: {"profile":"<dir>","avatar_icon":"...","is_using_default_avatar":true|false,"profile_highlight_color":<int>,"profile_color_seed":<int>,"default_avatar_fill_color":<int>,"backup":"Local State.bak.YYYYMMDD"}. En dry-run: {"profile":"...","avatar_applied":true|false,"color_applied":true|false,"dry_run":true}. Mensajes de diagnóstico a stderr. Exit 0 en éxito. |
Ejemplo
source $HOME/fn_registry/bash/functions/browser/set_chrome_profile_appearance.sh
# Asignar avatar built-in #26 (oso panda) y color azul GitHub al perfil Automation
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Automation \
--avatar 26 \
--color "#1f6feb"
# Salida JSON con los valores aplicados
# Solo cambiar color (sin tocar avatar)
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Default \
--color "16a34a"
# Solo cambiar avatar built-in
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile "Profile 1" \
--avatar 5
# Avatar custom desde imagen
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Personal \
--avatar /tmp/foto.png \
--color "#0ea5e9"
# Dry-run: ver qué se aplicaría sin escribir
set_chrome_profile_appearance \
--user-data-dir ~/.config/chromium-cdp \
--profile Automation \
--avatar 26 \
--color "#1f6feb" \
--dry-run
Cuando usarla
Úsala para diferenciar visualmente los perfiles de un user-data-dir de automatización — un color y avatar distintos por perfil hacen inmediata la identificación en el selector de Chrome. Ejecútala justo después de create_chrome_profile (con --no-launch) o como paso independiente de personalización batch antes de lanzar sesiones CDP.
Gotchas
- Chromium debe estar cerrado: Chrome reescribe
Local Statecompleto desde memoria al cerrar; si se ejecuta mientras hay un proceso chromium vivo sobre el mismo user-data-dir, Chrome sobreescribirá los cambios al salir. La función detecta esto conpgrep -x chromiumfiltrando por cmdline y sale con exit 2 antes de modificar nada. Usapkill -TERM chromiumpara cerrar y espera unos segundos. - El perfil debe existir en info_cache: esta función personaliza perfiles existentes; no los crea. Usa
create_chrome_profileprimero (con--no-launchbasta para que aparezca en Local State) y luegoset_chrome_profile_appearance. - color es int32 con signo en ARGB: Chrome almacena el color como entero con signo de 32 bits en formato
0xAARRGGBB. Un color como#1f6feb(azul) da ARGB0xFF1F6FEB→ signed int32-14713877. La función hace la conversión internamente; tú pasas siempre hex#rrggbb. - Avatar custom (imagen) es best-effort: el campo
gaia_picture_file_nameyis_using_default_avatar=falsese aplican correctamente en Local State y la imagen se copia al directorio del perfil. Sin embargo, Chrome puede ignorar la foto de perfil en perfiles sin sesión Google activa (Chromium sin cuenta). El camino robusto y garantizado es usar el índice built-in (--avatar 0..55): 56 avatares (animales, objetos, personas) son más que suficientes para diferenciar perfiles de automatización. - Backup diario: se crea
Local State.bak.YYYYMMDDen el user-data-dir antes de cualquier escritura. Si ya existe el backup del día no se sobreescribe. Si el JSON resultante es inválido, se restaura automáticamente el backup. - is_using_default_avatar con índice built-in: Chrome considera los avatares IDR_PROFILE_AVATAR_* como "avatares por defecto" del sistema, por eso
is_using_default_avatarpermanecetruecon índice numérico. Esto es correcto y es lo que Chrome haría internamente.
Exit codes
| Código | Significado |
|---|---|
| 0 | Éxito |
| 1 | Argumento obligatorio faltante, rango inválido o archivo de imagen no encontrado |
| 2 | Lock: hay un chromium usando el mismo user-data-dir |
| 3 | El perfil no existe en info_cache de Local State |
| 4 | Error editando Local State (JSON inválido tras escritura, restaurado backup) |