https://github.com/deluan/bring
Remote control library for the Apache Guacamole protocol (RDP/VNC)
https://github.com/deluan/bring
apache-guacamole guacamole guacamole-client guacamole-protocol rdp rdp-client remote-control remote-desktop screen-capture vnc vnc-client
Last synced: 2 months ago
JSON representation
Remote control library for the Apache Guacamole protocol (RDP/VNC)
- Host: GitHub
- URL: https://github.com/deluan/bring
- Owner: deluan
- License: mit
- Created: 2019-09-25T21:19:00.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2025-03-24T10:27:03.000Z (3 months ago)
- Last Synced: 2025-03-30T10:09:01.160Z (3 months ago)
- Topics: apache-guacamole, guacamole, guacamole-client, guacamole-protocol, rdp, rdp-client, remote-control, remote-desktop, screen-capture, vnc, vnc-client
- Language: Go
- Homepage: https://github.com/deluan/bring#bring
- Size: 156 KB
- Stars: 80
- Watchers: 3
- Forks: 10
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Bring
[](https://github.com/deluan/bring/releases)
[](https://godoc.org/github.com/deluan/bring)
[](https://github.com/deluan/bring/actions)
[](https://goreportcard.com/report/github.com/deluan/bring)
[](https://codeclimate.com/github/deluan/bring/maintainability)Go client library for [Apache Guacamole](http://guacamole.apache.org) Protocol.
## Quick start (tl;dr)
1. Install the library in your project:
go get github.com/deluan/bring2. Create a [Client](https://godoc.org/github.com/deluan/bring#Client) with the [NewClient()](https://godoc.org/github.com/deluan/bring#NewClient) function.
This creates a session with the specified `guacd` server
3. Start the client with `go client.Start()`
4. Get screen updates with `client.Screen()`
5. Send keystrokes with `client.SendKey()`
6. Send mouse updates with `client.SendMouse()`
See the [sample app](sample/main.go) for a working example## Documentation
The API is provided by the [Client](https://godoc.org/github.com/deluan/bring#Client) struct.
The [documentation](https://godoc.org/github.com/deluan/bring) 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](sample) provided. Here are the steps to run the app:1) You'll need a working `guacd` server in your machine. The easiest way is using docker
and docker-compose. Just call `docker-compose up -d` in the root of this project. It
starts the `guacd` server and a sample headless linux with a VNC server2) 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?## References:
- [The Guacamole protocol](http://guacamole.apache.org/doc/gug/guacamole-protocol.html)
- [Guacamole protocol reference](http://guacamole.apache.org/doc/gug/protocol-reference.html#rect-instruction)
- [Apache Guacamole Client implementation](https://github.com/apache/guacamole-client/tree/master/guacamole-common-js)