." This file is processed by chrome.gyp to generate manpages in the
." build diretory.
.TH @@FILENAME@@ 1 "" "" "USER COMMANDS"

.SH NAME
@@FILENAME@@ \- the web browser from Google

.SH SYNOPSIS
.B @@FILENAME@@
[\fIOPTION\fR] [\fIPATH\fR|\fIURL\fR]

.SH DESCRIPTION
See the Google Chrome help center for help on using the browser.
.IP
<http://www.google.com/support/chrome/>
.PP
This manpage only describes invocation, environment, and arguments.

.SH OPTIONS
@@NAME@@ has hundreds of undocumented command-line flags that are added
and removed at the whim of the developers.  Here, we document relatively
stable flags.
.TP
\fB\-\-user\-data\-dir\fR=\fIDIR\fR
Specifies the directory that user data (your "profile") is kept in.
Defaults to
.I ~/.config/@@CONFDIR@@ .
Separate instances of @@NAME@@ must use separate user data directories;
repeated invocations of @@FILENAME@@ will reuse an existing process for
a given user data directory.

.TP
\fB\-\-app\fR=\fIURL\fR
Runs
.I URL
in "app mode": with no browser toolbars.

.TP
\fB\-\-incognito\fR
Open in incognito mode.

.TP
\fB\-\-proxy-server\fR=\fIhost:port\fR
Specify the HTTP/SOCKS4/SOCKS5 proxy server to use for requests.  This
overrides any environment variables or settings picked via the options dialog.
An individual proxy server is specified using the format:

  [<proxy-scheme>://]<proxy-host>[:<proxy-port>]

Where <proxy-scheme> is the protocol of the proxy server, and is one of:

  "http", "socks", "socks4", "socks5".

If the <proxy-scheme> is omitted, it defaults to "http". Also note that
"socks" is equivalent to "socks5".

Examples:

  --proxy-server="foopy:99"
      Use the HTTP proxy "foopy:99" to load all URLs.

  --proxy-server="socks://foobar:1080"
      Use the SOCKS v5 proxy "foobar:1080" to load all URLs.

  --proxy-server="socks4://foobar:1080"
      Use the SOCKS v4 proxy "foobar:1080" to load all URLs.

  --proxy-server="socks5://foobar:66"
      Use the SOCKS v5 proxy "foobar:66" to load all URLs.

It is also possible to specify a separate proxy server for different URL types,
by prefixing the proxy server specifier with a URL specifier:

Example:

  --proxy-server="https=proxy1:80;http=socks4://baz:1080"
      Load https://* URLs using the HTTP proxy "proxy1:80". And load http://*
      URLs using the SOCKS v4 proxy "baz:1080".

.TP
\fB\-\-no-proxy-server\fR
Disables the proxy server.  Overrides any environment variables or
settings picked via the options dialog.

.TP
\fB\-\-proxy-auto-detect\fR
Autodetect proxy configuration.  Overrides any environment variables
or settings picked via the options dialog.

.TP
\fB\-\-proxy-pac-url\fR=\fIURL\fR
Specify proxy autoconfiguration URL.  Overrides any environment variables
or settings picked via the options dialog.

.TP
\fB\-\-password-store\fR=<\fIbasic\fR|\fIgnome\fR|\fIkwallet\fR>
Set the password store to use.  The default is to automatically detect based
on the desktop environment.  \fIbasic\fR selects the built in, unencrypted
password store.  \fIgnome\fR selects Gnome keyring.  \fIkwallet\fR selects
(KDE) KWallet.  (Note that KWallet may not work reliably outside KDE.)

.TP
\fB\-\-version\fR
Show version information.

.PP
As a GTK+ app, @@NAME@@ also obeys GTK+ command-line flags, such
as
.BR \-\-display .
See the GTK documentation for more:
.IP
<http://library.gnome.org/devel/gtk/stable/gtk-running.html>
<http://library.gnome.org/devel/gtk/stable/gtk-x11.html>

.SH ENVIRONMENT
@@NAME@@ obeys the following environment variables:

.TP
.B all_proxy
Shorthand for specifying all of
.B http_proxy, https_proxy, ftp_proxy

.TP
.B http_proxy, https_proxy, ftp_proxy
The proxy servers used for HTTP, HTTPS, and FTP.
.I Note:
because Gnome/KDE proxy settings may propagate into these variables
in some terminals, this variable is ignored (in preference for actual
system proxy settings) when running under Gnome or KDE.  Use the
command-line flags to set these when you want to force their values.

.TP
.B auto_proxy
Specify proxy autoconfiguration.  Defined and empty autodetects; otherwise,
it should be an autoconfig URL.  But see above note about Gnome/KDE.

.TP
.B SOCKS_SERVER
SOCKS proxy server (defaults to SOCKS v4, also set
.B SOCKS_VERSION=5
to use SOCKS v5).

.TP
.B no_proxy
Comma separated list of hosts or patterns to bypass proxying.

.SH FILES
.TP
.I ~/.config/@@CONFDIR@@
Default directory for configuration data.

.TP
.I ~/.cache/@@CONFDIR@@
Default directory for cache data.  (Why?  See
<http://standards.freedesktop.org/basedir-spec/latest/> .)

.SH BUGS
Bug tracker:
.IP
http://code.google.com/p/chromium/issues/list
.PP
Be sure to do your search within "All Issues" before reporting bugs,
and be sure to pick the "Defect on Linux" template when filing a new one.

.SH AUTHOR
The Chromium team \- <http://www.chromium.org>
