¿Existe una manera sencilla de tener íconos de base separados para diferentes perfiles de Chrome?

Estoy usando Google Chrome versión 22 en OS X 10.8. Utilizo perfiles de usuario separados (creados con la función nativa de Chrome en Settings->Users) para mi navegación web "regular" y el desarrollo web que realizo. Lanzo mi perfil de desarrollo web desde la ventana de perfil normal de Chrome haciendo clic en el avatar en la esquina superior izquierda:

ingrese la descripción de la imagen aquí

Por el momento, ambos perfiles comparten un único icono de base. Sin embargo, preferiría que cada perfil de Chrome tuviera su propio ícono de base, con las ventanas administradas por separado, e idealmente que los íconos de base se distinguieran de alguna manera. ¿Es esto fácilmente posible? Por 'fácil', me refiero a que cosas como la reconstrucción de Chrome desde la fuente no son una opción que consideraré.

Nota : Me gustaría usar la misma versión estable de Chrome para ambos perfiles. Estaría bien tener la misma versión instalada el doble de tiempo, siempre que se puedan mantener separadas y se distinga el icono del muelle.

Solo quiero señalar que esta es una característica estándar de Chrome en Windows (al menos en v64). Cuando crea un nuevo perfil en Chrome, Settings->UsersChrome pregunta "Crear un acceso directo de escritorio para este usuario" y, si hace clic en Sí, crea un acceso directo que es el icono de Chrome con el icono del perfil de Chrome del usuario superpuesto en la esquina inferior derecha. Cuando la aplicación se está ejecutando, cada perfil tiene su propio icono en la barra de tareas. Solo menciono esto porque espero que eventualmente traigan esa característica a la versión de macOS.

Respuestas (4)

Para tener dos Chrome ejecutándose al mismo tiempo, debe crear una segunda aplicación Google Chrome ejecutable.

Puede crear esa segunda aplicación ejecutando el siguiente script. Proviene de este sitio , copio y pego para comodidad de los lectores:

#!/bin/bash

PROFILE_NAME=$1
mkdir -p "/Applications/Google Chrome $1.app/Contents/MacOS"

F="/Applications/Google Chrome $1.app/Contents/MacOS/Google Chrome $1"
cat > "$F" <<\EOF
#!/bin/bash

#
# Google Chrome for Mac with additional profile.
#

# Name your profile:
EOF

echo "PROFILE_NAME='$PROFILE_NAME'\n" >> "$F"

cat >> "$F" <<\EOF
# Store the profile here:
PROFILE_DIR="/Users/$USER/Library/Application Support/Google/Chrome/${PROFILE_NAME}"

# Find the Google Chrome binary:
CHROME_APP=$(mdfind 'kMDItemCFBundleIdentifier == "com.google.Chrome"' | head -1)
CHROME_BIN="$CHROME_APP/Contents/MacOS/Google Chrome"
if [[ ! -e "$CHROME_BIN" ]]; then
  echo "ERROR: Can not find Google Chrome.  Exiting."
  exit -1
fi

# Start me up!
exec "$CHROME_BIN" --enable-udd-profiles --user-data-dir="$PROFILE_DIR"
EOF

sudo chmod +x "$F"

Guárdelo en un archivo (digamos create_second_chrome.shen la carpeta Escritorio), abra el shell y ejecútelo pasando como parámetro la carpeta de perfil que desea asociar a la segunda aplicación de Chrome. Se llamará Google Chrome profile_folder_name. Supongamos Google Chrome Development:

$ cd ~/Desktop
$ . create_second_chrome.sh Development

Ahora puede iniciar la nueva versión de Chrome ( Google Chrome Development) desde el ~/Applicationsdirectorio. Puede establecer un icono diferente haciendo clic derecho en la aplicación y seleccionando 'Obtener información'. Verá que esta nueva versión tiene su propio icono en el muelle y se puede acoplar allí si es necesario.

Eso no parece funcionar. Creé un nuevo perfil para mí llamado Developmenten Settings -> Users. Esto creó el directorio ~/Library/Application Support/Google/Chrome/Profile 2. Sin embargo, ejecutar open -a "Google Chrome" --args --profile-directory="Profile 2"aún abre el perfil antiguo/original, como puedo ver en el avatar en la esquina superior derecha.
@AndrewFerrier ¿Ha intentado cerrar command + qChrome y volver a abrirlo mediante el flujo de trabajo? Funciona conmigo.
funciona si lo hace, sí (es decir, si Chrome no se inicia en absoluto, abre el perfil deseado). Pero si ya se inició un perfil, al ejecutar ese comando se vuelve a abrir una ventana para ese perfil, independientemente del perfil especificado. Eso no ayuda con la pregunta, ya que el objetivo es tener ambos abiertos simultáneamente.
@AndrewFerrier Gracias por tu edición, ¡ahora responde mejor! ¡Espero que te haya ayudado! Lucas
@AndrewFerrier ¿Le gustaría tener dos íconos diferentes? Corrígeme si me equivoco, pero los íconos deberían ser el único problema, ¿verdad?
@AndrewFerrier Intenté modificar el icono ( command+ ien la nueva aplicación y arrastrar y soltar a la derecha del nombre de desarrollo de Google Chrome) del segundo Chrome y no tengo ese problema.
yo tampoco ahora! Parece que cometí un error, parece estar bien ahora. Lo dejaré funcionando un rato, a ver si sigo teniendo problemas...
Si bien la copia del ícono funcionó en el conmutador de aplicaciones Finder y OSX, no parece haber funcionado en Activity Monitor o Witch. Supongo que esas herramientas miran el proceso en lugar del paquete de aplicaciones para el icono. ¿Alguna idea sobre cómo arreglar eso?
Parece que funciona en todos los casos excepto en los enlaces de arrastrar y soltar. Cuando dnd'ing "real", Chrome los abre incluso si el destino de colocación era otra instancia de la aplicación.
Estoy viendo algo similar a @AndreyTatarinov. Si trato de enviar una URL al Chrome envuelto, se abre brevemente lo que parece otra instancia del Chrome envuelto, que se cierra de inmediato. El Chrome envuelto abre una nueva ventana con la página predeterminada (no la URL que estaba tratando de abrir). Esto significa que Chrome envuelto no funciona, por ejemplo, con Choosy. Creo que tiene algo que ver con que LaunchServices no reconozca la versión empaquetada como una aplicación independiente, pero intenté agregar un Info.plist con una diferente CFBundleIdentifiery eso no solucionó el problema.
Hola @Maverik, creo que este script confunde a lo --user-data-dirque apunta la opción. Señala algo llamado PROFILE_DIR como /Users/$USER/Library/Application Support/Google/Chrome/${PROFILE_NAME}si el perfil fuera un usuario de Chrome. Pero en realidad esto necesita estar un nivel arriba. Creo que deberías llamarlo CHROME_DATAo INSTANCE_DATAy deberías ponerlo en /Users/$USER/Library/Application Support/Google/Chrome${PROFILE_NAME}: junto al Chromedirectorio existente, no dentro de él.
Me encontré con un problema en el que el ícono volvía al valor predeterminado al azar. Y necesitaba que el nombre del proceso fuera diferente para usar otros scripts. He añadido un enlace simbólico en la aplicación de Chrome para solucionar este problema. Reemplace la llamada ejecutiva en el script de respuesta con esto:# Create a symlink in the Google Chrome app so we control the process name SYMLINK="$CHROME_APP/Contents/MacOS/Google Chrome ${PROFILE_NAME}" if [[ ! -e "$SYMLINK" ]]; then ln -s "$CHROME_APP/Contents/MacOS/Google Chrome" "$SYMLINK" fi # Start me up! exec "$SYMLINK" --enable-udd-profiles --user-data-dir="$PROFILE_DIR"

ACTUALIZACIÓN : Ya no uso este método. En cambio, ahora uso Epichrome, que es mucho más fácil de usar y funciona mejor. Publiqué una nueva respuesta con esta información y sugiero que la gente la use en su lugar.


Respuesta original con instrucciones manuales:

Probé el script de @Maverick y funcionó en parte (¡gracias!) pero encontré algunas dificultades. El principal problema es que la copia envuelta de Chrome, aunque es independiente, tiene su propio icono y funciona correctamente por sí sola, no puede abrir las URL enviadas desde otras aplicaciones, por lo que no funciona con Choosy.

Esto es lo que funcionó para mí, para obtener un segundo Chrome que pueda abrir enlaces a través de Choosy, por ejemplo:

  1. Copie Library/Application Support/Google/Chromea Library/Application Support/Google/ChromePersonalen su directorio de inicio. Esto es opcional; Quería transferir mis perfiles de usuario de Chrome a la nueva instancia. Pero si está bien comenzar de nuevo, puede omitir esto.
  2. Copiar Google Chrome.appa otra ubicación. /Applications/Google Chrome Personal.appYo solía
  3. Copie mi script wrapper.sh (abajo) en el Contents/MacOSdirectorio de la aplicación.
  4. chmod +x wrapper.sh
  5. Modificar Contents/Info.plisten esta nueva aplicación para:
    • apunte a la secuencia de comandos contenedora (establezca CFBundleExecutableel valor en wrapper.sh)
    • tener un valor único CFBundleIdentifier(simplemente agregue "Personal" al valor existente)
    • tener un valor único CFBundleName(simplemente agregue "Personal" al valor existente)
    • tener un valor único CFBundleDisplayName(simplemente agregue "Personal" al valor existente)

Aquí está mi script wrapper.sh modificado. Póngalo en /Applications/Google\ Chrome\ Personal.app/Contents/MacOS/wrapper.shy luego edite Info.plist como en el paso 4.

#!/bin/bash

# Wrapper script that starts independent instance of Google Chrome for Mac

# To use: copy Google Chrome.app to a new location.  Copy this script into
# the Contents/MacOS directory of the copied app.  Edit the copied app's
# Contents/Info.plist and change CFBundleExecutable to "wrapper.sh",
# and pick a unique CFBundleIdentifier.

# Instance data will be stored here.  You can copy your existing data 
# to this location if you want to preserve your existing user profile(s).
# You can also change this if you want to store the data somewhere else.
INSTANCE_DIR="/Users/$USER/Library/Application Support/Google/ChromePersonal"

# Find the Google Chrome binary:
CHOME_BIN="$(dirname "$0")/Google Chrome"

# Start Chrome
exec "$CHOME_BIN" --user-data-dir="$INSTANCE_DIR"

Una advertencia: creo que la función de actualización automática de Chrome romperá esto cada vez que Chrome se actualice, lo que significa que debe volver a realizar los pasos 3 y 4 después de cada actualización de Chrome.

Siguiendo estas instrucciones obtengo una aplicación que no se inicia
Lo siento @TomJNowell! Supongo que debo haber perdido un paso. ¿Probablemente tengas que hacer chmod 755 en el script wrapper.sh? El mío es ejecutable. Si intenta eso y soluciona el problema, hágamelo saber para que pueda actualizar la respuesta.
chmod +x hizo el truco
Puede evitar las actualizaciones automáticas cambiando la KSProductIDclave en Info.plist. Si va a la página acerca de, verá un "Estado del nodo de información de la aplicación KSOmahaServer 'com.google.ChromePersonal' 'error-unknownApplication'. ..."; error al intentar actualizar manualmente.
Seguimiento: las actualizaciones parecen estar deshabilitadas para mí sin cambiar KSProductID. Dice que hay una actualización disponible, luego hago clic en Relanzar y se reinicia a la misma versión. No tengo activadas las Actualizaciones automáticas para todos los usuarios, así que tal vez esa sea la razón o que haya cambiado el nombre del ejecutable.

Ahora uso Epichrome para este propósito. Epichrome está diseñado para crear navegadores específicos del sitio, pero puede configurar las reglas de filtrado y el ícono como desee, por lo que es perfectamente capaz de crear un segundo Chrome con su propio perfil e ícono de base separados. Los navegadores creados por Epichrome funcionan con el mecanismo de actualización de Google, por lo que todos se mantendrán actualizados con la última versión de Chrome.

Tiene una GUI simple: no se requiere codificación ni recompilación de Chrome. Creo que es una solución bastante sólida para este problema.

¿Has comparado Epichrome con Detangle ?

Ninguna de estas respuestas funcionó para mí de manera integral en Mac OS X Yosemite. Aquí está mi solución, que le brinda múltiples instancias, un menú de inicio de base para las instancias y diferentes íconos para cada instancia. Cuando ejecute el script, revisará automáticamente todos sus perfiles y luego le dirá qué hacer a continuación.

#!/bin/bash

# cdi.sh - Make chrome profiles behave like multiple browsers on Mac OS X
#          (Tested on Yoshmite). Make profiles work like seperate applications
#          - esp. useful if you want to easily switch between different browsers
#          in different virtual desktops / workspaces, or don't want work
#          windows mixed in with home windows in the "Window" menu, or want to
#          be able to easily see what processes are with a certain profile in
#          chrome task manager, or be able to eaisly quit one profile with
#          multiple windows open and start where you left of later.

set -e

cd /Users/$USER/Library/Application\ Support/Google/Chrome

CDI="cdi-chrome-multiple-profile-instances-in-dock-with-different-icons.d"
APPLESCRIPTS="$CDI/Applescript-Sources"
LAUNCHERS="$CDI/Chrome-Launchers"
RUNTIMES="$CDI/Chrome-Runtimes"
test -d $CDI || mkdir $CDI
test -d $APPLESCRIPTS || mkdir $APPLESCRIPTS
test -d $LAUNCHERS || mkdir $LAUNCHERS
test -d $RUNTIMES || mkdir $RUNTIMES

grep '"username"' Profile*/Preferences Default/Preferences | grep -v '               ' | awk -F : '{print $1";"$3}' | sed 's:/Preferences::g' | sed 's:\@:-at-:g' | sed 's/;\ /;/g' > $CDI/profiles.txt
# Like: Profile 1;"webmaster-at-example.org"

echo "Be patient, this involves copying a lot of data..."

while read PROFILE; do

DIR="$(echo $PROFILE | awk -F\; '{print $1}')"
# Like: DIR='Profile 1'
echo "Working on profile: $DIR"

LINK="$(echo $PROFILE | awk -F\; '{print $2}' | sed 's/\ /\-/g' | sed 's/"//g' | sed 's/^/cdi-profile-/g')"
# Like: cdi-profile-webmaster-at-example.org

APP="$(echo $LINK | sed 's/^cdi-profile-//g' | sed 's/$/-DO-NOT-RUN-DIRECTLY-JUST-USE-FOR-CHANGING-ICON-cdi\.app/g')"
# Like: webmaster-at-example.org-DO-NOT-RUN-DIRECTLY-JUST-USE-FOR-CHANGING-ICON-cdi.app

SHIM="$(echo $LINK | sed 's/^cdi-profile-//g' | sed 's/$/\.app/g')"
# Like: webmaster-at-example.org.app

TXT="$APPLESCRIPTS/$(echo $LINK | sed 's:^cdi-profile-:chrome-:g' | sed 's/$/\.txt/g')"
# Like:
# cdi-chrome-multiple-profile-instances-in-dock-with-different-icons.d
# /Applescript-Sources/chrome-webmaster-at-example.org.txt

test -L "$LINK" || ln -s "$DIR" "$LINK"
cd "$LINK"
test -L Default || ln -s . Default
cd /Users/$USER/Library/Application\ Support/Google/Chrome
test -d "$RUNTIMES/$APP" || cp -R /Applications/Google\ Chrome.app "$RUNTIMES/$APP"

## This section disabled because enabling it makes automatic profile login not work.
## There is a chance someone who knows more about chrome will help at some point; see:
## https://code.google.com/p/chromium/issues/detail?id=460787
## https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/0HEeMuh8WqA
## https://github.com/lhl/chrome-ssb-osx
# Change Bundle ID so desktop assignation works. Not sure if this will survive updates.
# CFBundleIdentifier must contain only alphanumeric (A-Z,a-z,0-9), hyphen (-), and period (.) characters.
# (Based on fiddling around there also seems to be a length limit.)
#UUID="$(echo $APP | md5sum | awk '{print $1}' | tr [0-9] [A-Z] | cut -c 1-4,29-32)"
#plutil -replace CFBundleIdentifier -string "cdi.$UUID" -- "$RUNTIMES/$APP/Contents/Info.plist"
#plutil -replace CFBundleName -string "$UUID" -- "$RUNTIMES/$APP/Contents/Info.plist"
#plutil -replace CFBundleDisplayName -string "$UUID" -- "$RUNTIMES/$APP/Contents/Info.plist"
#plutil -replace KSProductID -string "cdi.$UUID" -- "$RUNTIMES/$APP/Contents/Info.plist"
# To check: defaults read ~/Library/Preferences/com.apple.spaces.plist app-bindings

echo "on run" > $TXT
echo -n "do shell script " >> $TXT
echo -n '"' >> $TXT
echo -n "/Users/$USER/Library/Application\\\\ Support/Google/Chrome/$RUNTIMES/$APP/Contents/MacOS/Google\\\\ Chrome --user-data-dir=/Users/$USER/Library/Application\\\\ Support/Google/Chrome/$LINK" >> $TXT
echo ' > /dev/null 2>&1 &"' >> $TXT
echo "quit" >> $TXT
echo "end run" >> $TXT
test -d "$LAUNCHERS/$SHIM" || osacompile -o "$LAUNCHERS/$SHIM" $TXT

done < $CDI/profiles.txt

echo
echo 'Done with automated portion. Now you should manually:'
echo
echo '1. Add (identical) icons of your choice to each pair of profile Launchers'
echo '   / Runtimes in the folder ~/Library/Application Support/Google/Chrome/'
echo '   cdi-chrome-multiple-profile-instances-in-dock-with-different-icons.d'
echo '   (google for numerous guides on how to change mac os x app icons)'
echo
echo '2. From the finder, drag the "Chrome-Launchers" folder to the stacks area'
echo '   of the dock. Right click on the stack and select "List" for easy viewing.'
echo '   Also select "Display as Folder" and give the folder a nice icon.'
echo
echo '3. BE SURE to only open Chrome via this stack. DO NOT pin the app-area'
echo '   Chrome icon(s) to the app area of the dock! DO NOT run "normal" Chrome!'
echo
echo 'The only exception to (3) is if you need to add a new profile. In that case,'
echo 'close all instances, then open the "normal" Chrome, add profile, close, and'
echo 'then run this script again.'
echo
echo 'Note: when you launch first time you will get "Welcome to Google Chrome"'
echo '      dialog box. This is normal; do not worry. It will ask if you want'
echo '      to set Chrome as default; this applies to that instance of chrome.'
echo '      Choosy - http://www.choosyosx.com/ - works great with this!'
echo

Para los íconos, puede usar cualquier PNG (o probablemente muchos otros formatos).

Los avatares de Chrome a los que ya puede estar acostumbrado se encuentran en "~/Library/Application Support/Google/Chrome/Avatars" - avatar_ninja.png, etc.

O haga el suyo propio, o use uno de los numerosos sitios de íconos: me gusta Easyicon .

Además, esto parece posiblemente útil: cómo recuperar avatares en Chrome para cambiar los perfiles de usuario más fácilmente , para que las ventanas abiertas sean más fáciles de identificar rápidamente (no probado).

Una cosa que aún no funciona es la capacidad de asignar diferentes instancias de Chrome de perfil de usuario a escritorios específicos. Esto se debe a que si se cambia el atributo utilizado para hacer esto, el navegador ya no podrá iniciar sesión automáticamente en ese perfil cuando se inicie el navegador. Hice una publicación en el foro y un informe de error sobre este problema; también es un problema para los navegadores específicos del sitio, por lo que el proyecto chrome-ssb-osx puede hacer que esto funcione en algún momento. No tengo los 10 puntos de reputación necesarios para incluir más de 2 enlaces en las publicaciones aquí (¡ayuda! :-), por lo que tendrá que mirar los enlaces a estas cosas en el script anterior (sección "Esta sección desactivada" ).

Dado que esto se está volviendo un poco complejo, todas las cosas nuevas irán a github.com/djbclark/chrome-apartheid