是否有一种简单的方法来为不同的Chrome个人资料设置单独的停靠图标?


27

我在OS X 10.8上使用Google Chrome版本22。我使用单独的用户个人资料(使用中的本机Chrome工具创建Settings->Users)来进行“常规”网络浏览以及进行的网络开发。我从常规的Chrome配置文件窗口中启动我的Web开发配置文件,方法是单击左上角的头像:

在此处输入图片说明

目前,这两个配置文件都共享一个停靠图标。但是,我更希望每个Chrome浏览器配置文件都具有自己的停靠图标,并分别管理窗口-最好以某种方式区分停靠图标。这容易吗?“轻松”是指我不会考虑从源代码重建Chrome之类的事情。

注意:我想为两个配置文件使用相同,稳定的Chrome版本。可以安装两次相同的版本,只要它们可以分开放置并区分停靠图标就可以了。


我只想指出这是Windows上Chrome的标准功能(至少在v64中)。当您在Chrome中创建新的配置文件时,Chrome会Settings->Users询问“为此用户创建桌面快捷方式”,如果您单击“是”,它会创建一个快捷方式,即Chrome图标,该用户的Chrome配置文件图标覆盖在右下角。当应用程序运行时,每个配置文件在任务栏中都有其自己的图标。我之所以提出这个建议,是因为我希望他们最终将这一功能引入macOS版本。
gman

Answers:


7

要同时运行两个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,在Desktop文件夹中),打开外壳程序并通过将要关联到第二个Chrome应用程序的配置文件文件夹作为参数来执行它。它将被称为Google Chrome profile_folder_name。假设Google Chrome Development

$ cd ~/Desktop
$ . create_second_chrome.sh Development

现在,您可以Google Chrome Development~/Applications目录启动新版本的Chrome()。您可以通过右键单击应用程序并选择“获取信息”来设置其他图标。您将看到此新版本在扩展坞上具有其自己的图标,可以根据需要将其停靠在该位置。


1
这似乎不起作用。我创建了一个新的配置文件为自己所谓的DevelopmentSettings -> Users。这创建了目录~/Library/Application Support/Google/Chrome/Profile 2。但是,执行open -a "Google Chrome" --args --profile-directory="Profile 2"仍然会打开旧的/原始的配置文件,正如我从右上角的头像所看到的那样。
安德鲁·费里尔

@AndrewFerrier您是否尝试过关闭command + qChrome并通过工作流程重新打开它?它和我一起工作。
Maverik 2012年

1
如果您这样做的话,它可以工作,是的(例如,如果Chrome根本没有启动,它将打开所需的配置文件)。但是,如果已经启动了一个配置文件,则不管指定了哪个配置文件,执行该命令都会重新打开该配置文件的窗口。这对问题没有帮助,因为目标是同时打开两个对象。
安德鲁·费里尔

@AndrewFerrier感谢您的编辑,现在回答更好!希望对您有所帮助!卢卡
马维里克

1
我现在也不是!似乎我弄错了,现在看来还可以。将使它运行一段时间,看看我是否仍然遇到问题...
Andrew Ferrier 2012年

4

更新:我不再使用此方法。相反,我现在使用Epichrome,它易于使用且效果更好。我用此信息发布了新答案,建议人们改用它。


原始答案和手册说明:

我尝试了@Maverick的脚本,但部分起作用(谢谢!),但遇到了一些困难。主要问题在于,Chrome的包装后的副本虽然是独立的,但具有自己的图标,并且可以单独正常运行,无法打开从其他应用程序发送的URL,因此不适用于Choosy。

这是我的工作方式,例如,获得另一个可以通过Choosy打开链接的Chrome:

  1. 复制Library/Application Support/Google/ChromeLibrary/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放在第4步,然后编辑Info.plist。

#!/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更新时中断此操作,这意味着您需要在每次Chrome更新后重新执行步骤3和4。


按照这些说明,我得到了一个不会启动的应用程序
Tom J Nowell

抱歉@TomJNowell!我想我一定错过了一步。可能您必须chmod 755 wrapper.sh脚本?我的是可执行的。如果您尝试这样做并为您解决了问题,请告诉我,以便我更新答案?
jbyler

chmod + x达到了目的
Tom J Nowell

您可以通过更改中的KSProductID键来阻止自动更新Info.plist。如果转到“关于”页面,则会看到“ KSOmahaServer应用程序'com.google.ChromePersonal'信息节点状态为'error-unknownApplication'... ...”;尝试手动更新时出现错误。
webXL

后续行动:我似乎没有更改就禁用了更新KSProductID。它说有可用的更新,然后单击“重新启动”,然后重新启动为同一版本。我没有为所有用户启用自动更新,所以也许这就是原因或我已将可执行文件重命名。
webXL

1

在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(或可能的许多其他格式)。

您可能已经习惯使用的Chrome头像在“〜/ Library / Application Support / Google / Chrome / Avatars”下-avatar_ninja.png等。

或自己制作,或使用众多图标网站之一-我喜欢Easyicon

这似乎也很有用- 如何在Chrome中取回头像以更轻松地切换用户个人资料 -使打开的窗口更容易快速识别(未试用)。

尚无法解决的一件事就是能够将不同的用户个人资料Chrome实例分配给特定的桌面。这是因为如果更改了用于执行此操作的属性,则在浏览器启动时,浏览器将不再能够自动登录该配置文件。我已经在这个问题上发表了论坛帖子和错误报告;对于特定于站点的浏览器来说,这也是一个问题,因此chrome-ssb-osx项目可能会在某个时候使它正常工作。我没有10个信誉点,需要在此处的帖子中包含2个以上的链接(帮助!:-),因此您必须在上面的脚本中查看指向这些内容的链接(“已禁用此部分”部分) )。


由于这变得有些复杂,因此所有新内容都将发布到github.com/djbclark/chrome-apartheid
Daniel J Clark

1

我现在将Epichrome用于此目的。Epichrome是专为创建特定于站点的浏览器而设计的,但是您可以根据需要设置过滤规则和图标,因此,它完全可以创建带有其自己的单独配置文件和停靠图标的第二个Chrome。由Epichrome创建的浏览器可以与Google的更新机制配合使用,因此它们都将始终与最新版本的Chrome保持同步。

它具有简单的GUI,无需对Chrome进行编码或重新编译。我认为这是解决此问题的可靠方法。


-2

您是否尝试过Beta版本?我目前无法测试,所以我不能100%确定它是其他图标-如果没有,您也可以尝试“ canary build”-

就渲染而言,它与官方版本的距离应该不算太远,这样您就可以相信自己看到的内容。您可以将您的开发者资料设为默认资料。


我不清楚您的建议。您是否建议同时运行两个不同版本的Chrome?(稳定版和Beta版)。我真的很想全面使用稳定。还是)感谢你的建议。
安德鲁·费里尔

FWIW,我从Beta通道下载了Chrome,它具有相同的图标,因此很遗憾,该图标也对我没有太大帮助...
Andrew Ferrier 2012年

仅供参考,Chrome Canary实际上有一个不同的图标,但是它的稳定性较差(尽管可以正常使用)。
studgeek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.