Existe uma maneira simples de ter ícones de dock separados para diferentes perfis do Chrome?

27

Estou usando o Google Chrome versão 22 no OS X 10.8. Uso perfis de usuário separados (criados usando o recurso nativo do Chrome em Settings->Users) para minha navegação na Web "regular" e o desenvolvimento da Web que faço. Eu inicio meu perfil de desenvolvimento da Web a partir da janela de perfil normal do Chrome, clicando no avatar no canto superior esquerdo:

insira a descrição da imagem aqui

No momento, esses dois perfis compartilham um único ícone do dock. No entanto, eu preferiria que cada perfil do Chrome tivesse seu próprio ícone de dock, com as janelas gerenciadas separadamente - e o ideal é que os ícones de dock sejam distinguidos de alguma forma. Isso é facilmente possível? Por 'fácil', quero dizer que reconstruir o Chrome a partir da fonte não é uma opção que considerarei.

Nota : eu gostaria de usar a mesma versão estável e estável do Chrome para ambos os perfis. Seria bom ter a mesma versão instalada duas vezes, desde que eles possam ser mantidos separados e o ícone do dock diferenciado.

Andrew Ferrier
fonte
Eu só quero ressaltar que esse é um recurso padrão do Chrome no Windows (pelo menos na v64). Quando você cria um novo perfil no Chrome, o Settings->UsersChrome pergunta "Crie um atalho na área de trabalho para este usuário" e, se você clicar em sim, cria um atalho que é o ícone do Chrome, com o ícone do perfil do usuário do Chrome no canto inferior direito. Quando o aplicativo está sendo executado, cada perfil tem seu próprio ícone na barra de tarefas. Eu apenas trago isso à tona porque espero que eles tragam esse recurso para a versão do macOS.
gman

Respostas:

7

Para ter dois Chrome em execução ao mesmo tempo, você precisa criar um segundo aplicativo executável do Google Chrome.

Você pode criar esse segundo aplicativo executando o seguinte script. Vem deste site , copio e colo para conveniência dos leitores:

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

Salve-o em um arquivo (digamos create_second_chrome.shna pasta Desktop), abra o shell e execute-o passando como parâmetro a pasta de perfil que você deseja associar ao segundo aplicativo Chrome. Será chamado Google Chrome profile_folder_name. Vamos supor Google Chrome Development:

$ cd ~/Desktop
$ . create_second_chrome.sh Development

Agora você pode iniciar a nova versão do Chrome ( Google Chrome Development) a partir do ~/Applicationsdiretório Você pode definir um ícone diferente clicando com o botão direito do mouse no aplicativo e selecionando 'Obter informações'. Você verá que esta nova versão tem seu próprio ícone no dock e pode ser acoplada lá, se necessário.

Maverik
fonte
1
Isso não parece funcionar. Eu criei um novo perfil para me chamou Developmentem Settings -> Users. Isto criou o diretório ~/Library/Application Support/Google/Chrome/Profile 2. No entanto, a execução open -a "Google Chrome" --args --profile-directory="Profile 2"ainda abre o perfil antigo / original, como posso ver pelo avatar no canto superior direito.
Andrew Ferrier
@AndrewFerrier Você tentou fechar o command + qChrome e reabri-lo por meio do fluxo de trabalho? Isso funciona comigo.
Maverik
1
funciona se você fizer isso, sim (por exemplo, se o Chrome não for iniciado, ele abrirá o perfil desejado). Mas se um perfil já estiver iniciado, a execução desse comando reabrirá uma janela para esse perfil, independentemente de qual perfil esteja especificado. Isso não ajuda na pergunta, pois o objetivo é abrir os dois simultaneamente.
Andrew Ferrier
@AndrewFerrier Obrigado pela sua edição, agora a resposta é melhor! Espero que tenha ajudado! Luca
Maverik
1
nem eu agora! Parece que cometi um erro, parece bom agora. Vai deixá-lo correr um pouco, ver se eu continuar a enfrentar problemas ...
Andrew Ferrier
4

UPDATE : Eu não uso mais esse método. Em vez disso, agora uso o Epichrome, que é muito mais fácil de usar e funciona melhor. Postei uma nova resposta com essas informações e sugiro que as pessoas as usem.


Resposta original com instruções manuais:

Eu tentei o script do @Maverick e funcionou parcialmente (obrigado!), Mas tive algumas dificuldades. O principal problema é que a cópia embrulhada do Chrome, embora seja independente, tenha seu próprio ícone e funcione corretamente por si só, não pode abrir URLs enviadas de outros aplicativos, portanto, não funciona com o Choosy.

Aqui está o que funcionou para mim: obter um segundo Chrome que pode abrir links via Choosy, por exemplo:

  1. Copie Library/Application Support/Google/Chromepara Library/Application Support/Google/ChromePersonalno seu diretório pessoal. Isso é opcional; Eu queria transferir meus perfis de usuário do Chrome para a nova instância. Mas se você está bem começando de novo, pode pular isso.
  2. Copie Google Chrome.apppara outro local. Eu usei /Applications/Google Chrome Personal.app.
  3. Copie meu script wrapper.sh (abaixo) no Contents/MacOSdiretório do aplicativo .
  4. chmod +x wrapper.sh
  5. Modifique Contents/Info.plistneste novo aplicativo para:
    • aponte para o script do wrapper (configure o CFBundleExecutablevalor para wrapper.sh)
    • ter um único CFBundleIdentifier(basta adicionar "Pessoal" ao valor existente)
    • ter um único CFBundleName(basta adicionar "Pessoal" ao valor existente)
    • ter um único CFBundleDisplayName(basta adicionar "Pessoal" ao valor existente)

Aqui está o meu script wrapper.sh modificado. Coloque-o em /Applications/Google\ Chrome\ Personal.app/Contents/MacOS/wrapper.she edite o Info.plist como na etapa 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"

Uma ressalva: acredito que o recurso de atualização automática do Chrome interromperá isso sempre que o Chrome for atualizado, o que significa que você precisa refazer as etapas 3 e 4 após cada atualização do Chrome.

jbyler
fonte
Seguindo estas instruções, recebo um aplicativo que não será iniciado
Tom J Nowell
Desculpe @TomJNowell! Acho que devo ter perdido um passo. Provavelmente você precisa chmod 755 o script wrapper.sh? O meu é executável. Se você tentar isso e resolver o problema, avise-me para que eu possa atualizar a resposta?
jbyler
chmod + x fez o truque
Tom J Nowell
Você pode impedir atualizações automáticas alterando a KSProductIDchave Info.plist. Se você for para a página sobre, verá um "KSOmahaServer app 'com.google.ChromePersonal' status do nó de informações 'error-unknownApplication'. ..."; erro ao tentar atualizar manualmente.
WebXL
Acompanhamento: as atualizações parecem estar desativadas para mim sem alterações KSProductID. Ele diz que há uma atualização disponível, então clico em Reiniciar e é reiniciado para a mesma versão. Não tenho as Atualizações Automáticas para Todos os Usuários ativadas, talvez por isso ou pelo fato de ter renomeado o executável.
WebXL
1

Nenhuma dessas respostas funcionou para mim de maneira abrangente no Mac OS X Yosemite. Aqui está minha solução, que fornece várias instâncias, um menu de inicialização do dock para as instâncias e ícones diferentes para cada instância. Quando você executa o script, ele passa automaticamente por todos os seus perfis e depois diz o que fazer em seguida.

#!/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 ícones, você pode usar qualquer PNG (ou provavelmente muitos outros formatos).

Os avatares do Chrome aos quais você já pode estar acostumado estão localizados em "~ / Biblioteca / Suporte a aplicativos / Google / Chrome / Avatars" - avatar_ninja.png etc.

Ou faça o seu próprio, ou use um dos inúmeros sites de ícones - eu gosto do Easyicon .

Além disso, isso parece ser útil - como recuperar avatares no Chrome para alternar os perfis de usuário com mais facilidade - para facilitar a identificação rápida (não testada) das janelas abertas.

Uma coisa que ainda não está funcionando é a capacidade de atribuir diferentes instâncias de cromo do perfil de usuário a áreas de trabalho específicas. Isso ocorre porque, se o atributo usado para fazer isso for alterado, o navegador não poderá mais efetuar login automaticamente nesse perfil quando o navegador iniciar. Fiz uma postagem no fórum e um relatório de bug sobre esse problema; também é um problema para navegadores específicos do site; portanto, o projeto chrome-ssb-osx pode fazê-lo funcionar em algum momento. Eu não tenho os 10 pontos de reputação necessários para incluir mais de 2 links nas postagens aqui (ajuda! :-), portanto, você precisará verificar os links para essas coisas no script acima (seção "Esta seção desativada" )

Daniel J Clark
fonte
Uma vez que este está a ficar um pouco complexo, coisas novas irão todos para github.com/djbclark/chrome-apartheid
Daniel J Clark
1

Agora uso o Epichrome para esse fim. O Epichrome foi projetado para criar navegadores específicos do site, mas você pode configurar as regras de filtragem e o ícone da maneira que desejar, para que seja perfeitamente capaz de criar um segundo Chrome com seu próprio perfil e ícone de dock separados. Os navegadores criados pelo Epichrome funcionam com o mecanismo de atualização do Google, para que todos se mantenham atualizados com a versão mais recente do Chrome.

Ele possui uma GUI simples - não é necessária codificação ou recompilação do Chrome. Eu acho que é uma solução bastante sólida para esse problema.

jbyler
fonte
-2

Você já experimentou a versão beta ? Não posso testar agora, por isso não tenho 100% de certeza de que é um ícone diferente - e, se não, você também pode experimentar o "canary build" -

Não deve estar tão distante da versão oficial em termos de renderização, para que você possa confiar no que vê. E você pode tornar seu perfil de desenvolvedor o padrão.

Loïc Wolff
fonte
Não sei ao certo o que você está sugerindo. Você está sugerindo executar duas versões diferentes do Chrome ao mesmo tempo? (estável e beta). Eu realmente prefiro usar estável em todos os aspectos. Obrigado pela sugestão, no entanto.
Andrew Ferrier
FWIW, eu baixei Chrome do canal Beta e tem o mesmo ícone, então, infelizmente, isso não me ajuda muito lá também ...
Andrew Ferrier
Para sua informação, o Chrome Canary realmente tem um ícone diferente, mas é menos estável (embora funcione de maneira geral).
Studgeek #