From b0f8d41d9de554dcfadcf4995128edb3d7a25e0e Mon Sep 17 00:00:00 2001 From: bryan Date: Tue, 21 May 2019 18:45:49 -0400 Subject: [PATCH] Post: Configuring a lightweight headless X2Go server for managing remote GUI applications --- ...x2go-server-for-remote-gui-applications.md | 112 ++++++++++++++++++ .../2019/05/x2go-configuration-settings.png | Bin 0 -> 27964 bytes 2 files changed, 112 insertions(+) create mode 100644 blog.bryanroessler.com/_posts/2019-05-21-headless-x2go-server-for-remote-gui-applications.md create mode 100644 blog.bryanroessler.com/assets/images/2019/05/x2go-configuration-settings.png diff --git a/blog.bryanroessler.com/_posts/2019-05-21-headless-x2go-server-for-remote-gui-applications.md b/blog.bryanroessler.com/_posts/2019-05-21-headless-x2go-server-for-remote-gui-applications.md new file mode 100644 index 0000000..92a66c8 --- /dev/null +++ b/blog.bryanroessler.com/_posts/2019-05-21-headless-x2go-server-for-remote-gui-applications.md @@ -0,0 +1,112 @@ +--- +layout: post +title: Configuring a lightweight headless X2Go server for managing remote GUI applications +subtitle: +#bigimg: /img/path.jpg +tags: [x2go, X11, getty, systemd, autologin, openbox, jriver] +--- + +While it is certainly preferable to manage server applications via the terminal, sometimes it is not feasible for programs that rely on a GUI for their function. In this example I am using [JRiver Media Center](https://yabb.jriver.com/interact/index.php) as a media server for my audio and video files located on a remote VPS. Streaming to my devices from the VPS prevents me from saturating my home upload bandwidth or risk going over my ISP data caps. However, JRiver Media Center requires an existing X server to run its media server, and resources on the VPS I am using are tight (1GB RAM and 1 vCPU). + +Luckily it is not necessary to run a full DE on a headless server in order to satisfy such program's requirements. + +In this tutorial we will be setting up a headless X server that utilizes autologin, [Openbox WM](http://openbox.org/wiki/Main_Page), and X2Go to provide a lightweight GUI-based remote administration portal that also satisfies the requirements of JRiver Media Center's media server. + +### X2Go versus VNC + +TigerVNC can create its own X server using its virtual framebuffer, so it is the most commonly recommended solution for starting a remotely accessible X session. However, I prefer to use X2Go as my go-to remote desktop software on Linux due to its easy setup, performance, strong security (since it utilizes the existing ssh stack), and multi-platform client availability. It is also much easier for end users to configure because it does not rely on them to set up SSH tunnels to securely access the remote desktop. Additionally, X2Go utilizes the [NX protocol](https://en.wikipedia.org/wiki/NX_technology) which offers superior performance, latency, and quality than VNC. Another interesting option on the horizon is [Apache's Guacamole](https://guacamole.apache.org/), which uses HTML5 to provide remote desktop capabilities in the client's browser, but in this article I will be sticking to X2Go. + +### Display Manager (or not) + +In most situations, a display manager alleviates a lot of headaches regarding user login, starting X, and handling process management. However, since we are trying to minimize resource usage on the server for the purposes of this tutorial, we will be avoiding the additional overhead of a display manager and instead use systemd to autologin and then launch the X session. + +### Window Manager + +Using a window manager will simplify launching and maintaining your graphical programs. There are many to choose from, in this tutorial I will be using openbox due to its wide adoption and low memory footprint. + +### Prerequisites + +1. Install x2go, a window manager, and a terminal emulator: `sudo apt-get install x2goserver python openbox xterm` + +2. Configure your SSH server and firewall for remote access. For testing, password-based authentication is OK, but eventually you will want to switch to using SSH keys for security and ease-of-use. + +### Enabling autologin + +We will be using getty to handle autologin for our user. In order to do this, we must override the default getty settings which normally prompts for a username and password upon login. + +1. `sudo systemctl edit getty@tty1` + +This will open your default system editor to create an override service file for the systemd getty@tty1.service. + +2. Enter the following into the drop-in override file you just opened/created and save it (replacing username with your actual username): +``` +[Service] +Type=simple +ExecStart= +ExecStart=-/sbin/agetty --autologin username --noclear %I $TERM +``` +3. Reload, restart, and enable the service file to load on boot: `sudo systemctl daemon-reload && sudo systemctl restart getty@tty1 && sudo systemctl enable getty@tty1` + +Your system will now autologin the user you specified when you reboot! + +### Starting the graphical X server automatically + +In order to run a graphical program or window manager, you will first need to initiate an X server. We can start one automatically using a shell profile file that is sourced during user login. The location of this file (e.g. `/etc/profile.d/`, `~/.profile`, `~/.bash_profile`, `~/.zprofile` (zsh), etc.) depends on your Linux distribution and shell settings. Here I am assuming that you are using bash shell (you can confirm this via the `echo $SHELL` command), thus we will place the relevant commands in `~/.bash_profile`. + +1. Add the following to the end of your `~/.bash_profile`: +``` +# Start X11 automatically +if [[ -z "$DISPLAY" ]] && [[ $(tty) = /dev/tty1 ]]; then + . startx + logout +fi +``` + +Now that the X server is set to run on login, it needs to be configured to start your window manager, in this case Openbox. + +2. Add the following line to `~/.xinitrc` and save the file: +``` +exec openbox-session +``` + +Now your server is configured to automatically login, start an X server, and run Openbox! + +### Using systemd to automatically start your GUI programs + +It's certainly possible to use Openbox to autostart your server's GUI programs by adding its start command to `~/.config/openbox/autostart`; however, on a server it is preferable to use systemd to reliably manage programs as services (e.g. Openbox will not automatically restart crashed programs). + +Here are the necessary steps to create and activate a systemd service file to start and stop JRiver Media Center. + +1. Create the file `/etc/systemd/system/jriver.service` and add the following (replacing username with your username): +``` +[Unit] +Description=JRiver Media Center 25 +After=graphical.target +# +[Service] +Type=simple +Environment=DISPLAY=:0 +User=username +ExecStart=/usr/bin/mediacenter25 /MediaServer +Restart=always +RestartSec=10 +KillSignal=SIGHUP +TimeoutStopSec=45 +# +[Install] +WantedBy=graphical.target +``` + +The key here is the `After=graphical.target` condition that will launch the program only after X has started. There are plenty of additional systemd options that can be used for sandboxing or to improve process management using PID files, but that is outside the scope of this article. + +2. Reload, restart, and enable the service file to load on boot: `sudo systemctl daemon-reload && sudo systemctl enable --now jriver.service` + +### Testing the remote desktop using X2Go + +At this point, go ahead and reboot the server in order to test it, using X2Go to connect using your SSH credentials. In the session preferences, ensure that the session type is set to "Connect to local desktop". If the session window appears to be an empty black box, try right-clicking to bring up the Openbox context menu. + +![X2Go configuration settings](../assets/images/2019/05/x2go-configuration-settings.png) + +### Conclusions + +In this tutorial you have learned how to autologin a user, start the X display server, launch a lightweight window manager, enable a GUI service using systemd, and connect to the remote desktop you created using X2Go. Very cool! diff --git a/blog.bryanroessler.com/assets/images/2019/05/x2go-configuration-settings.png b/blog.bryanroessler.com/assets/images/2019/05/x2go-configuration-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..54cc66d7c6b3a94a4aceb04224e4608141a9754b GIT binary patch literal 27964 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 literal 0 HcmV?d00001