1d514b0f3Smrg1. Introduction
2d514b0f3Smrg2. Building
3d514b0f3Smrg2.1 Building from source on fedora
4d514b0f3Smrg2.2 Building from source with your own Xserver
5d514b0f3Smrg3. Running
6d514b0f3Smrg
7d514b0f3Smrg= 1. Introduction =
8d514b0f3SmrgXspice is an X server and Spice server in one. It consists of a wrapper script
9d514b0f3Smrgfor executing Xorg with the right parameters and environment variables, a
10d514b0f3Smrgmodule names spiceqxl_drv.so implementing three drivers: a video mostly
11d514b0f3Smrgcode identical to the guest qxl X driver, and keyboard and mouse reading from
12d514b0f3Smrgthe spice inputs channel.
13d514b0f3Smrg
14d514b0f3SmrgXspice allows regular X connections, while a spice client provides the keyboard
15d514b0f3Smrgand mouse and video output.
16d514b0f3Smrg
17d514b0f3SmrgSpice client disconnections don't impact X client connections.
18d514b0f3Smrg
19d514b0f3SmrgXserver's select loop is reused to service spice client sockets
20d514b0f3Smrgand the qxl driver is reused together with some of the qemu qxl device code
21d514b0f3Smrg
22d514b0f3SmrgThe following changes have been done to the qxl driver.
23d514b0f3Smrg * it creates only one memslot, covering the whole of memory (much like
24d514b0f3Smrg  spice does in simple display mode, i.e. vga, and the tester does)
25d514b0f3Smrg * it invokes the whole of the qxl device from qemu, patching in both
26d514b0f3Smrg  directions.
27d514b0f3Smrg  * io becomes a function call instead of iob
28d514b0f3Smrg  * irq becomes a function call instead of setting a flag
29d514b0f3Smrg  * it runs spice server directly
30d514b0f3Smrg   * it is linked with spice-server.
31d514b0f3Smrg
32d514b0f3SmrgThe protocol is unchanged.
33d514b0f3Smrg
34d514b0f3Smrg= 2. Building =
35d514b0f3Smrg== 2.1 Building from source on fedora ==
36d514b0f3Smrg
37d514b0f3SmrgThe changes for ubuntu/debian should be minimal:
38d514b0f3Smrg * location of drivers for Xorg (just where you put any qxl_drv.so etc.)
39d514b0f3Smrg * location of Xorg config files
40d514b0f3Smrg
41d514b0f3SmrgIn fedora they are: (note the lib64 - replace with lib if running on 32 bit
42d514b0f3Smrgfedora)
43d514b0f3Smrg
44d514b0f3SmrgDRV_DIR=/usr/lib64/xorg/modules/drivers
45d514b0f3SmrgXORG_CONF_DIR=/etc/X11
46d514b0f3Smrg
47d514b0f3Smrggit clone git://anongit.freedesktop.org/xorg/driver/xf86-video-qxl xspice
48d514b0f3Smrgsudo yum install spice-server-devel spice-protocol
49d514b0f3Smrg
50d514b0f3Smrgcd xspice
51d514b0f3Smrgautoreconf -i && ./configure --enable-xspice && make
52d514b0f3Smrgsudo cp src/.libs/spiceqxl_drv.so $DRV_DIR
53d514b0f3Smrgsudo cp spiceqxl.xorg $XORG_CONF_DIR
54d514b0f3Smrg
55d514b0f3SmrgNote: spiceqxl.org is copied to $XORG_CONF_DIR because Xorg only looks in a
56d514b0f3Smrgvery particular config file path, and "." is not there (nor are absolute file
57d514b0f3Smrgnames allowed unless Xorg is run as root).
58d514b0f3Smrg
59d514b0f3Smrg== 2.2 Building from source with your own Xserver ==
60d514b0f3Smrg
61d514b0f3SmrgBuilding the whole xserver is lengthier but can be done without
62d514b0f3Smrgany root permissions.
63d514b0f3Smrg
64d514b0f3SmrgThis assumes you already have spice-protocol and spice-server
65d514b0f3Smrginstalled into $TEST prefix below.
66d514b0f3Smrg
67d514b0f3SmrgTEST=/store/test ( or TEST=$(pwd)/testxspice )
68d514b0f3Smrgmkdir -p $TEST/src
69d514b0f3Smrgcd $TEST/src
70d514b0f3Smrg
71d514b0f3Smrg# grab xserver, xspice, xextproto, xkbcomp and more
72d514b0f3Smrgfor src in \
73d514b0f3Smrg    git://anongit.freedesktop.org/xorg/proto/xextproto \
74d514b0f3Smrg    git://anongit.freedesktop.org/xorg/proto/x11proto \
75d514b0f3Smrg    git://anongit.freedesktop.org/xorg/proto/fontsproto \
76d514b0f3Smrg    git://anongit.freedesktop.org/xorg/app/xkbcomp \
77d514b0f3Smrg    git://anongit.freedesktop.org/xorg/xserver \
78d514b0f3Smrg    git://anongit.freedesktop.org/xorg/lib/libxtrans \
79d514b0f3Smrg    git://anongit.freedesktop.org/xorg/lib/libxkbfile \
80d514b0f3Smrg    git://anongit.freedesktop.org/xkeyboard-config \
81d514b0f3Smrg    git://git.freedesktop.org/git/spice/spice-protocol \
82d514b0f3Smrg    git://git.freedesktop.org/git/spice/spice ;
83d514b0f3Smrgdo
84d514b0f3Smrg    git clone $src;
85d514b0f3Smrgdone
86d514b0f3Smrg
87d514b0f3Smrggit clone git://anongit.freedesktop.org/xorg/driver/xf86-video-qxl xspice
88d514b0f3Smrg
89d514b0f3Smrg
90d514b0f3Smrgbuild and install into some non common prefix (not to overwrite
91d514b0f3Smrgyour existing server) - note that this is just for testing. This
92d514b0f3Smrgshould all work with the default server as well, but that server
93d514b0f3Smrgrequires root generally and this is undesirable for testing (and
94d514b0f3Smrgrunning actually).
95d514b0f3Smrg
96d514b0f3Smrgexport PKG_CONFIG_PATH=${TEST}/lib/pkgconfig:${TEST}/share/pkgconfig
97d514b0f3Smrgexport MAKEFLAGS="-j4"
98d514b0f3Smrg
99d514b0f3Smrg#first build spice (or sudo yum install spice-devel or spice-server-devel)
100d514b0f3Smrgsudo yum-builddep spice (or spice-server)
101d514b0f3Smrg(cd spice-protocol; ./autogen.sh --prefix=$TEST && make install)
102d514b0f3Smrg(cd spice; ./autogen.sh --prefix=$TEST  && make install)
103d514b0f3Smrg
104d514b0f3Smrg# now build xserver
105d514b0f3Smrgsudo yum install xorg-x11-server-devel libxcb-util-devel xcb-util-keysyms-devel libXfont-devel
106d514b0f3Smrg(cd xextproto; ./autogen.sh --prefix=$TEST --without-xmlto && make install)
107d514b0f3Smrg(cd x11proto; ./autogen.sh --prefix=$TEST && make install)
108d514b0f3Smrg(cd fontsproto; ./autogen.sh --prefix=$TEST && make install)
109d514b0f3Smrg(cd libxtrans; ./autogen.sh --prefix=$TEST && make install)
110d514b0f3Smrg(cd libxkbfile; ./autogen.sh --prefix=$TEST && make install)
111d514b0f3Smrg(cd xkbcomp; ./autogen.sh --prefix=$TEST && make install)
112d514b0f3Smrg(cd xkeyboard-config; ./autogen.sh --prefix=$TEST && make install)
113d514b0f3Smrg
114d514b0f3Smrg
115d514b0f3Smrg# make sure DBUS_TYPE_UNIX_FD is defined (failed on my RHEL6 machine)
116d514b0f3SmrgADDSTR="#ifndef DBUS_TYPE_UNIX_FD\n"
117d514b0f3SmrgADDSTR+="#define DBUS_TYPE_UNIX_FD  ((int) 'h')\n"
118d514b0f3SmrgADDSTR+="#endif"
119d514b0f3Smrgsed -i "/define DBUS_TIMEOUT/ a$ADDSTR" \
120d514b0f3Smrg    xserver/hw/xfree86/os-support/linux/systemd-logind.c
121d514b0f3Smrg
122d514b0f3Smrg# need ACLOCAL for libxtrans
123d514b0f3Smrgexport ACLOCAL="aclocal -I $TEST/share/aclocal"
124d514b0f3Smrg(cd xserver; ./autogen.sh --prefix=$TEST && make install)
125d514b0f3Smrg
126d514b0f3Smrg# and now xspice
127d514b0f3Smrg(cd xspice; ./autogen.sh --prefix=$TEST --enable-xspice && make install)
128d514b0f3Smrg
129d514b0f3Smrgmkdir -p $TEST/etc/X11
130d514b0f3Smrgcp xspice/examples/spiceqxl.xorg.conf.example $TEST/etc/X11/spiceqxl.xorg.conf
131d514b0f3Smrg
132d514b0f3Smrg# Possibly also build spice-vdagent:
133d514b0f3Smrgsudo yum install libXrandr-devel libXinerama-devel
134d514b0f3Smrggit clone git://anongit.freedesktop.org/spice/linux/vd_agent spice-vdagent
135d514b0f3Smrg(cd spice-vdagent ; ./autogen.sh --prefix=$TEST && make install)
136d514b0f3Smrg
137d514b0f3Smrg= 3. Running =
138d514b0f3Smrg$XORG is either your own built $TEST/bin/Xorg or just the default Xorg
139d514b0f3Smrg
140d514b0f3SmrgIf you built your own Xorg server:
141d514b0f3Smrgexport PATH="$TEST/bin:$TEST/sbin:$PATH"
142d514b0f3Smrgexport LD_LIBRARY_PATH=${TEST}/lib
143d514b0f3Smrgexport XORG=$TEST/bin/Xorg # or /usr/bin/Xorg
144d514b0f3Smrg
145d514b0f3Smrg== 3.1 Run Xorg directly ==
146d514b0f3SmrgRun server with:
147d514b0f3Smrgexport XSPICE_PORT=5900
148d514b0f3Smrg$XORG -noreset -config spiceqxl.xorg.conf :3.0
149d514b0f3Smrg
150d514b0f3Smrg== 3.2 Run using the Xspice script ==
151d514b0f3SmrgOr equivalently:
152d514b0f3Smrg
153d514b0f3Smrgxspice/scripts/Xspice --port 5900 --disable-ticketing --xorg $XORG :3.0 [--vdagent]
154d514b0f3Smrg(and many more options available -- see scripts/Xspice)
155d514b0f3Smrg
156d514b0f3SmrgRun X clients as usual by setting DISPLAY=:3.0, for example
157d514b0f3Smrg# DISPLAY=:3.0 firefox &  or 
158d514b0f3Smrg# DISPLAY=:3.0 twm &  DISPLAY=:3.0 xterm &
159d514b0f3Smrg
160d514b0f3SmrgRun spice client:
161d514b0f3Smrgsudo yum install virt-viewer
162d514b0f3Smrgremote-viewer spice://localhost:5900
163d514b0f3Smrg
164