Introduction

This guide discusses the use of a Graphical User Interface (GUI) and/or desktop environment on Ubuntu servers. Conventional wisdom states that in most cases it is better to not install a GUI on a production server. Several preferable user interface alternatives for managing servers are presented.

Arguments Against a GUI

Most Ubuntu Server developers recommend not installing a GUI on a server. There are multiple reasons for not installing a GUI.

Some reasons to not install a GUI include:

You'll have more code subject to security vulnerabilities, more packages that need updating, and more server downtime.

Performance may suffer because resources (memory, hard disk space, CPU, etc.) will be consumed by the GUI.

It is best practice to only install needed software on a production server.

The GUI may include other network services that are inappropriate for a server.

One of the goals of Ubuntu Desktop Edition is to make it easier for users to use Linux. When installing some desktop environments, services that you may not specifically want will be installed. For example avahi-daemon, which is used to help configure networking, adds another open port and may introduce unwanted DNS conflicts with a .local domain.

If you're using an Ubuntu LTS release prior to 12.04 LTS, X11 and desktop packages are not supported for the full 5 year lifecycle of the LTS server release.

So for the most secure server it is best to not install a GUI.

But there are many good alternatives for effective server management.

Byobu, Tmux, and Screen: terminal-based windowing

Note that Ubuntu server's command line interface comes with a powerful window manager: the Byobu package which makes it easy to manage multiple terminal sessions. Byobu adds support for status bars, clocks, notifiers (reboot-required, updates-available) etc. The screen program underneath byobu has been in all versions of Ubuntu. Tmux is a nice replacement for screen, and is now used by default in byobu. Screen-profiles (the previous name for byobu) is in Jaunty by default, though the binary package will install and work in Hardy and Intrepid as well.

Server configuration management

Juju, Puppet, Chef, Landscape, Cassandra, Fabric, and a host of other remote configuration and management tools are very helpful for servers and can automate lots of tasks.

X11 Client Installation

You may find it preferable to only run specific X11 clients on the server, and forward the X11 connections over ssh to display them on your desktop of choice. This way you avoid the need for an X11 server or desktop environment on the server itself. But note on the other hand that this opens up different vulnerabilities if the remote desktop can be compromised.

To do this, install the xauth pachage, then simply install the applications you need, and apt-get will bring in other packages as needed to satisfy the dependencies.

sudo apt-get install xauth

X11 Server Installation

If you want an X11-server-based GUI there are several light weight desktop environments that may work better than a standard Gnome or KDE environment.

To install a minimal X11 on Ubuntu Server Edition enter the following:

sudo apt-get install xorg

Next install a Window Manager:

sudo apt-get install openbox

Note: you can replace openbox with fluxbox, blackbox, etc.

Full Desktop Environments

To install the Gnome desktop on Ubuntu server Edition enter:

For Ubuntu 9.10 (Karmic Koala) and newer:

sudo apt-get install ubuntu-desktop

For Ubuntu 6.06 (Dapper Drake) and Ubuntu 8.04 (Hardy Heron):

sudo apt-get install gnome-desktop-environment

For KDE change gnome-desktop-environment to kubuntu-desktop.

For XFCE enter xubuntu-desktop.

The end result will be very very similar to what you would get if you installed from the ubuntu, kubuntu or xubuntu CD and added server-related packages to it. But the kernel on the server CD is tuned better for the workloads you get when running as a server, e.g. by using the "Deadline" scheduler and less frequent clock interrupts.

Alternative:

If the above is giving you trouble, try the tasksel way.

(Warning: the following can remove packages that have been manually installed via apt-get.)

sudo tasksel

Then choose which package (e.g. Ubuntu Desktop) to install. Downloading the package will take a while (no progress bar for the download portion) so be patient.