Convert Figma logo to code with AI

apache logoguacamole-server

Mirror of Apache Guacamole Server

3,052
629
3,052
35

Top Related Projects

10,779

FreeRDP is a free remote desktop protocol library and clients

11,395

VNC client web application

5,585

xrdp: an open source RDP server

High performance, multi-platform VNC client and server

LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

72,006

An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.

Quick Overview

Apache Guacamole Server is the server-side component of Apache Guacamole, a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH, allowing users to access their desktops and applications through a web browser without requiring any plugins or client software.

Pros

  • Cross-platform compatibility, accessible from any device with a web browser
  • Supports multiple remote desktop protocols (VNC, RDP, SSH)
  • Highly scalable and suitable for enterprise environments
  • Extensible architecture allowing for custom authentication and connection methods

Cons

  • Requires server-side setup and maintenance
  • Performance may be slightly lower compared to native clients
  • Limited support for advanced features of some protocols
  • Learning curve for configuration and customization

Getting Started

To set up Guacamole Server:

  1. Install dependencies:

    sudo apt-get install libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev
    
  2. Clone the repository:

    git clone https://github.com/apache/guacamole-server.git
    cd guacamole-server
    
  3. Build and install:

    autoreconf -fi
    ./configure --with-init-dir=/etc/init.d
    make
    sudo make install
    sudo ldconfig
    
  4. Start the Guacamole server:

    sudo /etc/init.d/guacd start
    

Note: This is a basic setup. For production use, additional configuration and security measures are recommended.

Competitor Comparisons

10,779

FreeRDP is a free remote desktop protocol library and clients

Pros of FreeRDP

  • Native RDP client implementation with broader protocol support
  • Cross-platform compatibility (Windows, macOS, Linux, iOS, Android)
  • More active development and frequent updates

Cons of FreeRDP

  • Requires client-side installation and configuration
  • Limited web-based access options
  • Steeper learning curve for end-users

Code Comparison

FreeRDP (client-side connection):

freerdp_connect(instance);

Guacamole Server (server-side connection handling):

guac_client_plugin_handle_connection(client, socket);

Summary

FreeRDP is a comprehensive RDP client implementation offering native support across multiple platforms, while Guacamole Server focuses on providing remote desktop access through web browsers. FreeRDP excels in protocol support and performance but requires client-side installation. Guacamole Server offers easier deployment and management through its web-based approach but may have limitations in advanced RDP features. The choice between the two depends on specific use cases, deployment requirements, and user preferences.

11,395

VNC client web application

Pros of noVNC

  • Pure HTML5/JavaScript implementation, requiring no plugins or additional software on the client-side
  • Lightweight and easily embeddable in web applications
  • Supports a wide range of browsers and devices

Cons of noVNC

  • Limited protocol support (primarily VNC)
  • May have higher latency compared to native clients
  • Lacks some advanced features found in Guacamole, such as file transfer and printing

Code Comparison

noVNC (JavaScript):

var rfb = new RFB(document.getElementById('noVNC_canvas'), 'ws://example.com:port');
rfb.scaleViewport = true;
rfb.resizeSession = true;

Guacamole Server (C):

guac_client* client = guac_client_alloc();
guac_client_load_plugin(client, "libguac-client-vnc.so");
guac_client_init(client, GUAC_VNC_DEFAULT_ARGS);

Both projects aim to provide remote access solutions, but noVNC focuses on VNC protocol support in a browser-based environment, while Guacamole Server offers a more comprehensive remote desktop gateway with support for multiple protocols and advanced features.

5,585

xrdp: an open source RDP server

Pros of xrdp

  • Native RDP protocol support, allowing direct connections from Windows Remote Desktop clients
  • Generally lower latency and better performance for LAN connections
  • Easier integration with existing Windows-based remote desktop infrastructure

Cons of xrdp

  • Limited cross-platform support compared to Guacamole's browser-based approach
  • Less flexibility in terms of supported protocols (primarily focused on RDP)
  • May require more complex firewall configurations for remote access

Code Comparison

xrdp (C):

static int
xrdp_mm_process_login_response(struct xrdp_mm *self, struct stream *s)
{
    int ok;
    int display;
    char text[256];

    in_uint32_be(s, ok);
    in_uint32_be(s, display);
    in_uint8s(s, 4); /* pad */

Guacamole (C):

int guac_client_handle_instruction(guac_client* client, guac_instruction* instruction) {

    /* Call handler, if defined */
    if (client->handle_instruction != NULL)
        return client->handle_instruction(client, instruction);

    /* Otherwise, ignore */
    return 0;
}

Both projects use C for their core implementations, but xrdp focuses on RDP-specific functionality, while Guacamole provides a more abstract approach to handle various remote desktop protocols.

High performance, multi-platform VNC client and server

Pros of TigerVNC

  • Native VNC implementation with better performance for direct connections
  • Supports a wider range of platforms, including Windows and macOS
  • More lightweight and easier to set up for simple remote desktop scenarios

Cons of TigerVNC

  • Lacks built-in web-based access without additional software
  • Does not provide the same level of security features and encryption as Guacamole
  • Limited support for protocols other than VNC

Code Comparison

TigerVNC (C++):

rfb::VNCServerST::VNCServerST(const char* name, rfb::SDesktop* desktop)
  : desktop(desktop), name(name), clients(&updateScheduler),
    pointerClient(0), comparer(0), encoder(0), encodeManager(0),
    network(0), auth(0), lastConnectionTime(0), disableclients(false)
{
  srand(time(0));
}

Guacamole Server (C):

guac_client* guac_client_alloc() {
    guac_client* client = calloc(1, sizeof(guac_client));
    if (client == NULL)
        return NULL;

    client->state = GUAC_CLIENT_RUNNING;
    return client;
}

The code snippets show different approaches: TigerVNC focuses on VNC-specific implementation, while Guacamole Server provides a more abstract client allocation, supporting multiple protocols.

LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

Pros of libvncserver

  • Lightweight and focused solely on VNC protocol implementation
  • Longer development history and wider adoption in various projects
  • More flexible for integration into custom applications

Cons of libvncserver

  • Limited to VNC protocol support only
  • Lacks built-in web-based client interface
  • Requires additional components for a complete remote access solution

Code Comparison

libvncserver:

rfbScreenInfoPtr screen = rfbGetScreen(&argc, argv, width, height, 8, 3, bpp);
screen->frameBuffer = (char*)malloc(width * height * bpp);
rfbInitServer(screen);
rfbRunEventLoop(screen, -1, FALSE);

guacamole-server:

guac_client* client = guac_client_alloc();
guac_client_init(client, GUAC_VNC_CLIENT_ID, argc, argv);
guac_client_plugin_handle* plugin = guac_client_plugin_open(GUAC_VNC_LIBRARY);
guac_client_plugin_init_client(plugin, client, argc, argv);

Summary

While libvncserver focuses on providing a lightweight VNC implementation, guacamole-server offers a more comprehensive remote access solution with support for multiple protocols and a web-based interface. libvncserver is better suited for projects requiring direct VNC integration, while guacamole-server is ideal for building full-featured remote access applications with broader protocol support.

72,006

An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.

Pros of RustDesk

  • Written in Rust, offering better performance and memory safety
  • Standalone application, easier to set up and use without additional server components
  • Cross-platform support for Windows, macOS, Linux, iOS, and Android

Cons of RustDesk

  • Newer project with potentially less mature codebase and fewer features
  • Limited enterprise-level features compared to Guacamole's extensive protocol support
  • Smaller community and ecosystem around the project

Code Comparison

RustDesk (Rust):

let mut stream = TcpStream::connect(addr).await?;
stream.set_nodelay(true)?;
let mut msg_out = Message::new();
msg_out.set_login_request(lr);
send_message(&mut stream, msg_out).await?;

Guacamole Server (C):

guac_client* client = guac_client_alloc();
client->socket = socket;
client->state = GUAC_CLIENT_RUNNING;
guac_client_plugin_init(client, argc, argv);
guac_client_start(client);

Both projects aim to provide remote desktop functionality, but RustDesk focuses on being a standalone application with modern language benefits, while Guacamole Server offers a more comprehensive, server-based solution with broader protocol support. RustDesk may be easier for individual users, while Guacamole Server caters to enterprise environments with its extensibility and integration capabilities.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README


About this README

This README is intended to provide quick and to-the-point documentation for technical users intending to compile parts of Apache Guacamole themselves.

Source archives are available from the downloads section of the project website:

http://guacamole.apache.org/

A full manual is available as well:

http://guacamole.apache.org/doc/gug/

What is guacamole-server?

The guacamole-server package is a set of software which forms the basis of the Guacamole stack. It consists of guacd, libguac, and several protocol support libraries.

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. guacd is the proxy which translates between arbitrary protocols and the Guacamole protocol.


Required dependencies

All software within guacamole-server is built using the popular GNU Automake, and thus provides the standard configure script. Before compiling, at least the following required dependencies must already be installed:

1) Cairo (http://cairographics.org/)

2) libjpeg-turbo (http://libjpeg-turbo.virtualgl.org/)
   OR libjpeg (http://www.ijg.org/)

3) libpng (http://www.libpng.org/pub/png/libpng.html)

4) OSSP UUID (http://www.ossp.org/pkg/lib/uuid/)

Optional dependencies

In addition, the following optional dependencies may be installed in order to enable optional features of Guacamole. Note that while the various supported protocols are technically optional, you will no doubt wish to install the dependencies of at least ONE supported protocol, as Guacamole would be useless otherwise.

RDP:
    * FreeRDP (http://www.freerdp.com/)

SSH:
    * libssh2 (http://www.libssh2.org/)
    * OpenSSL (https://www.openssl.org/)
    * Pango (http://www.pango.org/)

Telnet:
    * libtelnet (https://github.com/seanmiddleditch/libtelnet)
    * Pango (http://www.pango.org/)

VNC:
    * libVNCserver (http://libvnc.github.io/)

Support for audio within VNC:
    * PulseAudio (http://www.freedesktop.org/wiki/Software/PulseAudio/)

Support for SFTP file transfer for VNC or RDP:
    * libssh2 (http://www.libssh2.org/)
    * OpenSSL (https://www.openssl.org/)

Support for WebP image compression:
    * libwebp (https://developers.google.com/speed/webp/)

"guacenc" video encoding utility:
    * FFmpeg (https://ffmpeg.org/)

Compiling and installing guacd, libguac, etc.

All software within guacamole-server is built using the popular GNU Automake, and thus provides the standard configure script.

  1. Run configure

    $ ./configure

    Assuming all dependencies have been installed, this should succeed without errors. If you wish to install the init script as well, you need to specify the location where your system init scripts are located (typically /etc/init.d):

    $ ./configure --with-init-dir=/etc/init.d

    Running configure in this manner will cause the "make install" step to install an init script to the specified directory, which you can then activate using the service management mechanism provided by your distribution).

  2. Run make

    $ make

    guacd, libguac, and any available protocol support libraries will now compile.

  3. Install (as root)

    make install

    All software that was just built, including documentation, will be installed.

    guacd will install to your /usr/local/sbin directory by default. You can change the install location by using the --prefix option for configure.


Running guacd

If you installed the init script during compile and install, you should be able to start guacd through the service management utilities provided by your distribution (if any) or by running the init script directly (as root):

# /etc/init.d/guacd start

Root access is needed to write the pidfile /var/run/guacd.pid. You can also run guacd itself directly without the init script (as any user):

$ guacd

guacd currently takes several command-line options:

-b HOST 

    Changes the host or address that guacd listens on.

-l PORT

    Changes the port that guacd listens on (the default is port 4822).

-p PIDFILE

    Causes 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.

-L LEVEL

    Sets the maximum level at which guacd will log messages to syslog and,
    if running in the foreground, the console.  Legal values are debug,
    info, warning, and error.  The default value is info.

-f
    Causes guacd to run in the foreground, rather than automatically
    forking into the background. 

Additional information can be found in the guacd man page:

$ man guacd

Reporting problems

Please report any bugs encountered by opening a new issue in the JIRA system hosted at:

https://issues.apache.org/jira/browse/GUACAMOLE