What is FreeNX?
FreeNX is a Thin Client tool that allows you to establish a graphical session to your Linux desktop. It is optimised to reduce the bandwidth requirements and runs over a secure SSH session. In some ways it is very similar to Microsoft’s Remote Desktop Client.
Installing FreeNX on Ubuntu 12.10 has a few challenges that this article should hopefully overcome for you.
Installation
First you need to add the official PPA by opening a terminal and running the following commands
sudo add-apt-repository -y ppa:freenx-team/ppa
FreeNX on this PPA is only available for LTS releases so you need to cheat by opening a terminal and run the following command.
sudo sed -i s/quantal/precise/g /etc/apt/sources.list.d/freenx-team-ppa-quantal.list
Refresh your package list sudo apt-get update
Then install the required packages (openssh-server will be pulled automatically if you don’t have it already installed)
sudo apt-get install freenx-server gnome-session-fallback
You probably noticed that I am installing the gnome-session-fallback package, that’s because FreeNX doesn’t work with compositing and requires a window manager that can be run without hardware acceleration.
In a perfect world, you would just need to configure a NX client to connect to your system and everything would be fine but then this article would be pretty pointless
Making it actually work
Force Gnome fall-back as the default session manager
sudo vi /etc/nxserver/node.conf
Identify the section containing the following text
# The key that contains the name of the script that starts a gnome session.
# It's run when a 'unix-gnome' session is requested by the client.
#COMMAND_START_GNOME='gnome-session --session gnome-fallback'
Remove the # in front of COMMAND_START_GNOME and save
No fonts are displayed in your session
This one really took me a long time to find! It appears to be a bug in libcairo version 1.12
sudo vi /etc/nxserver/node.conf
Looks for the following line
#AGENT_EXTRA_OPTIONS_X=”-nolisten tcp”
and replace it by
AGENT_EXTRA_OPTIONS_X=”-norender -nolisten tcp”
That should be it, everything should be working fine now