How to run Spice Agent
How To Run Spice Agent in Alpine
This is a guide on how to run Spice Agent in Alpine Linux 3.12.1-standard.
The Spice Agent can be used to get some additional features when running Alpine Linux in a Qemu/Libvirt VM.
Features
Working:
- Client mouse mode
- Automatic adjustment of the X-session resolution
- Clipboard sharing
Not working:
- The
State
field in Libvirt - it always shows "disconnected", even when it is working
Not tested:
- Transferring files
- Multiple displays/screens
Before You Start
Most features of the Spice Agent are only useful when running a graphical interface.
I roughly followed the Awesome(wm)_Setup guide, but substituted awesome
with i3wm
as that has my preference (you have to install i3status
manually, and use i3
in the .xinitrc
file).
For the Spice Agent to work, don't remove the Channel spice
that is automatically added by Libvirt.
Building the Spice Agent
Install the dependencies:
# apk add alpine-sdk autoconf automake glib-dev libxfixes-dev libxrandr-dev libxinerama-dev spice-protocol alsa-lib-dev dbus-dev libdrm-dev libpciaccess-dev
Get the source code:
$ git clone https://gitlab.freedesktop.org/spice/linux/vd_agent.git $ cd vd_agent $ git checkout spice-vdagent-0.20.0
We need this specific version because the newest version requires a newer spice-protocol
version than is provided by the repositories (version 0.14.1). If you follow this guide with a later version of Alpine, you may want to get a newer version from git as well.
Build the code (still in the vd_agent directory):
$ ./autogen.sh $ make
Install the program (should be optional, but I haven't tried it without yet):
# make install
Running the Spice Agent
This material is work-in-progress ... While this works, it's very rough and the steps need to be performed every time you want to run it. It would be nice to have init scripts to do this. |
First start the spice-vdagentd
:
# modprobe uinput # mkdir /run/spice-vdagentd # spice-vdagentd -d -x -X
You can also remove the lower-case -x
flag to deamonize the spice-vdagentd
.
Then start the spice-vdagent
:
$ spice-vdagent -x -d
Notice that there is no need to run this last command as root.
Using the virt edition of Alpine
This currently does not work on the virt edition (version 3.12.1), as it doesn't have uinput
enabled in the kernel. However, there are still several ways to get it working.
Run without the uinput
You can make the spice-vdagentd
work without the uinput module by starting it as follows, but it will disable the cursor while the spice-vdagent
is running:
# mkdir /run/spice-vdagentd # spice-vdagentd -d -x -X -u /dev/null -f
Build uinput as module
This material is work-in-progress ... This will build the module, and it can be loaded, but it doesn't install the module. This has yet to be added. |
Follow the steps in Setup your system and account for building packages and cd to the aports/main/linux-lts directory.
Check that the kernel version you've pulled is the same that you're running with uname -r
and head APKBUILD
.
If they mismatch, checkout the aports branch that has the same kernel version.
If they are the same, continue with the following steps:
$ abuild deps $ abuild fetch verify $ abuild unpack $ abuild prepare $ cd src/build-virt-x86_64
Now change CONFIG_INPUT_UINPUT
from not being included to CONFIG_INPUT_UINPUT=m
in the .config
file. Then proceed as follows:
$ make modules_prepare $ make drivers/input/misc/uinput.ko
This builds the uinput
module in the current directory. Every time you want to use it, you'll have to load it like this (still from aports/main/linux-lts/src/build-virt-x86_64):
# insmod drivers/input/misc/uinput.ko
After this, you can use the spice agent as described in Running the Spice Agent, except that the modprobe uinput
is not necessary.
Rebuild the kernel to include uinput
See Custom_Kernel for pointers on how to build a custom kernel. The option you'll need to change in the config is CONFIG_INPUT_UINPUT
.