Go client library for Apache Guacamole Protocol.
Quick start (tl;dr)
-
Install the library in your project:
go get github.com/deluan/bring
-
Create a Client with the NewClient() function. This creates a session with the specified
guacd
server -
Start the client with
go client.Start()
-
Get screen updates with
client.Screen()
-
Send keystrokes with
client.SendKey()
-
Send mouse updates with
client.SendMouse()
See the sample app for a working example
Documentation
The API is provided by the Client struct. The documentation is a work in progress, but the API is very simple and you can take a look at all features available in the sample app provided. Here are the steps to run the app:
-
You'll need a working
guacd
server in your machine. The easiest way is using docker and docker-compose. Just calldocker-compose up -d
in the root of this project. It starts theguacd
server and a sample headless linux with a VNC server -
Run the sample app with
make run
. It will connect to the linux container started by docker.
Take a look at the Makefile to learn how to run it in different scenarios.
Why?
Apache Guacamole was created with the goal of making a dedicated client unnecessary. So why create a client?!
The idea is that if you need to control a remote machine from your Go code, you can
leverage the Guacamole protocol and the guacd
server as a bridge. This way you can
use any protocol supported by Guacamole (currently RDP and VNC, with X11 coming in
the future) to do screen capture and remote control of networked servers/desktop
machines from within your Go app.
My use case was to automate some tasks in a VirtualBox VM, but there was no Go support for the VirtualBox XPCOM API on Macs (my host platform), nor a working RDP client implementation in Go. Instead of writing a new RDP client, why not leverage the awesome Guacamole project and get support for multiple protocols?