Merge staging/1.1.0 changes back to master.
diff --git a/src/guacd-docker/bin/build-guacd.sh b/src/guacd-docker/bin/build-guacd.sh
index 4714743..9e263ae 100755
--- a/src/guacd-docker/bin/build-guacd.sh
+++ b/src/guacd-docker/bin/build-guacd.sh
@@ -43,7 +43,7 @@
 
 cd "$BUILD_DIR"
 autoreconf -fi
-./configure --prefix="$PREFIX_DIR" --disable-guaclog
+./configure --prefix="$PREFIX_DIR" --disable-guaclog --with-freerdp-plugin-dir="$PREFIX_DIR/lib/freerdp2"
 make
 make install
 ldconfig
diff --git a/src/protocols/rdp/client.c b/src/protocols/rdp/client.c
index c79e59d..db98d9b 100644
--- a/src/protocols/rdp/client.c
+++ b/src/protocols/rdp/client.c
@@ -38,11 +38,45 @@
 #include <guacamole/audio.h>
 #include <guacamole/client.h>
 
+#include <errno.h>
 #include <pthread.h>
+#include <pwd.h>
 #include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
 
 int guac_client_init(guac_client* client, int argc, char** argv) {
 
+    /* Automatically set HOME environment variable if unset (FreeRDP's
+     * initialization process will fail within freerdp_settings_new() if this
+     * is unset) */
+    const char* current_home = getenv("HOME");
+    if (current_home == NULL) {
+
+        /* Warn if the correct home directory cannot be determined */
+        struct passwd* passwd = getpwuid(getuid());
+        if (passwd == NULL)
+            guac_client_log(client, GUAC_LOG_WARNING, "FreeRDP initialization "
+                    "may fail: The \"HOME\" environment variable is unset and "
+                    "its correct value could not be automatically determined: "
+                    "%s", strerror(errno));
+
+        /* Warn if the correct home directory could be determined but can't be
+         * assigned */
+        else if (setenv("HOME", passwd->pw_dir, 1))
+            guac_client_log(client, GUAC_LOG_WARNING, "FreeRDP initialization "
+                    "may fail: The \"HOME\" environment variable is unset "
+                    "and its correct value (detected as \"%s\") could not be "
+                    "assigned: %s", passwd->pw_dir, strerror(errno));
+
+        /* HOME has been successfully set */
+        else
+            guac_client_log(client, GUAC_LOG_DEBUG, "\"HOME\" "
+                    "environment variable was unset and has been "
+                    "automatically set to \"%s\"", passwd->pw_dir);
+
+    }
+
     /* Set client args */
     client->args = GUAC_RDP_CLIENT_ARGS;
 
diff --git a/src/protocols/rdp/rdp.c b/src/protocols/rdp/rdp.c
index 256b2e4..8330c7e 100644
--- a/src/protocols/rdp/rdp.c
+++ b/src/protocols/rdp/rdp.c
@@ -368,7 +368,14 @@
     /* Allocate FreeRDP context */
     rdp_inst->ContextSize = sizeof(rdp_freerdp_context);
 
-    freerdp_context_new(rdp_inst);
+    if (!freerdp_context_new(rdp_inst)) {
+        guac_client_abort(client, GUAC_PROTOCOL_STATUS_SERVER_ERROR,
+                "FreeRDP initialization failed before connecting. Please "
+                "check for errors earlier in the logs and/or enable "
+                "debug-level logging for guacd.");
+        return 1;
+    }
+
     ((rdp_freerdp_context*) rdp_inst->context)->client = client;
 
     /* Load keymap into client */