Есть ли простой способ иметь отдельные значки дока для разных профилей Chrome?

Я использую Google Chrome версии 22 на OS X 10.8. Я использую отдельные профили пользователей (созданные с помощью встроенной функции Chrome в Settings->Users) для «обычного» просмотра веб-страниц и веб-разработки, которой я занимаюсь. Я запускаю свой профиль веб-разработки из обычного окна профиля Chrome, щелкнув аватарку в верхнем левом углу:

введите описание изображения здесь

На данный момент оба этих профиля имеют один и тот же значок в доке. Тем не менее, я бы предпочел, чтобы каждый профиль Chrome имел свой собственный значок в доке с окнами, управляемыми отдельно, и в идеале, чтобы значки в доке каким-то образом различались. Это легко возможно? Под «простым» я подразумеваю такие вещи, как восстановление Chrome из исходного кода, которые я не рассматриваю.

Примечание . Я хотел бы использовать одну и ту же стабильную версию Chrome для обоих профилей. Было бы нормально, если бы одна и та же версия была установлена ​​дважды, если их можно хранить отдельно, а значок док-станции различать.

Я просто хочу отметить, что это стандартная функция Chrome в Windows (по крайней мере, в v64). Когда вы создаете новый профиль в Chrome, Settings->UsersChrome предлагает «Создать ярлык на рабочем столе для этого пользователя», и если вы нажмете «Да», он создаст ярлык, который представляет собой значок Chrome со значком профиля пользователя Chrome, наложенным в правом нижнем углу. Когда приложение запущено, у каждого профиля есть свой значок на панели задач. Я упоминаю об этом только потому, что надеюсь, что они в конечном итоге добавят эту функцию в версию для macOS.

Ответы (4)

Для одновременного запуска двух Chrome вам необходимо создать второе работающее приложение Google Chrome.

Вы можете создать это второе приложение, запустив следующий скрипт. Это взято с этого сайта , я копирую и вставляю для удобства читателей:

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

Сохраните его в файле (скажем, create_second_chrome.shв папке «Рабочий стол»), откройте оболочку и запустите его, передав в качестве параметра папку профиля, которую вы хотите связать со вторым приложением Chrome. Он будет называться Google Chrome profile_folder_name. Предположим Google Chrome Development:

$ cd ~/Desktop
$ . create_second_chrome.sh Development

Теперь вы можете запустить новую версию Chrome ( Google Chrome Development) из ~/Applicationsкаталога. Вы можете установить другой значок, щелкнув правой кнопкой мыши приложение и выбрав «Получить информацию». Вы увидите, что эта новая версия имеет собственный значок в доке и при необходимости может быть прикреплена к нему.

Кажется, это не работает. Я создал для себя новый профиль под Developmentназванием Settings -> Users. Это создало каталог ~/Library/Application Support/Google/Chrome/Profile 2. Однако выполнение open -a "Google Chrome" --args --profile-directory="Profile 2"по-прежнему открывает старый/исходный профиль, как я могу судить по аватару в правом верхнем углу.
@AndrewFerrier Вы пытались закрыть command + qChrome и снова открыть его с помощью рабочего процесса? Это работает со мной.
работает, если так сделать, то да (т.е. если хром вообще не запущен, то открывает нужный профиль). Но если один профиль уже запущен, выполнение этой команды повторно открывает окно для этого профиля, независимо от того, какой профиль указан. Это не помогает с вопросом, поскольку цель состоит в том, чтобы оба были открыты одновременно.
@AndrewFerrier Спасибо за ваше редактирование, теперь ответьте лучше! Надеюсь, это помогло вам! Лука
@AndrewFerrier Хотели бы вы иметь две разные иконки? Поправьте меня, если я ошибаюсь, но значки должны быть единственной проблемой, верно?
@AndrewFerrier Я пытался изменить значок ( command+ iв новом приложении и перетащить справа от имени разработки Google Chrome) второго Chrome, и у меня нет этой проблемы.
я тоже сейчас! Кажется, я ошибся, теперь все в порядке. Оставлю его на некоторое время, посмотрим, будут ли проблемы продолжаться...
Хотя копирование значка работало в переключателе приложений Finder и OSX, похоже, оно не работало в Activity Monitor или Witch. Я предполагаю, что эти инструменты смотрят на процесс, а не на набор приложений для значка. Любые мысли о том, как это исправить?
Кажется, это работает во всех случаях, кроме перетаскивания ссылок. При поиске «настоящего» Chrome открывает их, даже если целью перетаскивания был другой экземпляр приложения.
Я вижу что-то похожее на @AndreyTatarinov. Если я попытаюсь отправить URL-адрес в обернутый Chrome, он ненадолго откроет то, что выглядит как еще один экземпляр обернутого Chrome, который сразу же завершает работу. Обернутый Chrome открывает новое окно со страницей по умолчанию (а не URL-адресом, который я пытался открыть). Это означает, что обернутый Chrome не работает, например, с Choosy. Я думаю, что это как-то связано с тем, что LaunchServices не распознает обернутую версию как независимое приложение, но я попытался добавить Info.plist с другим CFBundleIdentifier, и это не решило проблему.
Привет @Maverik, я думаю, что этот скрипт ошибается в том, на что --user-data-dirуказывает опция. Он указывает на то, что вызывается PROFILE_DIR , /Users/$USER/Library/Application Support/Google/Chrome/${PROFILE_NAME}как если бы профиль был пользователем Chrome. Но на самом деле это должно быть на один уровень выше. Я думаю, вы должны назвать это CHROME_DATAили INSTANCE_DATAи вы должны поместить его в /Users/$USER/Library/Application Support/Google/Chrome${PROFILE_NAME}: рядом с существующим Chromeкаталогом, а не внутри него.
Я столкнулся с проблемой, когда значок случайным образом возвращался к значению по умолчанию. И мне нужно было, чтобы имя процесса было другим, чтобы использовать некоторые другие скрипты. Я добавил символическую ссылку в приложение Chrome, чтобы исправить это. Замените вызов exec в сценарии ответа на это:# 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"

ОБНОВЛЕНИЕ : я больше не использую этот метод. Вместо этого я теперь использую Epichrome , который намного проще в использовании и работает лучше. Я опубликовал новый ответ с этой информацией и предлагаю людям использовать его вместо этого.


Оригинальный ответ с ручными инструкциями:

Я попробовал скрипт от @Maverick, и он частично сработал (спасибо!), но столкнулся с некоторыми трудностями. Основная проблема заключается в том, что обернутая копия Chrome хоть и независима, но имеет собственную иконку и корректно работает сама по себе, но не может открывать URL-адреса, отправленные из других приложений, поэтому не работает с Choosy.

Вот что сработало для меня, чтобы получить второй Chrome, который может открывать ссылки через Choosy, например:

  1. Скопируйте Library/Application Support/Google/Chromeв Library/Application Support/Google/ChromePersonalсвой домашний каталог. Это необязательно; Я хотел перенести свои профили пользователей Chrome в новый экземпляр. Но если вы согласны начать заново, вы можете пропустить это.
  2. Скопируйте Google Chrome.appв другое место. я использовал /Applications/Google Chrome Personal.app.
  3. Скопируйте мой скрипт wrapper.sh (ниже) в Contents/MacOSкаталог приложения.
  4. chmod +x wrapper.sh
  5. Измените Contents/Info.plistв этом новом приложении, чтобы:
    • укажите на скрипт-оболочку (установите CFBundleExecutableзначение wrapper.sh)
    • иметь уникальный CFBundleIdentifier(просто добавьте «Личное» к существующему значению)
    • иметь уникальный CFBundleName(просто добавьте «Личное» к существующему значению)
    • иметь уникальный CFBundleDisplayName(просто добавьте «Личное» к существующему значению)

Вот мой модифицированный скрипт wrapper.sh. Поместите его в , /Applications/Google\ Chrome\ Personal.app/Contents/MacOS/wrapper.shа затем отредактируйте Info.plist, как на шаге 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"

Одно предостережение: я считаю, что функция автоматического обновления Chrome сломает это каждый раз при обновлении Chrome, а это означает, что вам нужно повторно выполнять шаги 3 и 4 после каждого обновления Chrome.

Следуя этим инструкциям, я получаю приложение, которое не запускается
Прости @TomJNowell! Наверное, я пропустил шаг. Вероятно, вам нужно выполнить chmod 755 для сценария wrapper.sh? Мой исполняемый. Если вы попробуете это, и это решит вашу проблему, дайте мне знать, чтобы я мог обновить ответ?
chmod +x сделал свое дело
Вы можете предотвратить автоматическое обновление, изменив KSProductIDключ в Info.plist. Если вы перейдете на страницу сведений, вы увидите статус информационного узла «приложение KSOmahaServer 'com.google.ChromePersonal' 'error-unknownApplication'. ..."; ошибка при попытке обновления вручную.
Последующие действия: кажется, что обновления для меня отключены без изменения KSProductID. Он говорит, что доступно обновление, затем я нажимаю «Перезапустить», и он перезапускается с той же версией. У меня не включены автоматические обновления для всех пользователей, возможно, причина в этом или в том, что я переименовал исполняемый файл.

Я сейчас использую Epichrome для этой цели. Epichrome предназначен для создания браузеров для конкретных сайтов, но вы можете настроить правила фильтрации и значок по своему усмотрению, поэтому он вполне способен просто создать второй Chrome с собственным отдельным профилем и значком в доке. Браузеры, созданные Epichrome, работают с механизмом обновлений Google, поэтому все они будут обновляться до последней версии Chrome.

Он имеет простой графический интерфейс — не требуется кодирование или перекомпиляция Chrome. Я думаю, что это довольно надежное решение этой проблемы.

Вы сравнивали Epichrome с Detangle ?

Ни один из этих ответов не работал у меня всесторонне под Mac OS X Yosemite. Вот мое решение, которое дает вам несколько экземпляров, меню запуска док-станции для экземпляров и разные значки для каждого экземпляра. Когда вы запустите скрипт, он автоматически просмотрит все ваши профили, а затем скажет вам, что делать дальше.

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

Для иконок вы можете использовать любой PNG (или, возможно, многие другие форматы).

Хромированные аватары, к которым вы, возможно, уже привыкли, находятся в папке «~/Library/Application Support/Google/Chrome/Avatars» — avatar_ninja.png и т. д.

Или сделайте свой собственный, или воспользуйтесь одним из многочисленных сайтов с иконками — мне нравится Easyicon .

Также это выглядит, возможно, полезным — Как вернуть аватары в Chrome для более простого переключения профилей пользователей — чтобы упростить быструю идентификацию открытых окон (непроверено).

Одна вещь, которая еще не работает, — это возможность назначать разные экземпляры хрома профиля пользователя для определенных рабочих столов. Это связано с тем, что если атрибут, используемый для этого, изменен, браузер больше не сможет автоматически входить в этот профиль при запуске браузера. Я сделал сообщение на форуме и отчет об ошибке по этой проблеме; это также проблема для браузеров для конкретных сайтов, поэтому проект chrome-ssb-osx может заставить это работать в какой-то момент. У меня нет 10 очков репутации, необходимых для размещения здесь более 2 ссылок в сообщениях (помогите! :-), поэтому вам придется посмотреть ссылки на эти вещи в приведенном выше скрипте (раздел «Этот раздел отключен» ).

Поскольку это становится немного сложным, все новые материалы будут отправляться на github.com/djbclark/chrome-apartheid.