• Stars
    star
    75
  • Rank 424,578 (Top 9 %)
  • Language
    Go
  • License
    MIT License
  • Created about 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Remote control library for the Apache Guacamole protocol (RDP/VNC)

Bring

GitHub tag (latest SemVer) Documentation Build Status Go Report Card Maintainability

Go client library for Apache Guacamole Protocol.

Quick start (tl;dr)

  1. Install the library in your project:

    go get github.com/deluan/bring
    
  2. Create a Client with the 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 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:

  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 server

  2. 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:

More Repositories

1

zsh-in-docker

Install Zsh, Oh-My-Zsh and plugins inside a Docker container with one line!
Shell
703
star
2

lookup

🔍 Pure Go implementation of fast image search and simple OCR, focused on reading info from screenshots
Go
61
star
3

contentful-migrate

🐎 Schema migration tooling for Contentful, with state management
JavaScript
60
star
4

shiro-faces

JSF 2 TagLib for Apache Shiro. This taglib reimplements all original JSP tags as their Facelets equivalent, so they can be used in JSF projects.
Java
30
star
5

grails.sh

Bash script for selecting and calling the correct Grails version when you have more than one version installed
Shell
28
star
6

rest

Simple Generic REST controller
Go
8
star
7

bring-example

VNC/RDP desktop app - Sample usage of Bring library
Go
6
star
8

flowllm

Go framework for language model-powered applications with composability and chaining. Inspired by LangChain.
Go
5
star
9

gaelyk-spring

Example of how to use Spring Dependency Injection in a Gaelyk project. See the link below for a guided tutorial.
Java
3
star
10

fyne-vnc

Go
3
star
11

gomate

GoLang autocomplete on multiple words with Ledis (and possibly Redis)
Go
2
star
12

petshop-rails-ansible

Example on how to use Ansible to provision a full environment for the Petshop project
Shell
1
star
13

dcd.js

DCD ported to JavaScript, as a Node.JS console app
JavaScript
1
star
14

shiro-jsf2-test

Sample JSF2 project to test the Shiro Faces lib. Based on http://www.mkyong.com/jsf2/jsf-2-0-hello-world-example/
Java
1
star
15

ngago

WIP: Beego (GoLang) <-> ng-admin interface
Go
1
star
16

auto-environments

Elastic Environments in Source-Control with Ansible
Ruby
1
star