ReleaseEngineering/PuppetAgain/Modules/gui
The GUI module is responsible for implementing a GUI environment, generally suited for testing Firefox. If the `on_gpu` parameter is true, then the environment runs on the accelerated graphics chipset.
This module specifies the screen resolution and, where appropriate, the NVidia driver version.
By Operating System
Mac OS X
On OS X, the GUI is always running, and the onboard graphics chipset is suitable for Firefox testing. Outside of Puppet, the OS X testing hosts have an Extron EDID 101d installed on their output to fool them into thinking a screen of the appropriate depth and resolution is attached.
All that remains, then, is to set the screen resolution. This is accomplished with the `screenresolution` tool, hosted at git://github.com/jhford/screenresolution.git.
The gui::appearance class takes care of setting a sane background image.
Ubuntu
On Ubuntu, we install the default Unity environment, with startup customized to skip any display manager (like gdm) and go straight into a user session with the builder user. This startup occurs only after puppet runs successfully.
There are a number of hacks, many of them with 'sleep', to convince Unity to work in this environment.
VNC is configured, but not started by default. It can be started with a simple `start x11vnc`.
The gui::appearance class disables the screensaver.
Non-GPU
For non-GPU tests, any host will do. In most cases these are AWS hosts.
In this case, X is started in Xvfb, and Unity started within that context.
GPU
The Ubuntu systems we use are described in bug 780025:
- iX21X4 2U Neutron "Gemini" Series Four Node Hot-Pluggable Server (4 nodes per 2U)
- 4x 1 (4 total) NVIDIA GPU GeForce GT 610 per node
The puppet manifests are specifically geared toward success on this hardware. Unity and the NVidia drivers are *very* fragile, so any changes to accommodate other hardware - even seemingly innocuous changes - will need significant testing.
In this mode, the NVidia driver version specified in the manifests is installed and a carefully crafted xorg.conf put in place to run on the GPU. Among other things, this xorg.conf points to a binary EDID file grabbed from the same devices used for OS X, so the NVidia driver believes it is connected to the same sort of monitor, even though nothing is physically connected to the card's output.