x11spice
========

  x11spice connects a running X server as a Spice server.

It owes a debt to the excellent x11vnc project, from the libvncserver project.
That project proved that this could be done, and done well.  Some of the
logic, notably that of scan.c, was inspired by the code in x11vnc.


Requirements
------------
x11spice has been developed and tested on Linux desktop systems.
It could be extended to work on other UNIX systems with X11 servers with
a modest amount of work.

It has not at all been designed or intended to work with non X systems,
such as Windows or macOS.  The code was written with the hope that others
could make such an extension if they wanted to do the work, but it would
be a substantial amount of effort.


Building
--------

Building is pretty much a matter of doing configure && make.

If you are building from git, you will likely want to do:
    ./autogen.sh
to create and run configure.  You will need autoconf and automake.


If you have a regular source drop, you should be able to do:
    ./configure

Presuming that first step runs successfully, then you can just invoke:
    make

To build x11spice.

You can perform
    make install
to install x11spice to your system, although x11spice will run fine
out of the source tree simply by running
    src/x11spice

You can invoke
    make check
to run the regression tests to make sure everything is working well.


Configuration
-------------
x11spice will use, in this order:
  - Command line parameters
  - An x11spice file in the users's config directory (e.g. ~/.config/x11spice/x11spice.conf)
  - An x11spice file in the system configuration directory (e.g. /etc/xdg/x11spice/x11spice.conf)

Some options are only available in the configuration file, in an attempt to
make the command line usage somewhat more simple.

The xdg/x11spice//x11spice.conf file contains a commented example with all the
configuration examples described.


Usage
-----
The general idea is to invoke x11spice while connected to your X server.

You will need to select a port to listen to and a password.  There are
a variety of options to help with that selection.  The simplest command:
    x11spice --generate-password
should start a session on port 5900 and give you a one time
password you can use to connect.

Refer to the x11spice man page for more details.

Spice Video Dummy Driver
------------------------
If you wish to create a 'headless' connection to a server - create an
X session without using the main system display - there is a straight
forward process that is now included with x11spice.

That is, x11spice now optionally builds an Xorg driver that is based
on the dummy driver and the modesetting driver.  This gives a virtual
frame buffer driver which should include modern Mesa capabilities.

To use this driver, simply add:

  --enable-dummy

to the configure line.  This will build the Xorg driver.  A simplistic
example is included showing the general concepts of using this driver.
You can try this by running:
  spice-video-dummy/spicedummy.sh

That bash script is recommended reading.


Using code coverage (gcov)
-------------------------
If you want to use gcov for source code coverage, you will need
the AX_CODE_COVERAGE macro.  On Fedora, that is installed
by the autoconf-archive package.  Once you have that available,
uncomment the appropriate line in configure.ac and src/Makefile.am,
reconfigure with --enable-code-coverage, and rebuild.  That will
then enable a check-code-coverage target in the Makefile.


Community
---------
As of July 2016, x11spice was maintained by the Spice community, at
spice-space.org.  An IRC channel (#SPICE) and a mailing list (spice-devel)
are available.


History
-------
x11spice was initially created by Jeremy White <jwhite@codeweavers.com>
in July of 2016.
