Czy istnieje prosty sposób na posiadanie osobnych ikon doków dla różnych profili Chrome?

27

Używam przeglądarki Google Chrome w wersji 22 w systemie OS X 10.8. Używam osobnych profili użytkowników (utworzonych przy użyciu natywnej funkcji Chrome w Settings->Users) do „regularnego” przeglądania stron internetowych i tworzenia stron internetowych. Mój profil rozwoju sieci uruchamiam ze zwykłego okna profilu Chrome, klikając awatar w lewym górnym rogu:

wprowadź opis zdjęcia tutaj

W chwili obecnej oba te profile mają jedną ikonę dokowania. Jednak zdecydowanie wolałbym, aby każdy profil Chrome miał własną ikonę dokowania, z osobnym oknem zarządzanym - i idealnie, aby ikony doków były w jakiś sposób rozróżniane. Czy to jest możliwe? Przez „łatwy” rozumiem, że takie rzeczy jak przebudowa Chrome ze źródła nie są opcją, którą rozważę.

Uwaga : chciałbym użyć tej samej, stabilnej wersji Chrome dla obu profili. Byłoby OK, gdyby ta sama wersja była zainstalowana dwa razy, o ile można je trzymać oddzielnie i wyróżnić ikonę doku.

Andrew Ferrier
źródło
Chcę tylko podkreślić, że jest to standardowa funkcja Chrome w systemie Windows (przynajmniej w wersji 64). Kiedy tworzysz nowy profil w Chrome Settings->UsersChrome pyta „Utwórz skrót na pulpicie dla tego użytkownika”, a jeśli klikniesz „Tak”, tworzy skrót, który jest ikoną Chrome z ikoną profilu Chrome nałożoną w prawym dolnym rogu. Gdy aplikacja jest uruchomiona, każdy profil ma własną ikonę na pasku zadań. Mówię o tym tylko dlatego, że mam nadzieję, że w końcu wprowadzą tę funkcję do wersji macOS.
gman

Odpowiedzi:

7

Aby dwa Chrome działały jednocześnie, musisz utworzyć drugą działającą aplikację Google Chrome.

Możesz utworzyć tę drugą aplikację, uruchamiając następujący skrypt. Pochodzi z tej strony , kopiuję i wklejam dla wygody czytelników:

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

Zapisz go w pliku (powiedzmy create_second_chrome.shw folderze Desktop), otwórz powłokę i uruchom ją, przekazując jako parametr folder profilu, który chcesz powiązać z drugą aplikacją Chrome. To się nazywa Google Chrome profile_folder_name. Załóżmy Google Chrome Development:

$ cd ~/Desktop
$ . create_second_chrome.sh Development

Teraz możesz uruchomić nową wersję Chrome ( Google Chrome Development) z ~/Applicationskatalogu. Możesz ustawić inną ikonę, klikając aplikację prawym przyciskiem myszy i wybierając „Uzyskaj informacje”. Zobaczysz, że ta nowa wersja ma własną ikonę na stacji dokującej i można ją tam zadokować w razie potrzeby.

Maverik
źródło
1
To nie działa. Stworzyłem nowy profil dla siebie nazywa Developmentsię Settings -> Users. To utworzyło katalog ~/Library/Application Support/Google/Chrome/Profile 2. Jednak wykonanie open -a "Google Chrome" --args --profile-directory="Profile 2"nadal otwiera stary / oryginalny profil, co mogę stwierdzić z awatara w prawym górnym rogu.
Andrew Ferrier,
@AndrewFerrier Czy próbowałeś zamknąć command + qChrome i otworzyć go ponownie za pomocą przepływu pracy? Działa ze mną.
Maverik,
1
działa, jeśli to zrobisz, tak (tzn. jeśli Chrome w ogóle się nie uruchomi, otworzy żądany profil). Ale jeśli jeden profil jest już uruchomiony, wykonanie tego polecenia ponownie otwiera okno dla tego profilu, niezależnie od tego, który profil jest określony. To nie pomaga w pytaniu, ponieważ celem jest, aby oba były otwarte jednocześnie.
Andrew Ferrier,
@AndrewFerrier Dziękujemy za edycję, teraz odpowiedz na to lepiej! Mam nadzieję, że to ci pomogło! Luca
Maverik
1
ja też nie jestem teraz! Wygląda na to, że popełniłem błąd, teraz wydaje się OK. Zostawię to na chwilę, sprawdź, czy nadal będę miał problemy ...
Andrew Ferrier,
4

AKTUALIZACJA : Nie używam już tej metody. Zamiast tego używam teraz Epichromu, który jest znacznie łatwiejszy w użyciu i działa lepiej. Opublikowałem nową odpowiedź z tymi informacjami i sugeruję, aby ludzie używali jej zamiast tego.


Oryginalna odpowiedź z instrukcją obsługi:

Wypróbowałem skrypt z @Maverick i częściowo zadziałał (dzięki!), Ale napotkałem pewne trudności. Głównym problemem jest to, że owinięta kopia Chrome, chociaż jest niezależna, ma własną ikonę i działa poprawnie samodzielnie, nie może otwierać adresów URL wysyłanych z innych aplikacji, więc nie działa z Choosy.

Oto, co zadziałało, aby uzyskać drugiego Chrome, który może otwierać linki za pośrednictwem Choosy, na przykład:

  1. Skopiuj Library/Application Support/Google/Chromedo Library/Application Support/Google/ChromePersonalw swoim katalogu domowym. To jest opcjonalne; Chciałem przenieść moje profile użytkowników Chrome do nowej instancji. Ale jeśli wszystko jest w porządku, zaczynając od nowa, możesz to pominąć.
  2. Skopiuj Google Chrome.appdo innej lokalizacji. Kiedyś /Applications/Google Chrome Personal.app.
  3. Skopiuj mój skrypt wrapper.sh (poniżej) do katalogu aplikacji Contents/MacOS.
  4. chmod +x wrapper.sh
  5. Zmodyfikuj Contents/Info.plistw tej nowej aplikacji, aby:
    • wskaż skrypt opakowania (ustaw CFBundleExecutablewartość na wrapper.sh)
    • mają unikalny CFBundleIdentifier(po prostu dodaj „Personal” do istniejącej wartości)
    • mają unikalny CFBundleName(po prostu dodaj „Personal” do istniejącej wartości)
    • mają unikalny CFBundleDisplayName(po prostu dodaj „Personal” do istniejącej wartości)

Oto mój zmodyfikowany skrypt wrapper.sh. Umieść go na, /Applications/Google\ Chrome\ Personal.app/Contents/MacOS/wrapper.sha następnie edytuj Info.plist jak w kroku 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"

Jedno zastrzeżenie: wierzę, że funkcja automatycznej aktualizacji Chrome zepsuje to przy każdej aktualizacji Chrome, co oznacza, że ​​po każdej aktualizacji Chrome musisz ponownie wykonać kroki 3 i 4.

jbyler
źródło
Postępując zgodnie z tymi instrukcjami, otrzymuję aplikację, która nie chce się uruchomić
Tom J Nowell
Przepraszam @TomJNowell! Chyba musiałem przegapić krok. Prawdopodobnie musisz chmod 755 skryptu wrapper.sh? Mój jest wykonywalny. Jeśli spróbujesz, a to rozwiąże problem, daj mi znać, żebym mógł zaktualizować odpowiedź?
jbyler
chmod + x wykonał lewę
Tom J Nowell
Możesz zapobiec automatycznym aktualizacjom, zmieniając KSProductIDklucz w Info.plist. Jeśli przejdziesz na stronę about, zobaczysz „aplikację KSOmahaServer” com.google.ChromePersonal „status węzła informacyjnego” error-unknownApplication ”. ...”; błąd podczas próby ręcznej aktualizacji.
webXL
Dalsze działania: Wydaje mi się, że aktualizacje są wyłączone bez zmian KSProductID. Mówi, że jest dostępna aktualizacja, a następnie klikam Uruchom ponownie i ponownie uruchomi się w tej samej wersji. Nie mam włączonych automatycznych aktualizacji dla wszystkich użytkowników, więc być może dlatego zmieniłem nazwę pliku wykonywalnego.
webXL
1

Żadna z tych odpowiedzi nie działała dla mnie kompleksowo w systemie Mac OS X Yosemite. Oto moje rozwiązanie, które daje wiele instancji, menu uruchamiania doków dla instancji i różne ikony dla każdej instancji. Po uruchomieniu skryptu przejdzie on automatycznie przez wszystkie profile, a następnie podpowie, co dalej.

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

W przypadku ikon możesz użyć dowolnego PNG (lub prawdopodobnie wielu innych formatów).

Chromowane awatary, do których być może już jesteś przyzwyczajony, znajdują się w „~ / Library / Application Support / Google / Chrome / Avatars” - avatar_ninja.png itp.

Albo stwórz własną, lub skorzystaj z jednej z licznych ikon witryn - lubię Easyicon .

Wydaje się to również przydatne - jak odzyskać awatary w Chrome, aby łatwiej przełączać profile użytkowników - aby ułatwić szybkie identyfikowanie otwartych okien (niesprawdzone).

Jedną z rzeczy, która jeszcze nie działa, jest możliwość przypisania różnych wystąpień chrome profilu użytkownika do określonych komputerów stacjonarnych. Wynika to z faktu, że jeśli atrybut użyty do tego celu zostanie zmieniony, przeglądarka nie będzie już mogła automatycznie logować się do tego profilu podczas uruchamiania przeglądarki. Napisałem post na forum i raport o błędach na ten temat; jest to również problem dla przeglądarek specyficznych dla witryny, więc projekt chrome-ssb-osx może w pewnym momencie zacząć działać. Nie mam 10 punktów reputacji potrzebnych do umieszczenia więcej niż 2 linków w postach tutaj (pomoc! :-), więc musisz spojrzeć na linki do tych rzeczy w powyższym skrypcie (sekcja „Ta sekcja wyłączona”) ).

Daniel J Clark
źródło
Ponieważ robi się to trochę skomplikowane, wszystkie nowe rzeczy trafią na github.com/djbclark/chrome-apartheid
Daniel J Clark
1

Teraz używam Epichrome do tego celu. Epichrome jest przeznaczony do tworzenia przeglądarek specyficznych dla witryny, ale możesz skonfigurować reguły filtrowania i ikonę w dowolny sposób, dzięki czemu jest w stanie stworzyć drugiego Chrome z osobnym profilem i ikoną dokowania. Przeglądarki utworzone w Epichrome działają z mechanizmem aktualizacji Google, więc wszystkie będą na bieżąco z najnowszą wersją Chrome.

Ma prosty GUI - nie wymaga kodowania ani ponownej kompilacji Chrome. Myślę, że to całkiem solidne rozwiązanie tego problemu.

jbyler
źródło
-2

Czy próbowałeś wersji beta ? Nie mogę teraz przetestować, więc nie jestem w 100% pewien, że to inna ikona - a jeśli nie, możesz także wypróbować „wersję kanaryjską” -

Pod względem renderowania nie powinno być tak daleko od oficjalnej wersji, abyś mógł zaufać temu, co widzisz. Możesz też ustawić profil programisty jako domyślny.

Loïc Wolff
źródło
Nie jestem pewien, co sugerujesz. Czy sugerujesz jednoczesne uruchamianie dwóch różnych wersji Chrome? (stabilny i beta). Naprawdę wolałbym używać stabilnego na całej planszy. Dziękuję za sugestię.
Andrew Ferrier,
FWIW, pobrałem Chrome z kanału Beta i ma tę samą ikonę, więc niestety to mi też nie pomaga ...
Andrew Ferrier
Do Twojej wiadomości, Chrome Canary ma inną ikonę, ale jest mniej stabilny (choć ogólnie działa).
studgeek