Existe-t-il un moyen simple d'avoir des icônes de dock distinctes pour différents profils Chrome?

27

J'utilise Google Chrome version 22 sur OS X 10.8. J'utilise des profils utilisateur distincts (créés à l'aide de la fonction native de Chrome dans Settings->Users) pour ma navigation Web "régulière" et le développement Web que je fais. Je lance mon profil de développement Web à partir de la fenêtre de profil Chrome standard en cliquant sur l'avatar dans le coin supérieur gauche:

entrez la description de l'image ici

Pour le moment, ces deux profils partagent une seule icône de dock. Cependant, je préférerais de beaucoup que chaque profil Chrome ait sa propre icône de dock, avec les fenêtres gérées séparément - et idéalement pour que les icônes de dock soient distinguées d'une manière ou d'une autre. Est-ce que c'est facilement possible? Par «facile», je veux dire que des choses comme la reconstruction de Chrome à partir de la source ne sont pas une option que je considérerai.

Remarque : je voudrais utiliser la même version stable de Chrome pour les deux profils. Ce serait OK d'avoir la même version installée deux fois tant qu'ils peuvent être séparés et que l'icône du dock est distinguée.

Andrew Ferrier
la source
Je veux juste souligner qu'il s'agit d'une fonctionnalité standard de Chrome sur Windows (au moins en v64). Lorsque vous créez un nouveau profil dans Chrome, Settings->UsersChrome demande "Créer un raccourci sur le bureau pour cet utilisateur" et si vous cliquez sur oui, il crée un raccourci qui est l'icône Chrome avec l'icône de profil Chrome de l'utilisateur superposée dans le coin inférieur droit. Lorsque l'application est en cours d'exécution, chaque profil a sa propre icône dans la barre des tâches. Je soulève cela uniquement parce que j'espère qu'ils apporteront finalement cette fonctionnalité à la version macOS.
gman

Réponses:

7

Pour avoir deux Chrome fonctionnant en même temps, vous devez créer une deuxième application Google Chrome exécutable.

Vous pouvez créer cette deuxième application en exécutant le script suivant. Il provient de ce site , je le copie et le colle pour le confort des lecteurs:

#!/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"

Enregistrez-le dans un fichier (disons create_second_chrome.shdans le dossier Desktop), ouvrez le shell et exécutez-le en passant en paramètre le dossier de profil que vous souhaitez associer à la deuxième application Chrome. Il sera appelé Google Chrome profile_folder_name. Supposons Google Chrome Development:

$ cd ~/Desktop
$ . create_second_chrome.sh Development

Vous pouvez maintenant lancer la nouvelle version de Chrome ( Google Chrome Development) à partir du ~/Applicationsrépertoire. Vous pouvez définir une autre icône en cliquant avec le bouton droit sur l'application et en sélectionnant «Obtenir des informations». Vous verrez que cette nouvelle version a sa propre icône sur le dock et peut y être ancrée si nécessaire.

Maverik
la source
1
Cela ne semble pas fonctionner. J'ai créé un nouveau profil pour moi - même appelé Developmentà Settings -> Users. Cela a créé le répertoire ~/Library/Application Support/Google/Chrome/Profile 2. Cependant, l'exécution open -a "Google Chrome" --args --profile-directory="Profile 2"ouvre toujours l'ancien profil / original, comme je peux le voir à partir de l'avatar dans le coin supérieur droit.
Andrew Ferrier
@AndrewFerrier Avez-vous essayé de fermer command + qChrome et de le rouvrir au moyen du flux de travail? Ça marche avec moi.
Maverik
1
cela fonctionne si vous le faites, oui (c'est-à-dire que si Chrome n'est pas démarré du tout, il ouvre le profil souhaité). Mais si un profil est déjà démarré, l'exécution de cette commande rouvre une fenêtre pour ce profil, quel que soit le profil spécifié. Cela n'aide pas la question, car l'objectif est d'avoir les deux ouverts simultanément.
Andrew Ferrier
@AndrewFerrier Merci pour votre modification, maintenant la réponse est meilleure! J'espère que cela vous a aidé! Luca
Maverik
1
moi non plus! Semble que j'ai fait une erreur, il semble OK maintenant Je vais le laisser tourner un peu, voir si je continue à avoir des problèmes ...
Andrew Ferrier
4

MISE À JOUR : je n'utilise plus cette méthode. Au lieu de cela, j'utilise maintenant Epichrome qui est beaucoup plus facile à utiliser et fonctionne mieux. J'ai posté une nouvelle réponse avec ces informations et je suggère aux gens de l'utiliser à la place.


Réponse originale avec instructions manuelles:

J'ai essayé le script de @Maverick et cela a fonctionné en partie (merci!) Mais j'ai rencontré quelques difficultés. Le principal problème est que la copie encapsulée de Chrome, bien qu'elle soit indépendante, possède sa propre icône et fonctionne correctement d'elle-même, ne peut pas ouvrir les URL envoyées à partir d'autres applications, donc elle ne fonctionne pas avec Choosy.

Voici ce qui a fonctionné pour moi, pour obtenir un deuxième Chrome qui peut ouvrir des liens via Choosy, par exemple:

  1. Copier Library/Application Support/Google/Chromevers Library/Application Support/Google/ChromePersonaldans votre répertoire personnel. C'est facultatif; Je voulais transférer mes profils d'utilisateurs Chrome vers la nouvelle instance. Mais si vous êtes d'accord pour recommencer à zéro, vous pouvez ignorer cela.
  2. Copiez Google Chrome.appvers un autre emplacement. J'ai utilisé /Applications/Google Chrome Personal.app.
  3. Copiez mon script wrapper.sh (ci-dessous) dans le Contents/MacOSrépertoire de l'application .
  4. chmod +x wrapper.sh
  5. Modifiez Contents/Info.plistdans cette nouvelle application pour:
    • pointez sur le script wrapper (définissez la CFBundleExecutablevaleur sur wrapper.sh)
    • avoir un unique CFBundleIdentifier(il suffit d'ajouter "Personnel" à la valeur existante)
    • avoir un unique CFBundleName(il suffit d'ajouter "Personnel" à la valeur existante)
    • avoir un unique CFBundleDisplayName(il suffit d'ajouter "Personnel" à la valeur existante)

Voici mon script wrapper.sh modifié. Placez-le sur /Applications/Google\ Chrome\ Personal.app/Contents/MacOS/wrapper.sh, puis modifiez l'Info.plist comme à l'étape 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"

Une mise en garde: je pense que la fonction de mise à jour automatique de Chrome va casser cela à chaque mise à jour de Chrome, ce qui signifie que vous devez refaire les étapes 3 et 4 après chaque mise à jour de Chrome.

jbyler
la source
En suivant ces instructions, je reçois une application qui ne démarre pas
Tom J Nowell
Désolé @ TomJNowell! Je suppose que j'ai dû manquer une étape. Vous devez probablement chmod 755 le script wrapper.sh? Le mien est exécutable. Si vous essayez cela et qu'il résout le problème pour vous, faites-le moi savoir afin que je puisse mettre à jour la réponse?
jbyler
chmod + x a fait l'affaire
Tom J Nowell
Vous pouvez empêcher les mises à jour automatiques en modifiant la KSProductIDclé Info.plist. Si vous allez sur la page à propos, vous verrez une "application KSOmahaServer 'com.google.ChromePersonal' info node status 'error-unknownApplication'. ..."; erreur lors de la tentative de mise à jour manuelle.
webXL
Suivi: les mises à jour semblent être désactivées pour moi sans changer KSProductID. Il indique qu'une mise à jour est disponible, puis je clique sur Relancer, et il se relance vers la même version. Je n'ai pas activé les mises à jour automatiques pour tous les utilisateurs, c'est peut-être la raison ou j'ai renommé l'exécutable.
webXL
1

Aucune de ces réponses n'a fonctionné pour moi de manière complète sous Mac OS X Yosemite. Voici ma solution, qui vous donne plusieurs instances, un menu de lancement de dock pour les instances et différentes icônes pour chaque instance. Lorsque vous exécutez le script, il passe automatiquement en revue tous vos profils, puis vous indique quoi faire ensuite.

#!/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

Pour les icônes, vous pouvez utiliser n'importe quel PNG (ou probablement de nombreux autres formats).

Les avatars de chrome auxquels vous êtes peut-être déjà habitué se trouvent sous "~ / Library / Application Support / Google / Chrome / Avatars" - avatar_ninja.png etc.

Ou créez le vôtre, ou utilisez l'un des nombreux sites d'icônes - j'aime Easyicon .

Cela semble également peut-être utile - Comment récupérer des avatars dans Chrome pour changer plus facilement de profil utilisateur - pour rendre les fenêtres ouvertes plus faciles à identifier rapidement (non testées).

Une chose qui ne fonctionne pas encore est la possibilité d'attribuer différentes instances de chrome de profil utilisateur à des bureaux spécifiques. En effet, si l'attribut utilisé pour ce faire est modifié, le navigateur ne peut plus se connecter automatiquement à ce profil au démarrage du navigateur. J'ai fait un post sur le forum et un rapport de bug sur ce problème; c'est également un problème pour les navigateurs spécifiques au site, donc le projet chrome-ssb-osx peut le faire fonctionner à un moment donné. Je n'ai pas les 10 points de réputation nécessaires pour inclure plus de 2 liens dans les articles ici (aide! :-), vous devrez donc regarder les liens vers ces choses dans le script ci-dessus (section "Cette section désactivée" ).

Daniel J Clark
la source
Comme cela devient un peu complexe, de nouvelles choses iront toutes à github.com/djbclark/chrome-apartheid
Daniel J Clark
1

J'utilise maintenant Epichrome à cet effet. Epichrome est conçu pour créer des navigateurs spécifiques au site, mais vous pouvez configurer les règles de filtrage et l'icône comme vous le souhaitez, il est donc parfaitement capable de créer simplement un deuxième Chrome avec son propre profil séparé et une icône de dock. Les navigateurs créés par Epichrome fonctionnent avec le mécanisme de mise à jour de Google, ils resteront donc tous à jour avec la dernière version de Chrome.

Il possède une interface graphique simple: aucun codage ni recompilation de Chrome requis. Je pense que c'est une solution assez solide pour ce problème.

jbyler
la source
-2

Avez-vous essayé la version bêta ? Je ne peux pas tester pour le moment, donc je ne suis pas sûr à 100% qu'il s'agit d'une icône différente - et sinon, vous pouvez également essayer la "construction canari" -

Il ne devrait pas être si éloigné de la version officielle en termes de rendu afin que vous puissiez faire confiance à ce que vous voyez. Et vous pouvez faire de votre profil de développeur le profil par défaut.

Loïc Wolff
la source
Je ne sais pas exactement ce que vous proposez. Suggérez-vous d'exécuter deux versions différentes de Chrome en même temps? (stable et bêta). Je préfère vraiment utiliser stable dans tous les domaines. Merci pour la suggestion, cependant.
Andrew Ferrier
FWIW, j'ai téléchargé Chrome à partir de la chaîne bêta et il a la même icône, donc malheureusement cela ne m'aide pas beaucoup non plus ...
Andrew Ferrier
Pour info, Chrome Canary a en fait une icône différente, mais elle est moins stable (cela fonctionne généralement).
studgeek