From 00f469056893ae80fecefee44e09d6904b613de4 Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 30 Jul 2016 11:02:47 +0200 Subject: [PATCH] services: Add spice vdagent service. * gnu/services/spice.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (Various Services): New subheading. --- doc/guix.texi | 11 +++++++ gnu/local.mk | 1 + gnu/services/spice.scm | 75 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 gnu/services/spice.scm diff --git a/doc/guix.texi b/doc/guix.texi index 781f2f418f..29df0ddcc1 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -9921,6 +9921,17 @@ Finally, @var{extra-options} is a list of additional command-line options passed to @command{lircd}. @end deffn +@cindex spice +@subsubheading Spice Service + +The @code{(gnu services spice)} module provides the following service. + +@deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent] +Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon +that enables sharing the clipboard with a vm and setting the guest display +resolution when the graphical console window resizes. +@end deffn + @subsubsection Dictionary Services The @code{(gnu services dict)} module provides the following service: diff --git a/gnu/local.mk b/gnu/local.mk index 3444c2031f..c7311a4fd0 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -383,6 +383,7 @@ GNU_SYSTEM_MODULES = \ %D%/services/networking.scm \ %D%/services/shepherd.scm \ %D%/services/herd.scm \ + %D%/services/spice.scm \ %D%/services/ssh.scm \ %D%/services/web.scm \ %D%/services/xorg.scm \ diff --git a/gnu/services/spice.scm b/gnu/services/spice.scm new file mode 100644 index 0000000000..26f072e7a8 --- /dev/null +++ b/gnu/services/spice.scm @@ -0,0 +1,75 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 David Craven +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu services spice) + #:use-module (gnu packages spice) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (guix gexp) + #:use-module (guix records) + #:export (spice-vdagent-configuration + spice-vdagent-configuration? + spice-vdagent-service-type + spice-vdagent-service)) + +(define-record-type* + spice-vdagent-configuration make-spice-vdagent-configuration + spice-vdagent-configuration? + (spice-vdagent spice-vdagent-configuration-spice-vdagent + (default spice-vdagent))) + +(define (spice-vdagent-activation config) + "Return the activation gexp for CONFIG." + #~(mkdir-p "/var/run/spice-vdagentd")) + +(define (spice-vdagent-shepherd-service config) + "Return a for spice-vdagentd with CONFIG." + (define spice-vdagent (spice-vdagent-configuration-spice-vdagent config)) + + (define spice-vdagentd-command + (list + #~(string-append #$spice-vdagent "/sbin/spice-vdagentd") + "-x")) + + (list + (shepherd-service + (documentation "Spice vdagentd service") + (requirement '(udev)) + (provision '(spice-vdagentd)) + (start #~(make-forkexec-constructor #$@spice-vdagentd-command)) + (stop #~(make-kill-destructor))))) + +(define spice-vdagent-profile + (compose list spice-vdagent-configuration-spice-vdagent)) + +(define spice-vdagent-service-type + (service-type (name 'spice-vdagent) + (extensions + (list (service-extension shepherd-root-service-type + spice-vdagent-shepherd-service) + (service-extension activation-service-type + spice-vdagent-activation) + (service-extension profile-service-type + spice-vdagent-profile))))) + +(define* (spice-vdagent-service + #:optional (config (spice-vdagent-configuration))) + "Start the @command{vdagentd} and @command{vdagent} deamons +from @var{spice-vdagent} to enable guest window resizing and +clipboard sharing." + (service spice-vdagent-service-type config))