269

I use the new built-in "Users" feature of Chrome to switch between Home/Work accounts easily. However, Chrome remembers the "last" user profile you had selected when launching new windows. This is a problem if I close down my "Home" profile last, because when I then click the Email shortcut on my taskbar, because it goes to mail.mycompany.com using my Home profile, and I'm not logged in.

I'd like to change the shortcut to the company webmail to pass a switch that tells Chrome to always start as the "Default" user, regardless of the last one used.

Note: I have tried the command-line parameter --user-data-dir=…, and this seems to do something very different, completely isolated from the Users functionality built in to Chrome. It's possible I'm using it wrong, but please test this before assuming it does the same thing and posting an answer ;-)

12 Answers12

254

The command line argument you're looking for is --profile-directory=Default.

Here's the complete command line for Mac OS X:

open -a "Google Chrome" --args --profile-directory=Default

Note: The open command therefore does not launch new instances, as many applications will not be able to deal with multiple instances running as the same user. However there's the -n argument to do that anyway, but it may break the application.

And for Linux:

google-chrome --profile-directory=Default

It expects the internal names of the profiles: My second profile, named "Lemonade" by Chrome, would be --profile-directory="Profile 1".

Determine the profile name by trial and error, or looking in the Local State file (see Justin Buser's answer).

On Mac OS X, the directories are located in ~/Library/Application Support/Google/Chrome. In Linux they are located in ~/.config/google-chrome. In Win7 they are located in %USERPROFILE%\AppData\Local\Google\Chrome\User Data.

kenorb
  • 26,615
Daniel Beck
  • 111,893
79

GUI method with proper icon (for Windows)

  1. Type chrome://settings/ in address bar (or Menu > Settings)
  2. Select Customize your Chrome profile option
  3. Scroll to the bottom and toggle Create desktop shortcut

[1]:

Optional Switch to any other profile & repeat steps 1-4

This creates a shortcut icon to your profile with the correct picture in the icon too. You can drag multiple profiles to your Windows taskbar. The shortcut on Windows 7 icon points to

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="Default"
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="Profile 1"
and so on...
user
  • 1,217
18

Another, albeit less convenient method of choosing which profile will launch is to edit the Local State file in the Chrome User Data directory and search for "last_used": if you change the value it lists to a different Profile that's the one that will open the next time you launch chrome normally (unless of course you're using the switch mentioned above).

I only mention this in case anyone is interested in a more in-depth solution, that Local State file contains a JSON formatted list of settings that some might find useful.

Justin Buser
  • 1,267
  • 11
  • 14
10

--profile-directory is useless if you already have another profile opened or the last window you closed is attributed/was logged in with another profile.

I have app shortcuts with one profile. The apps shortcuts have --profile-directory="Profile 3" plus the --app="..

The default profile shortcut has --profile-directory="Default".

Both profiles get messed up. Extensions and the default shortcut that I use for daily browsing.

Flak DiNenno
  • 5,208
Marius
  • 111
9

on OSX, using the open -a "Google Chrome"... version didn't work for me.

But it works when using the full path:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --profile-directory="Profile 1" "<url>"
jobwat
  • 329
5

I wrote a script to run Chrome with given profile, selected by the user-friendly profile name (rather than the profile directory name). This is for Linux, specifically Debian 11. We could adjust it for other systems with reference to other answers. It uses jq.

The first argument is the profile name, the rest are passed along to the google-chrome command-line.

Example usage:

chrome_profile "Profile Name" https://google.com/

chrome_profile:

#!/bin/bash -eua
profile_name=$1; shift
local_state=~/.config/google-chrome/Local\ State
profile_key=`< "$local_state" jq -r '
        .profile.info_cache | to_entries | .[] |
        select(.value.name == env.profile_name) | .key'`
[ -n "$profile_key" ]
google-chrome --profile-directory="$profile_key" "$@"

We can list the keys and names of all the profiles like this:

chrome_profiles_list:

< ~/.config/google-chrome/Local\ State \
jq -r '.profile.info_cache | to_entries | map(.key + ": " + .value.name) | .[]' |
sort -k1,1 -k2,2n
sampi
  • 212
Sam Watkins
  • 958
  • 11
  • 15
5

I've just tested this with 4 profiles with Chrome Version 22.0.1229.94 m:

Respectfully, I think the confusion is this:

  • If you close all instances of chrome and then launch Chrome with a simple chrome.exe without any switches, then this new instance that is launched will open with the profile of the very last Chrome window/instance that was closed.

  • If however, you click on a shortcut that you've created using the above --profile-directory method, an instance/window with the appropriate login regardless of which window(s)/ instances/ profiles are currently running, and/or which was the last one shutdown.
  • Flak DiNenno
    • 5,208
    4

    Here's a nifty way to open chrome on mac with a brand new user profile:

    open -n -a "Google Chrome" --args --user-data-dir=$(mktemp -d)
    
    stevec
    • 973
    2

    This still works with Chrome Windows as of 4/24/2013. I created a shortcut for each of the 3 profiles I routinely switch between, and I assigned each shortcut a unique "shortcut key".

    One additional nicety -- your profile user icon is in the profile subdirectory, ex: %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Profile 1. I assigned my profile user icon to the windows shortcut.

    I can't reliably put the 3 shortcuts separately on the Win7 taskbar though; win 7 seems to lose count after 2.

    1

    As of April 2016 on Yosemite, I was able to locate Google Apps for all of my 15 Google Profiles (yes, 15). Some were in ~/Applications/Chrome Apps, though we have been told that these are going away.

    To find all of them however I had to do this:

    1. Go to ~/Library/Application Support/Google/Chrome.
    2. In Spotlight search on kind:app
    3. Find 300kb "Applications" with names like Gmail (username).
    4. Copy the ones you want and rename them, then put in your Applications folder of choice.
    Gray
    • 273
    1

    Sam Watkins's answer above did not quite work for me, as I have Chromium [specifically version 90.0.4430.212 (Developer Build) built on Debian 10.9, running on Debian 10.9 (32-bit) ] instead of Google Chrome installed, I also had to make a couple of other changes. Credit to Sam's answer for the core functionality. Here's my adapted solution, generally copied from theirs, I note the changes I made afterwards.


    This is for Linux. It uses jq. You may need to run chmod 777 ~/.config/chromium/Local\ State once, before using the scripts.

    The first argument is the profile name, the rest are passed along to the chromium command-line.

    If only the profile name is given, it opens on their default home page.

    If run without any arguments, it opens chromium offering a choice of known profiles. (But if chromium is already running it just effectively does nothing. Of course if it's already running you can just select another profile by clicking your profile's icon next to the address bar.)

    Example usage:

    chromium_profile "Profile Name" https://google.com/

    chromium_profile:

    #!/bin/bash -eu
    profile_name=$1; shift
    local_state=~/.config/chromium/Local\ State
    profile_key=`< "$local_state" jq -r '
        .profile.info_cache | to_entries | .[] |
        select(.value.name == "'"$profile_name"'") | .key'`
    [ -n "$profile_key" ]
    chromium --profile-directory="$profile_key" "$@"
    

    We can list the keys and names of all the profiles like this:

    chromium_profiles_list:

    < ~/.config/chromium/Local\ State \
    jq -r '.profile.info_cache | to_entries | map(.key + ": " + .value.name) | .[]' |
    sort -k1,1 -k2,2n
    

    Specifically to adapt Sam's answer I had to

    • change the paths from google-chrome to chromium. For other browsers based on chrome/chromium (e.g. vivaldi) a similar change would probably work. You can definitively find the path by running find ~ -name Local\ State
    • change permissions on my ~/.config/chromium/Local\ State file to allow access - since only my user and root exist on the machine I just ran

    chmod 777 ~/.config/chromium/Local\ State

    • Although jq apparently installed fine, this part of Sam's code just returned empty strings for me: env.profile_name .For some reason the environment variable did not pass through. So I use some really horrible quoting to get the variable's value to be inserted directly into the jq command string instead.
    1

    I think the newer version of chrome has already solved this problem. When you signin with a new user in Chrome, it automatically creates a shortcut icon for that user on your desktop.