README.xspice 5.78 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
1. Introduction
2. Building
2.1 Building from source on fedora
2.2 Building from source with your own Xserver
3. Running

= 1. Introduction =
Xspice is an X server and Spice server in one. It consists of a wrapper script
for executing Xorg with the right parameters and environment variables, a
module names spiceqxl_drv.so implementing three drivers: a video mostly
code identical to the guest qxl X driver, and keyboard and mouse reading from
the spice inputs channel.

Xspice allows regular X connections, while a spice client provides the keyboard
and mouse and video output.

Spice client disconnections don't impact X client connections.

Xserver's select loop is reused to service spice client sockets
and the qxl driver is reused together with some of the qemu qxl device code

The following changes have been done to the qxl driver.
 * it creates only one memslot, covering the whole of memory (much like
  spice does in simple display mode, i.e. vga, and the tester does)
 * it invokes the whole of the qxl device from qemu, patching in both
  directions.
  * io becomes a function call instead of iob
  * irq becomes a function call instead of setting a flag
  * it runs spice server directly
   * it is linked with spice-server.

The protocol is unchanged.

= 2. Building =
== 2.1 Building from source on fedora ==

The changes for ubuntu/debian should be minimal:
 * location of drivers for Xorg (just where you put any qxl_drv.so etc.)
 * location of Xorg config files

In fedora they are: (note the lib64 - replace with lib if running on 32 bit
fedora)

DRV_DIR=/usr/lib64/xorg/modules/drivers
XORG_CONF_DIR=/etc/X11

47
git clone git://anongit.freedesktop.org/xorg/driver/xf86-video-qxl xspice
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
sudo yum install spice-server-devel spice-protocol

cd xspice
autoreconf -i && ./configure --enable-xspice && make
sudo cp src/.libs/spiceqxl_drv.so $DRV_DIR
sudo cp spiceqxl.xorg $XORG_CONF_DIR

Note: spiceqxl.org is copied to $XORG_CONF_DIR because Xorg only looks in a
very particular config file path, and "." is not there (nor are absolute file
names allowed unless Xorg is run as root).

== 2.2 Building from source with your own Xserver ==

Building the whole xserver is lengthier but can be done without
any root permissions.

This assumes you already have spice-protocol and spice-server
installed into $TEST prefix below.

67 68 69 70 71 72 73 74 75 76 77 78 79
TEST=/store/test ( or TEST=$(pwd)/testxspice )
mkdir -p $TEST/src
cd $TEST/src

# grab xserver, xspice, xextproto, xkbcomp and more
for src in \
    git://anongit.freedesktop.org/xorg/proto/xextproto \
    git://anongit.freedesktop.org/xorg/proto/x11proto \
    git://anongit.freedesktop.org/xorg/proto/fontsproto \
    git://anongit.freedesktop.org/xorg/app/xkbcomp \
    git://anongit.freedesktop.org/xorg/xserver \
    git://anongit.freedesktop.org/xorg/lib/libxtrans \
    git://anongit.freedesktop.org/xorg/lib/libxkbfile \
80
    git://anongit.freedesktop.org/xkeyboard-config \
81 82 83 84 85 86 87
    git://git.freedesktop.org/git/spice/spice-protocol \
    git://git.freedesktop.org/git/spice/spice ;
do
    git clone $src;
done

git clone git://anongit.freedesktop.org/xorg/driver/xf86-video-qxl xspice
88 89 90 91 92 93 94 95


build and install into some non common prefix (not to overwrite
your existing server) - note that this is just for testing. This
should all work with the default server as well, but that server
requires root generally and this is undesireable for testing (and
running actually).

96 97 98 99 100 101 102 103 104 105
export PKG_CONFIG_PATH=${TEST}/lib/pkgconfig:${TEST}/share/pkgconfig
export MAKEFLAGS="-j4"

#first build spice (or sudo yum install spice-devel or spice-server-devel)
sudo yum-builddep spice (or spice-server)
(cd spice-protocol; ./autogen.sh --prefix=$TEST && make install)
(cd spice; ./autogen.sh --prefix=$TEST  && make install)

# now build xserver
sudo yum install xorg-x11-server-devel libxcb-util-devel xcb-util-keysyms-devel libXfont-devel
106
(cd xextproto; ./autogen.sh --prefix=$TEST --without-xmlto && make install)
107 108 109
(cd x11proto; ./autogen.sh --prefix=$TEST && make install)
(cd fontsproto; ./autogen.sh --prefix=$TEST && make install)
(cd libxtrans; ./autogen.sh --prefix=$TEST && make install)
110
(cd libxkbfile; ./autogen.sh --prefix=$TEST && make install)
111
(cd xkbcomp; ./autogen.sh --prefix=$TEST && make install)
112
(cd xkeyboard-config; ./autogen.sh --prefix=$TEST && make install)
113 114


115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
# make sure DBUS_TYPE_UNIX_FD is defined (failed on my RHEL6 machine)
ADDSTR="#ifndef DBUS_TYPE_UNIX_FD\n"
ADDSTR+="#define DBUS_TYPE_UNIX_FD  ((int) 'h')\n"
ADDSTR+="#endif"
sed -i "/define DBUS_TIMEOUT/ a$ADDSTR" \
    xserver/hw/xfree86/os-support/linux/systemd-logind.c

# need ACLOCAL for libxtrans
export ACLOCAL="aclocal -I $TEST/share/aclocal"
(cd xserver; ./autogen.sh --prefix=$TEST && make install)

# and now xspice
(cd xspice; ./autogen.sh --prefix=$TEST --enable-xspice && make install)

mkdir -p $TEST/etc/X11
cp xspice/examples/spiceqxl.xorg.conf.example $TEST/etc/X11/spiceqxl.xorg.conf
131

132 133 134 135 136
# Possibly also build spice-vdagent:
sudo yum install libXrandr-devel libXinerama-devel
git clone git://anongit.freedesktop.org/spice/linux/vd_agent spice-vdagent
(cd spice-vdagent ; ./autogen.sh --prefix=$TEST && make install)

137 138 139
= 3. Running =
$XORG is either your own built $TEST/bin/Xorg or just the default Xorg

140 141 142 143 144 145
If you built your own Xorg server:
export PATH="$TEST/bin:$TEST/sbin:$PATH"
export LD_LIBRARY_PATH=${TEST}/lib
export XORG=$TEST/bin/Xorg # or /usr/bin/Xorg

== 3.1 Run Xorg directly ==
146
Run server with:
147
export XSPICE_PORT=5900
148 149
$XORG -noreset -config spiceqxl.xorg.conf :3.0

150
== 3.2 Run using the Xspice script ==
151 152
Or equivalently:

153 154 155 156 157 158
xspice/scripts/Xspice --port 5900 --disable-ticketing --xorg $XORG :3.0 [--vdagent]
(and many more options available -- see scripts/Xspice)

Run X clients as usual by setting DISPLAY=:3.0, for example
# DISPLAY=:3.0 firefox &  or 
# DISPLAY=:3.0 twm &  DISPLAY=:3.0 xterm &
159

160 161 162
Run spice client:
sudo yum install virt-viewer
remote-viewer spice://localhost:5900
163