.\"
.\" Licensed to the Apache Software Foundation (ASF) under one
.\" or more contributor license agreements.  See the NOTICE file
.\" distributed with this work for additional information
.\" regarding copyright ownership.  The ASF licenses this file
.\" to you under the Apache License, Version 2.0 (the
.\" "License"); you may not use this file except in compliance
.\" with the License.  You may obtain a copy of the License at
.\"
.\"   http://www.apache.org/licenses/LICENSE-2.0
.\"
.\" Unless required by applicable law or agreed to in writing,
.\" software distributed under the License is distributed on an
.\" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
.\" KIND, either express or implied.  See the License for the
.\" specific language governing permissions and limitations
.\" under the License.
.\"
.TH guacd 8 "1 Jun 2017" "version 0.9.13-incubating" "Guacamole"
.
.SH NAME
guacd \- Guacamole proxy daemon
.
.SH SYNOPSIS
.B guacd
[\fB-b\fR \fIHOST\fR]
[\fB-l\fR \fIPORT\fR]
[\fB-p\fR \fIPID FILE\fR]
[\fB-L\fR \fILOG LEVEL\fR]
[\fB-C\fR \fICERTIFICATE FILE\fR]
[\fB-K\fR \fIKEY FILE\fR]
[\fB-f\fR]
.
.SH DESCRIPTION
.B guacd
is the Guacamole proxy daemon used by the Guacamole web application and
framework. As JavaScript cannot handle binary protocols (like VNC and remote
desktop) efficiently, a new text-based protocol was developed which would
contain a common superset of the operations needed for efficient remote
desktop access, but would be easy for JavaScript programs to process.
.B guacd
is the proxy which translates between arbitrary protocols and the Guacamole
protocol.
.
.SH OPTIONS
.TP
\fB\-b\fR \fIHOST\fR
Changes the host or address that
.B guacd
listens on.
.TP
\fB\-l\fR \fIPORT\fR
Changes the port that
.B guacd
listens on (the default is port 4822).
.TP
\fB\-p\fR \fIFILE\fR
Causes
.B guacd
to write the PID of the daemon process to the specified
file. This is useful for init scripts and is used by the provided init
script.
.TP
\fB\-L\fR \fILEVEL\fR
Sets the maximum level at which
.B guacd
will log messages to syslog and, if running in the foreground, the console.
Legal values are
.B trace,
.B debug,
.B info,
.B warning,
and
.B error.
The default value is
.B info.
.TP
\fB\-f\fR
Causes
.B guacd
to run in the foreground, rather than automatically forking into the
background.
.
.SH SSL/TLS OPTIONS
If libssl was present at the time
.B guacd
was compiled, it will contain SSL/TLS support, and connections between the
web application and
.B guacd
can be encrypted if a certificate file is given.
.P
When using a chain of certificates, you must append the additional certificates
to your server certificate. This can be done easily with the standard
.B cat
command. Beware that the certificate for
.B guacd
.I must
be the first certificate in the file.
.TP
\fB-C\fR \fICERTIFICATE FILE\fR
Enables SSL/TLS using the given cerficiate file. Future connections to
this instance of
.B guacd
will require SSL/TLS enabled in the client (the web application). If
this option is not given, communication with guacd must be unencrypted.
.TP
\fB-K\fR \fIKEY FILE\fR
Enables SSL/TLS using the given private key file. Future connections to
this instance of
.B guacd
will require SSL/TLS enabled in the client (the web application). If
this option is not given, communication with guacd must be unencrypted.
.
.SH SEE ALSO
.BR guacd.conf (5)
.
.SH AUTHOR
Written by Michael Jumper <mike.jumper@guac-dev.org>
