Fact-checked by Grok 2 weeks ago

X2Go

X2Go is an open-source suite that allows users to access a graphical and individual applications on a from client machines running , Windows, or macOS, efficiently over low- or high-bandwidth connections using the NX compression protocol tunneled securely via SSH. It supports persistent sessions that can be disconnected and reconnected without loss of state, making it suitable for mobile or intermittent network access. Developed initially in 2006 by Oleksandr Shneyder and Heinz-M. Graesing as a network solution for a Bavarian high school, X2Go evolved from the NoMachine NX3 technology, incorporating improvements such as enhanced audio support via and seamless SSH integration. The project is maintained under the Open Remote Computing Association (orca e.V.), a registered German non-profit organization, with community-driven development hosted on platforms like . As of 2025, it remains actively maintained, with annual user gatherings and regular releases. Licensing primarily follows the GNU General Public License version 2 or later (GPL-2+), with some components under the GNU Affero General Public License version 3 (AGPL-3). Key features include support for multiple desktop environments like , , and ; audio forwarding; file and printer sharing between client and server; and the ability to run single applications or share desktops among multiple users without requiring a dedicated proxy account. These capabilities make it particularly valuable for , environments, and educational settings where secure, low-latency graphical access is essential.

History

Origins

X2Go was founded in 2006 by Oleksandr Shneyder and Heinz-M. Graesing as a network solution tailored for a Bavarian , aimed at enabling access to desktops in an educational environment. The project emerged from the need to provide cost-effective computing resources in a setting, where traditional limitations necessitated a centralized approach to desktop delivery. The initial development centered on a PXE Environment, designed specifically for low-resource client devices to boot and connect to a central hosting sessions. This setup allowed students and staff to access full graphical without requiring powerful local machines, leveraging to minimize demands and facilitate . In 2006, the project introduced , its mascot—a . Early iterations began as nameless drafts for a generic network solution but evolved into the branded X2Go, marking its transition toward a dedicated remote . This foundational work laid the groundwork for later expansions into broader remote desktop capabilities.

Development milestones

In 2010, Mike Gabriel joined the X2Go project and began developing the library known as python-x2go, which provides programmatic access to X2Go's backend components, along with the command-line client pyhoca-cli and graphical client pyhoca-gui. That same year, members of the University of team collaborated with the core developers to improve packaging for Debian-based distributions and enhance the environment, focusing on better integration and deployment options. By 2011, significant feature expansions were introduced, including the x2goserver-extensions package tailored for , , and Raspbian systems, which serves as a modular for additional server-side contributions such as custom session scripts and point handling. By 2013, X2Go had evolved from its initial focus on PXE-based environments—rooted in the project's high school origins—into a comprehensive remote desktop suite capable of handling full graphical sessions with features like session resuming and low-bandwidth optimization. Since then, the project has continued with further releases, including x2goclient version 4.1.0.0 in 2017 and 4.1.2.2 in 2020, and remains actively maintained as of 2025.

Technical architecture

Core components

The X2Go Server, implemented in the x2goserver package, serves as the core server-side component, functioning as a lightweight daemon on remote hosts to manage user sessions via SSH. It handles session initiation, suspension, resumption, and termination through a collection of and scripts, assigning unique display numbers, session IDs, and ports to ensure isolation. This design supports multiple concurrent users on the same host without requiring a physical X.Org display, relying instead on virtual NX agents for graphical rendering. The X2Go Client, distributed as x2goclient, is the primary graphical application for end-user machines running Windows, , or macOS, enabling users to establish and control connections to remote X2Go servers. It provides interfaces for session configuration, file transfer, and resource redirection, but requires a local X11 server on platforms lacking native support, such as on macOS. X2Go utilizes the NX transport protocol for efficient graphics delivery across these client-server interactions. For larger deployments, the optional X2Go Session Broker (x2gobroker) extends functionality by acting as a centralized or SSH-based service that distributes session profiles to clients, facilitating load balancing across multiple servers. This component is particularly suited for setups, allowing dynamic server selection and resource allocation without altering individual client configurations. Supporting libraries like python-x2go offer Python-based APIs to embed X2Go client capabilities into custom scripts and applications, enabling automated session management, proxy handling, and integration with tools such as PyHoca-CLI for headless operations.

Protocol and transport

X2Go employs the NoMachine NX3 technology for its core protocol, utilizing nx-libs (version 3.5.0.x) to handle graphics , input processing, and clipboard operations, which enables efficient remote desktop sessions even over low-bandwidth connections. This technology incorporates advanced caching mechanisms, or image options, and optimizations that reduce X11 round-trips, outperforming standard SSH-based methods like zlib. All data transmission occurs through secure SSH tunneling, which provides and for the entire session, with X11 forwarding recommended to enhance nx-libs performance. On the server side, session management is orchestrated by a suite of Bash and Perl scripts, such as x2gostartagent and x2goruncommand, which handle session initiation, suspension, and termination. The NX agent, implemented via x2goagent, functions as an NX-like X server to redirect graphical output, assigning unique display numbers and session IDs to maintain isolation and persistence. This setup leverages the NX protocol's persistent channels to support seamless disconnect and reconnect functionality without session loss, allowing users to resume work from the same or different clients. The architecture further accommodates multiple independent sessions per server user by generating distinct session identifiers and display ports for each, managed through tools like PyHoca-GUI or the , ensuring without interference. This multi-session capability, combined with SSH's secure , underpins X2Go's robustness for concurrent remote access scenarios.

Features

Basic capabilities

X2Go enables users to remotely access full graphical desktops on Linux servers, supporting popular environments such as , , and from both thin and full clients. This allows seamless interaction with the server's desktop as if it were local, including and input for running applications within the session. The system is designed for standard remote desktop scenarios, where users connect to a persistent or on-demand graphical session hosted on the server. The software achieves efficient performance over low-bandwidth connections through NX compression technology, which optimizes the transmission of graphical data, making it suitable for links without significant degradation in . All communications, including screen output, , and events, are secured via SSH encryption, ensuring that data remains protected during transit without requiring additional tunneling configurations. This inherent security model leverages the SSH protocol to authenticate and encrypt sessions end-to-end. X2Go supports multi-user environments on a single , where multiple users can maintain isolated graphical sessions simultaneously, each with their own dedicated desktop instance. Client compatibility spans major platforms, including , Windows, and macOS, with native applications available for each; on Windows and macOS, an embedded handles the graphical rendering. Third-party solutions extend access to mobile devices, though official support focuses on desktop clients.

Advanced functionalities

X2Go supports published applications, allowing users to run individual remote applications without loading a full session, which enhances efficiency for targeted tasks. This feature, introduced in X2Go Server version 3.1.1.0 and client 3.99.2.0, presents a menu of available remote applications that integrate seamlessly into the local , behaving like locally installed programs. Administrators can control the menu through configuration files in /etc/x2go/applications/, enabling system-wide or per-user customization across , Windows, and macOS platforms. Sound forwarding in X2Go redirects audio from remote sessions to the local client device, supporting playback over the connection. Users enable this via the audio settings in the X2Go Client , allowing real-time audio output from remote applications. support extends to various desktop environments and custom sessions, though compatibility varies with certain like GNOME 3. File and printer sharing facilitate seamless interaction between local and remote systems during active sessions. Folder sharing is configured through the X2Go Client's options, mounting selected local directories on the remote for bidirectional . Printer sharing enables printing from remote applications to local printers, activated via settings without requiring additional server-side drivers. RDP proxying allows X2Go to serve as a gateway for accessing Windows desktops, tunneling RDP connections through an X2Go session on a server. In this mode, the server uses tools like rdesktop to initiate the RDP link to the Windows machine, displaying the resulting desktop within the X2Go session on the client. This provides benefits such as SSH encryption for traffic, improved performance on low-bandwidth links, and simplified firewall traversal using SSH methods. The X2Go Thin Client Environment (TCE) enables deployment in bootable, lightweight setups for minimal-resource workstations. Based on , TCE-Live loads the full image into (requiring at least 1 GB; 512 MB possible with local storage, though not recommended) and supports netbooting via PXE/TFTP with HTTP/HTTPS/FTP protocols, or local booting from USB/CD/DVD media. This creates portable, network-dependent clients dedicated to launching X2Go sessions, with customizable builds for architectures like i586 and . Complementing this, the X2Go Session Broker provides session brokering for high-availability clusters, offering load balancing across multiple servers, ACL-based profile provisioning, and extensible backends like INIFILE for small-to-medium deployments. It integrates with X2Go Server 4.0.1.16 or later, using HTTP(S) or SSH for brokerage.

Implementation and usage

Installation process

As of November 2025, the latest stable versions are X2Go Server 4.1.0.x and Client 4.1.2.2; always verify from official repositories. The installation of X2Go involves setting up both the component on a host and the client component on the user's local machine. The requires an SSH server to be installed and running, as X2Go tunnels its protocol over SSH for secure remote access. Additionally, a must be present on the , such as for lightweight setups or for full-featured sessions, to provide the graphical interface that clients will access. For the server on Debian, Ubuntu, or Raspbian distributions, begin by ensuring the system repositories include X2Go packages. On Ubuntu, first install the necessary tools with sudo apt-get install software-properties-common (for versions 14.04 and later), then add the official X2Go PPA using sudo add-apt-repository ppa:x2go/stable, followed by sudo apt-get update. Install the core packages with sudo apt-get install x2goserver x2goserver-xsession. For Debian, add the X2Go repository as detailed in the official documentation and run sudo apt-get install x2goserver x2goserver-xsession. On Raspbian, similarly add the dedicated repository and execute the same installation command. These steps deploy the server components, which activate on-demand via SSH without requiring a separate daemon startup. Client installation varies by platform. On Windows, download the latest installer from the official release site and run it with administrative privileges; for silent installation, /S to the command line. On Linux distributions like or , use the with sudo apt-get install x2goclient to handle dependencies automatically. For macOS, first install as a prerequisite from its official site to provide X11 support, then download the appropriate DMG image matching the macOS version and drag the X2Go Client application to the Applications folder. Note that the macOS client has not received major updates since 2020 and may require workarounds (e.g., disabling or using older macOS) for compatibility with macOS 14 (Sonoma) or later as of 2025. Check the official downloads for the latest available DMG. For support of local printing, sound, and media sharing, enable Remote Login in > General > Sharing as recommended in the official documentation, though it is not required for basic SSH connections; consider lightweight desktop environments like on the server for optimal performance over slower networks. To verify the setup, ensure the SSH service is running on the (e.g., via sudo systemctl start ssh on systemd-based systems) and 22 in the if necessary (e.g., sudo ufw allow 22 on ). From the client machine, launch the X2Go Client, create a new session pointing to the 's hostname or (initially test with on the itself), select a session type like , and attempt a connection using valid SSH credentials. Successful authentication and display of the remote desktop confirm the installation.

Configuration and management

Server-side configuration of X2Go primarily involves editing the main located at /etc/x2go/x2goserver.conf, which uses an INI-style format to manage session limits, levels, and related parameters. The [limit users] allows administrators to specify individual and the maximum number of simultaneous X2Go sessions permitted for each, such as #user-foo=1 to restrict "foo" to one session; similarly, the [limit groups] applies limits to all members of a specified group, with the highest applicable limit taking precedence if a belongs to multiple groups. For , the [log] controls verbosity through the loglevel option, which accepts values from emerg (least verbose) to debug (most verbose), with notice as the default; logs are directed to the LOCAL7 facility, typically /var/log/[syslog](/page/Syslog). Agent commands, such as starting the NX agent for sessions, are managed via server scripts like x2gostartagent, which dynamically assigns ports and launches the agent without direct in the main . Client-side setup occurs through the graphical interface of the x2goclient application, where users create and customize sessions via the "New Session" dialog. Key parameters include specifying the server hostname or IP, username, and authentication method—either password or / SSH key selected from a file like ~/.ssh/id_rsa. Desktop type is configured by selecting a predefined environment (e.g., , , ) or a custom command for specialized applications. redirection is enabled in the audio settings tab, tunneling audio over SSH using systems like (default port 4713); keyboard layout and language are set explicitly in the settings tab to match the client's , with options like layout=en_US and type=pc105. Additional tweaks include connection bandwidth (e.g., for moderate speeds) and compression quality (0-9 scale, default 9) to optimize performance. User management in X2Go leverages the underlying SSH infrastructure for authentication, requiring standard system administration to add users via tools like adduser and configure access. For password-based access, users are added to the server's user database with enabled SSH login privileges; for key-based authentication, generate an SSH key pair using ssh-keygen (recommending DSA or RSA), then append the public key to the server's ~/.ssh/authorized_keys file for the target user. Sessions can be suspended and resumed using server commands like x2gosuspend-session <session_id>, which halts the NX agent and frees resources while preserving the session state; clients resume by selecting the suspended session in the GUI, provided the session ID matches. Desktop sharing is facilitated by installing the x2godesktopsharing package on the server, adding users to the x2godesktopsharing group, and activating sharing via the system tray applet; clients then connect to the local desktop using "Connect to local desktop" mode, supporting view-only or full control options. Common troubleshooting issues include port conflicts, often arising during session resumption when NX ports (dynamically assigned, typically above 30000) are not promptly released after suspension, resolvable by waiting a few minutes or manually terminating lingering processes via x2goterminate-session. NX errors, such as segmentation faults or connection closures, frequently stem from mismatches or incompatible environments; verify SSH credentials, check server logs in /var/log/[syslog](/page/Syslog) for clues like "remote closed," and ensure the 's options (/etc/x2go/x2goagent.options) enables necessary features like . For bandwidth optimization, adjust client settings to lower speeds (e.g., for low-bandwidth links) and (e.g., at 16m colors); DPI mismatches causing scaling issues are fixed by setting "Display DPI" in the client's tab to values like 96 or 100, matching the local display. Enterprise integration with LDAP or for is achieved by configuring the server's SSH daemon (via ) to use LDAP modules like SSSD or nslcd for user validation, as X2Go inherits SSH's mechanism without native directory support. For , tools like Winbind or realmd join the server to the domain, enabling or NTLM-based logins; LDAP setups require editing /etc/sssd/sssd.conf to point to the directory server and restarting services, allowing X2Go users to authenticate seamlessly with domain credentials.

References

  1. [1]
    doc:newtox2go [X2Go - everywhere@home]
    Mar 6, 2017 · X2Go enables you to access a graphical desktop of a computer over a low bandwidth (or high bandwidth) connection. X2Go is a Remote Desktop solution.
  2. [2]
    about:start [X2Go - everywhere@home]
    Mar 8, 2013 · History. X2Go was started 2006 as a network solution for a Bavarian high school (Gymnasium) by Oleksandr Shneyder and Heinz-M. Graesing.
  3. [3]
    start [X2Go - everywhere@home]
    X2Go is a project under the umbrella of the Open Remote Computing Association - orca eV - a registered association under Germanys Civil Code.Download:startInstalling X2GoDoc:newtox2goDoc:installation:x2goclientEvents:x2go-gathering-2024
  4. [4]
    sources:start [X2Go - everywhere@home]
    Aug 27, 2015 · GNU General Public License ( GPL ): Originally, X2Go has been licensed under the GPL (mostly GPL -2(+). AGPL licensed X2Go components. GNU ...Getting Source Code for X2Go... · Licenses of X2Go
  5. [5]
    doc:installation:start [X2Go - everywhere@home]
    Dec 14, 2018 · The clients of X2Go need to be installed on machines that shall access remote machines running X2Go Server.
  6. [6]
    wiki:advanced:x2goserver-in-detail [X2Go - everywhere@home]
    Nov 24, 2016 · A collection of Bash and Perl scripts that take care over X2Go server session management and communication between client and server.
  7. [7]
    X2Go / Client / Libraries / Python X2Go · GitLab
    python-x2go - Copyright (C) 2010-2023 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Published under the terms of the GNU Affero General Public License ...
  8. [8]
    doc:installation:x2goclient [X2Go - everywhere@home]
    Dec 19, 2023 · Download latest x2goclient for Windows and install. Administrator rights required for a normal install. Older versions are still available.<|control11|><|separator|>
  9. [9]
    doc:usage:x2goclient [X2Go - everywhere@home]
    May 4, 2020 · The x2goclient application provides you the possibility to access the remote running desktop, exchange files with it and redirect sound from the session on the ...Missing: description | Show results with:description
  10. [10]
    doc:faq:start [X2Go - everywhere@home]
    Dec 21, 2021 · What are the packages x2goserver-home and x2goserver-one for? Both packages ( x2goserver-home , x2goserver-one ) are obsolete as of April 2011.Missing: extensions history
  11. [11]
    X2Go Session Broker for Newbies
    Apr 23, 2015 · An X2Go Session Broker is an HTTP(s) or SSH server that provides session profiles to X2Go Client, centrally for large deployments, and is ...Missing: description | Show results with:description
  12. [12]
    doc:de-compat [X2Go - everywhere@home]
    Jan 25, 2023 · This page is about compatibility with X2Go Server, not with X2Go Client (or PyHoca- GUI or PyHoca-CLI.) X2Go Client should be able to run under any and every X ...Missing: Phoca mascot 2006
  13. [13]
    X2Go - ArchWiki
    Apr 17, 2024 · X2Go enables to access a graphical desktop of a computer over the network. The protocol is tunneled through the Secure Shell protocol, so it is ...
  14. [14]
    X2Go: An Alternative to X11 and VNC - HECC Knowledge Base
    Jul 10, 2023 · Windows systems: an X11 server is provided with X2Go client. · Linux systems: the client component of X2Go uses the local Xorg server. · Mac OS X ...<|control11|><|separator|>
  15. [15]
    wiki:advanced:published-applications [X2Go - everywhere@home]
    May 20, 2014 · Display a menu with a list of the available remote applications for the user, which when started behaves like a locally installed application.
  16. [16]
    wiki:advanced:tce:rdp [X2Go - everywhere@home]
    Nov 15, 2014 · X2Go Client can be used to connect to Microsoft Windows Terminal Servers. There are two modes available: DirectRDP support and X2Go-proxied RDP support.
  17. [17]
    doc:howto:tce [X2Go - everywhere@home]
    Sep 7, 2025 · To make booting in ThinClient mode the default, in section [boot loader] , change the line starting with default to default=C:\grldr. attrib ...Missing: focus resource
  18. [18]
    Installation of the classic, NFS-filesystem-based X2Go TCE
    Dec 19, 2023 · In the following description we will describe a simple X2Go TCE installation, using two separate hosts as X2Go Server and X2Go PXE Server.Missing: focus resource
  19. [19]
    X2Go / Broker / X2Go Broker · GitLab
    * This version of X2Go Session Broker works with X2Go Client (>= 4.0.0.0) and Python X2Go (>= 0.5.0.0) as a client. * Python modules: - python-setuptools ...Missing: thin brokering
  20. [20]
    doc:installation:x2goserver [X2Go - everywhere@home]
    Jul 1, 2019 · First add the X2Go ppa repository for Ubuntu. After adding the X2Go PPA to your remote Ubuntu “desktop” server the next step is to install the packages x2 ...Missing: 2011 | Show results with:2011
  21. [21]
    wiki:repositories:debian [X2Go - everywhere@home]
    Jul 28, 2021 · If you install X2Go components for the first time on a machine, you will have to bootstrap the repository and package signing key first in order ...Missing: core | Show results with:core
  22. [22]
    wiki:repositories:raspbian [X2Go - everywhere@home]
    Sep 12, 2019 · X2Go Packages for Raspbian GNU/Linux. To get started you'll need to configure your local system to access the official X2Go Raspbian repository.Missing: 2011 Ubuntu
  23. [23]
  24. [24]
    x2goserver.conf - X2Go Server Main Configuration File
    The x2goserver.conf's configuration file format is an INI-based configuration format. It falls apart into sections and options with their values. [section1] ...Missing: /etc/ | Show results with:/etc/
  25. [25]
    wiki:development:sessions-file [X2Go - everywhere@home]
    Apr 9, 2025 · Setting the command to RDP will turn X2Go into an RDP proxy (RDP via NX). RDP will receive a performance improvement on WAN connections and X2Go ...Missing: management | Show results with:management
  26. [26]
    Passwordless authentication using ssh-keys - X2Go
    Mar 8, 2013 · Generate an SSH key, transfer its public part to the server, and add the private key path to x2goclient session preferences for passwordless ...
  27. [27]
    x2gosuspend-session - Suspend an X2Go Session - Ubuntu Manpage
    x2gosuspend-session suspends the running session with session ID <session_id>. This command is normally issued by an X2Go client application with X2Go user ...Missing: documentation | Show results with:documentation
  28. [28]
    doc:usage:desktop-sharing [X2Go - everywhere@home]
    Dec 14, 2022 · X2Go desktop sharing gives full access to another computer's desktop. On the server, install x2godesktopsharing and activate it. On the client, ...
  29. [29]
    X2Go Bug report logs - #302 No session resume
    Sep 5, 2013 · The source of the issue seem to be that the NX port reappears on the server within seconds of session suspension.... in a state where where ...Missing: troubleshooting common
  30. [30]
    X2Go Bug report logs - #908 nxagent segfault, causes session loss
    Jul 22, 2015 · X2Go Bug report logs - #908 nxagent segfault, causes session loss · Report forwarded to x2go-dev@lists.x2go.org, X2Go Developers <x2go-dev@lists.Missing: port | Show results with:port