Components Overview
Make sure to read the overview section before continuing, to get a grasp on core concept behind GOW. |
GOW is a composition of Docker containers that enable users to stream graphical applications to Moonlight clients.
We wrapped each individual piece of software with the necessary dependencies
into its own Docker image and use
docker-compose
in order to manage the
composition of all the necessary pieces.
Xorg & PulseAudio
These two components are in charge of Display and Audio, respectively.
-
If your OS comes with a desktop environment already, you will most likely want to use that instead of trying to run it in a container.
-
If you’re running a headless system you’ll need to run them in order to run graphical applications. You can use our Docker images for that.
While PulseAudio runs just fine without a real sound device, for best results
Xorg should be hardware accelerated using a GPU. That’s the main reason why we
choose the full Xorg server over Xvfb
.
While it’s more complicated to run the full Xorg server, the benefits of having
hardware acceleration are too great to be dismissed.
GUIs
Graphical applications can run easily on top of Xorg and PulseAudio — that’s how most desktop environments work!
Sharing sockets between containers is the mechanism that enables us to have proper isolation. Instead of having a big single Docker image which installs and runs all the individual pieces of software together, we can decouple them and share only a communication channel.
This means that it’s very simple to make a Docker container of any given GUI application and that same container will work both on GOW or on a normal Desktop Environment, enabling users to have a high degree of freedom on how to use them.
GPU
A GPU is not required to run any of this, but it’s highly recommended for best results.
Sharing a GPU across Docker containers is generally done by sharing the
DRM devices
(/dev/dri/cardX
). This should work as long as your GPU supports VA-API
.
Notably, NVIDIA cards don’t; instead we provide specific
instructions for them.