1 |
commit: 1798441957485d5243aa4968ef183d28461b5093 |
2 |
Author: Brian Harring <ferringb <AT> chromium <DOT> org> |
3 |
AuthorDate: Sat Apr 14 22:54:32 2012 +0000 |
4 |
Commit: Brian Harring <ferringb <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Apr 14 23:47:58 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/kvm-tools.git;a=commit;h=17984419 |
7 |
|
8 |
Make foreground controllable. |
9 |
|
10 |
This deprecates the VNC option in favour of `FOREGROUND=vnc=:1`; in the |
11 |
process it makes turning off the display (none mode), and sdl mode |
12 |
possible. |
13 |
|
14 |
For sdl mode, it tries to rely on DISPLAY and XAUTHORITY to work. In |
15 |
my local usage, this *does* work, but wouldn't surprise me if there are |
16 |
other configurations where this doesn't (patches welcome). |
17 |
|
18 |
--- |
19 |
.../qemu-init-scripts/files/qemu-init-script | 68 ++++++++++++++++++-- |
20 |
1 files changed, 62 insertions(+), 6 deletions(-) |
21 |
|
22 |
diff --git a/app-emulation/qemu-init-scripts/files/qemu-init-script b/app-emulation/qemu-init-scripts/files/qemu-init-script |
23 |
index a42e866..9880a7b 100644 |
24 |
--- a/app-emulation/qemu-init-scripts/files/qemu-init-script |
25 |
+++ b/app-emulation/qemu-init-scripts/files/qemu-init-script |
26 |
@@ -16,6 +16,8 @@ PIDFILE=/var/run/vm/${SVCNAME}.pid |
27 |
MONITOR=/var/run/vm/${SVCNAME}.monitor |
28 |
QTAP_FILE=/var/run/vm/${SVCNAME}.qtap |
29 |
|
30 |
+ENABLE_SDL= |
31 |
+ |
32 |
discern_vm_binary() { |
33 |
case "$VMTYPE" in |
34 |
kvm) |
35 |
@@ -32,6 +34,35 @@ discern_vm_binary() { |
36 |
return 0 |
37 |
} |
38 |
|
39 |
+discern_foreground() { |
40 |
+ if [ -n "$VNC" ]; then |
41 |
+ ewarn "VNC option is going away; set FOREGROUND=vnc${VNC} instead" |
42 |
+ FOREGROUND="vnc=${VNC}" |
43 |
+ fi |
44 |
+ case "${FOREGROUND:-none}" in |
45 |
+ vnc*) |
46 |
+ VNC=${VNC#*=} |
47 |
+ if [ -z "$VNC" ]; then |
48 |
+ eerror "FOREGROUND vnc is incorrectly set; must specify an address (:1 for example)" |
49 |
+ return 1 |
50 |
+ fi |
51 |
+ ;; |
52 |
+ sdl*) |
53 |
+ ENABLE_SDL=${FOREGROUND#*=} |
54 |
+ if [ -z "${ENABLE_SDL}" ]; then |
55 |
+ eerror "FOREGROUND sdl is incorrectly set; must specify a DISPLAY address" |
56 |
+ return 1 |
57 |
+ fi |
58 |
+ ;; |
59 |
+ none) |
60 |
+ ;; |
61 |
+ *) |
62 |
+ eerror "Unknown FOREGROUND setting: $FOREGROUND" |
63 |
+ return 1 |
64 |
+ ;; |
65 |
+ esac |
66 |
+ return 0 |
67 |
+} |
68 |
|
69 |
DROP_USER=${DROP_USER:-nobody} |
70 |
MEMORY=${MEMORY:-512M} |
71 |
@@ -73,8 +104,10 @@ sanity_check() { |
72 |
eerror "couldn't find \$DISKIMAGE '$DISKIMAGE'" |
73 |
return 1; |
74 |
fi |
75 |
- discern_vm_binary |
76 |
+ discern_vm_binary || return 1 |
77 |
NIC_TYPE=${NIC_TYPE:-nat} |
78 |
+ |
79 |
+ discern_foreground || return 1 |
80 |
} |
81 |
|
82 |
start_pre() { |
83 |
@@ -107,17 +140,40 @@ start() { |
84 |
NIC_COMMAND[${#NIC_COMMAND[@]}]=user |
85 |
fi |
86 |
|
87 |
- ebegin "Starting ${VM_BINARY##*/} for ${VMNAME} at VNC port${VNC}" |
88 |
- start-stop-daemon --start "${VM_BINARY}" \ |
89 |
+ local ss_args=( ) |
90 |
+ local vm_args=( -daemonize ) |
91 |
+ |
92 |
+ if [ -n "${ENABLE_SDL}" ]; then |
93 |
+ ss_args[${#ss_args[@]}]=--env |
94 |
+ ss_args[${#ss_args[@]}]="DISPLAY=${ENABLE_SDL}" |
95 |
+ ss_args[${#ss_args[@]}]=--env |
96 |
+ local user_home=`getent passwd ${DROP_USER:-root} | cut -d: -f6` |
97 |
+ ss_args[${#ss_args[@]}]="XAUTHORITY=$user_home/.Xauthority" |
98 |
+ vm_args[${#vm_args[@]}]=-display |
99 |
+ vm_args[${#vm_args[@]}]=sdl |
100 |
+ elif [ -n "$VNC" ]; then |
101 |
+ vm_args[${#vm_args[@]}]=-display |
102 |
+ vm_args[${#vm_args[@]}]=vnc |
103 |
+ vm_args[${#vm_args[@]}]="${VNC}" |
104 |
+ else |
105 |
+ vm_args[${#vm_args[@]}]=-display |
106 |
+ vm_args[${#vm_args[@]}]=none |
107 |
+ fi |
108 |
+ |
109 |
+ ebegin "Starting ${VM_BINARY##*/} for ${VMNAME} ${FOREGROUND:+at ${FOREGROUND}}" |
110 |
+ start-stop-daemon \ |
111 |
+ --start "${VM_BINARY}" \ |
112 |
--pidfile ${PIDFILE} \ |
113 |
- -- -daemonize -pidfile ${PIDFILE} -monitor unix:${MONITOR},server,nowait \ |
114 |
+ "${ss_args[@]}" \ |
115 |
+ -- \ |
116 |
+ "${vm_args[@]}" \ |
117 |
+ -pidfile ${PIDFILE} -monitor unix:${MONITOR},server,nowait \ |
118 |
-runas ${DROP_USER} -name ${VMNAME} \ |
119 |
-drive file="${DISKIMAGE//,/,,}",if=${DRIVE_MODEL:-virtio},cache=${DRIVE_CACHE:-none} \ |
120 |
"${NIC_COMMAND[@]}" \ |
121 |
${DISABLE_KVM:---enable-kvm} \ |
122 |
- ${MEMORY:+-m ${MEMORY}} ${SMP:+-smp ${SMP}} ${VNC:+-vnc ${VNC}} ${OTHER_ARGS} |
123 |
+ ${MEMORY:+-m ${MEMORY}} ${SMP:+-smp ${SMP}} ${OTHER_ARGS} |
124 |
ret=$? |
125 |
- |
126 |
if [ "0" != "${ret}" -a -n "${QTAP}" ]; then |
127 |
qtap-manipulate destroy ${QTAP} |
128 |
fi |