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