VirtualBox

source: vbox/trunk/doc/manual/en_US/user_AdvancedTopics.xml@ 96918

Last change on this file since 96918 was 96407, checked in by vboxsync, 3 years ago

scm copyright and license note update

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 247.5 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 Copyright (C) 2006-2022 Oracle and/or its affiliates.
4
5 This file is part of VirtualBox base platform packages, as
6 available from https://www.virtualbox.org.
7
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation, in version 3 of the
11 License.
12
13 This program is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, see <https://www.gnu.org/licenses>.
20
21 SPDX-License-Identifier: GPL-3.0-only
22-->
23<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
24"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"[
25<!ENTITY % all.entities SYSTEM "all-entities.ent">
26%all.entities;
27]>
28<chapter id="AdvancedTopics">
29
30 <title>Advanced Topics</title>
31
32 <sect1 id="autologon">
33
34 <title>Automated Guest Logins</title>
35
36 <para>
37 &product-name; provides Guest Addition modules for Windows, Linux,
38 and Oracle Solaris to enable automated logins on the guest.
39 </para>
40
41 <para>
42 When a guest operating system is running in a virtual machine, it
43 might be desirable to perform coordinated and automated logins
44 using credentials passed from the host. Credentials are user
45 name, password, and domain name, where each value might be empty.
46 </para>
47
48 <sect2 id="autologon_win">
49
50 <title>Automated Windows Guest Logins</title>
51
52 <para>
53 Windows provides a modular system login subsystem, called
54 Winlogon, which can be customized and extended by means of
55 so-called GINA (Graphical Identification and Authentication)
56 modules. In Windows Vista and later releases, the GINA modules
57 were replaced with a new mechanism called credential providers.
58 The &product-name; Guest Additions for Windows come with both, a
59 GINA and a credential provider module, and therefore enable any
60 Windows guest to perform automated logins.
61 </para>
62
63 <para>
64 To activate the &product-name; GINA or credential provider
65 module, install the Guest Additions using the command line
66 switch <option>/with_autologon</option>. All the following
67 manual steps required for installing these modules will be then
68 done by the installer.
69 </para>
70
71 <para>
72 To manually install the &product-name; GINA module, extract the
73 Guest Additions as shown in
74 <xref linkend="windows-guest-file-extraction" />, and copy the
75 <filename>VBoxGINA.dll</filename> file to the Windows
76 <filename>SYSTEM32</filename> directory. In the registry, create
77 the following key with a value of
78 <filename>VBoxGINA.dll</filename>:
79 </para>
80
81<screen>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL</screen>
82
83 <note>
84 <para>
85 The &product-name; GINA module is implemented as a wrapper
86 around the <filename>MSGINA.DLL</filename> standard Windows
87 GINA module. As a result, it might not work correctly with
88 third-party GINA modules.
89 </para>
90 </note>
91
92 <para>
93 To manually install the &product-name; credential provider
94 module, extract the Guest Additions as shown in
95 <xref linkend="windows-guest-file-extraction" /> and copy the
96 <filename>VBoxCredProv.dll</filename> file to the Windows
97 <filename>SYSTEM32</filename> directory. In the registry, create
98 the following keys:
99 </para>
100
101<screen>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
102Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
103
104HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}
105
106HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32</screen>
107
108 <para>
109 All default values, the key named <literal>Default</literal>,
110 must be set to <literal>VBoxCredProv</literal>.
111 </para>
112
113 <para>
114 Create the following string and assign it a value of
115 <literal>Apartment</literal>.
116 </para>
117
118<screen>HKEY_CLASSES_ROOT\CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32\ThreadingModel</screen>
119
120 <para>
121 To set credentials, use the following command on a
122 <emphasis>running</emphasis> VM:
123 </para>
124
125<screen>$ VBoxManage controlvm "Windows XP" setcredentials "John Doe" "secretpassword" "DOMTEST"</screen>
126
127 <para>
128 While the VM is running, the credentials can be queried by the
129 &product-name; login modules, GINA or credential provider, using
130 the &product-name; Guest Additions device driver. When Windows
131 is in <emphasis>logged out</emphasis> mode, the login modules
132 will constantly poll for credentials and if they are present, a
133 login will be attempted. After retrieving the credentials, the
134 login modules will erase them so that the above command will
135 have to be repeated for subsequent logins.
136 </para>
137
138 <para>
139 For security reasons, credentials are not stored in any
140 persistent manner and will be lost when the VM is reset. Also,
141 the credentials are write-only. There is no way to retrieve the
142 credentials from the host side. Credentials can be reset from
143 the host side by setting empty values.
144 </para>
145
146 <para>
147 Depending on the Windows guest version, the following
148 restrictions apply:
149 </para>
150
151 <itemizedlist>
152
153 <listitem>
154 <para>
155 For <emphasis role="bold">Windows XP guests.</emphasis> The
156 login subsystem needs to be configured to use the classic
157 login dialog, as the &product-name; GINA module does not
158 support the Windows XP-style welcome dialog.
159 </para>
160 </listitem>
161
162 <listitem>
163 <para>
164 <emphasis role="bold">Windows Vista, Windows 7, Windows 8,
165 and Windows 10 guests.</emphasis> The login subsystem does
166 not support the so-called Secure Attention Sequence,
167 <literal>Ctrl+Alt+Del</literal>. As a result, the guest's
168 group policy settings need to be changed to not use the
169 Secure Attention Sequence. Also, the user name given is only
170 compared to the true user name, not the user friendly name.
171 This means that when you rename a user, you still have to
172 supply the original user name as Windows never renames user
173 accounts internally.
174 </para>
175 </listitem>
176
177 <listitem>
178 <para>
179 Automatic login handling of the built-in
180 <emphasis role="bold">Windows Remote Desktop
181 Service</emphasis>, formerly known as Terminal Services, is
182 disabled by default. To enable it, create the following
183 registry key with a <literal>DWORD</literal> value of
184 <literal>1</literal>.
185 </para>
186
187<screen>HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\VirtualBox Guest Additions\AutoLogon</screen>
188 </listitem>
189
190 </itemizedlist>
191
192 <para>
193 The following command forces &product-name; to keep the
194 credentials after they were read by the guest and on VM reset:
195 </para>
196
197<screen>$ VBoxManage setextradata "Windows XP" VBoxInternal/Devices/VMMDev/0/Config/KeepCredentials 1</screen>
198
199 <para>
200 Note that this is a potential security risk, as a malicious
201 application running on the guest could request this information
202 using the proper interface.
203 </para>
204
205 </sect2>
206
207 <sect2 id="autologon_unix">
208
209 <title>Automated Linux and UNIX Guest Logins</title>
210
211 <para>
212 &product-name; provides a custom PAM module (Pluggable
213 Authentication Module) which can be used to perform automated
214 guest logins on platforms which support this framework.
215 Virtually all modern Linux and UNIX distributions rely on PAM.
216 </para>
217
218 <para>
219 For automated logins on Ubuntu, or Ubuntu-derived, distributions
220 using LightDM as the display manager. See
221 <xref linkend="autologon_unix_lightdm" />.
222 </para>
223
224 <para>
225 The <filename>pam_vbox.so</filename> module itself
226 <emphasis>does not</emphasis> do an actual verification of the
227 credentials passed to the guest OS. Instead it relies on other
228 modules such as <filename>pam_unix.so</filename> or
229 <filename>pam_unix2.so</filename> down in the PAM stack to do
230 the actual validation using the credentials retrieved by
231 <filename>pam_vbox.so</filename>. Therefore
232 <filename>pam_vbox.so</filename> has to be on top of the
233 authentication PAM service list.
234 </para>
235
236 <note>
237 <para>
238 The <filename>pam_vbox.so</filename> module only supports the
239 <literal>auth</literal> primitive. Other primitives such as
240 <literal>account</literal>, <literal>session</literal>, or
241 <literal>password</literal> are not supported.
242 </para>
243 </note>
244
245 <para>
246 The <filename>pam_vbox.so</filename> module is shipped as part
247 of the Guest Additions but it is not installed and/or activated
248 on the guest OS by default. In order to install it, it has to be
249 copied from
250 <filename>/opt/VBoxGuestAdditions-<replaceable>version</replaceable>/other/</filename>
251 to the security modules directory. This is usually
252 <filename>/lib/security/</filename> on 32-bit Linux guests or
253 <filename>/lib64/security/</filename> on 64-bit Linux guests.
254 Please refer to your guest OS documentation for the correct PAM
255 module directory.
256 </para>
257
258 <para>
259 For example, to use <filename>pam_vbox.so</filename> with a
260 Ubuntu Linux guest OS and the GNOME Desktop Manager (GDM) to log
261 in users automatically with the credentials passed by the host,
262 configure the guest OS as follows:
263 </para>
264
265 <orderedlist>
266
267 <listitem>
268 <para>
269 Copy the <filename>pam_vbox.so</filename> module to the
270 security modules directory. In this case,
271 <filename>/lib/security</filename>.
272 </para>
273 </listitem>
274
275 <listitem>
276 <para>
277 Edit the PAM configuration file for GDM, found at
278 <filename>/etc/pam.d/gdm</filename>. Add the line
279 <literal>auth requisite pam_vbox.so</literal> at the top.
280 Additionally, in most Linux distributions there is a file
281 called <filename>/etc/pam.d/common-auth</filename>. This
282 file is included in many other services, like the GDM file
283 mentioned above. There you also have to add the line
284 <literal>auth requisite pam_vbox.so</literal>.
285 </para>
286 </listitem>
287
288 <listitem>
289 <para>
290 If authentication against the shadow database using
291 <filename>pam_unix.so</filename> or
292 <filename>pam_unix2.so</filename> is desired, the argument
293 <literal>try_first_pass</literal> for
294 <filename>pam_unix.so</filename> or
295 <literal>use_first_pass</literal> for
296 <filename>pam_unix2.so</filename> is needed in order to pass
297 the credentials from the &product-name; module to the shadow
298 database authentication module. For Ubuntu, this needs to be
299 added to <filename>/etc/pam.d/common-auth</filename>, to the
300 end of the line referencing
301 <filename>pam_unix.so</filename>. This argument tells the
302 PAM module to use credentials already present in the stack,
303 such as the ones provided by the &product-name; PAM module.
304 </para>
305 </listitem>
306
307 </orderedlist>
308
309 <warning>
310 <para>
311 An incorrectly configured PAM stack can effectively prevent
312 you from logging into your guest system.
313 </para>
314 </warning>
315
316 <para>
317 To make deployment easier, you can pass the argument
318 <literal>debug</literal> right after the
319 <filename>pam_vbox.so</filename> statement. Debug log output
320 will then be recorded using syslog.
321 </para>
322
323 <note>
324 <para>
325 By default, <command>pam_vbox</command> does not wait for
326 credentials to arrive from the host. When a login prompt is
327 shown, for example by GDM/KDM or the text console, and
328 <command>pam_vbox</command> does not yet have credentials it
329 does not wait until they arrive. Instead the next module in
330 the PAM stack, depending on the PAM configuration, will have
331 the chance for authentication.
332 </para>
333 </note>
334
335 <para>
336 <command>pam_vbox</command> supports various guest property
337 parameters that are located in
338 <filename>/VirtualBox/GuestAdd/PAM/</filename>. These parameters
339 allow <command>pam_vbox</command> to wait for credentials to be
340 provided by the host and optionally can show a message while
341 waiting for those. The following guest properties can be set:
342 </para>
343
344 <itemizedlist>
345
346 <listitem>
347 <para>
348 <literal>CredsWait</literal>: Set to 1 if
349 <command>pam_vbox</command> should start waiting until
350 credentials arrive from the host. Until then no other
351 authentication methods such as manually logging in will be
352 available. If this property is empty or gets deleted no
353 waiting for credentials will be performed and
354 <command>pam_vbox</command> will act like before. This
355 property must be set read-only for the guest
356 (<literal>RDONLYGUEST</literal>).
357 </para>
358 </listitem>
359
360 <listitem>
361 <para>
362 <literal>CredsWaitAbort</literal>: Aborts waiting for
363 credentials when set to any value. Can be set from host and
364 the guest.
365 </para>
366 </listitem>
367
368 <listitem>
369 <para>
370 <literal>CredsWaitTimeout</literal>: Timeout, in seconds, to
371 let <command>pam_vbox</command> wait for credentials to
372 arrive. When no credentials arrive within this timeout,
373 authentication of <command>pam_vbox</command> will be set to
374 failed and the next PAM module in chain will be asked. If
375 this property is not specified, set to 0 or an invalid
376 value, an infinite timeout will be used. This property must
377 be set read-only for the guest
378 (<literal>RDONLYGUEST</literal>).
379 </para>
380 </listitem>
381
382 </itemizedlist>
383
384 <para>
385 To customize <command>pam_vbox</command> further there are the
386 following guest properties:
387 </para>
388
389 <itemizedlist>
390
391 <listitem>
392 <para>
393 <literal>CredsMsgWaiting</literal>: Custom message showed
394 while pam_vbox is waiting for credentials from the host.
395 This property must be set read-only for the guest
396 (<literal>RDONLYGUEST</literal>).
397 </para>
398 </listitem>
399
400 <listitem>
401 <para>
402 <literal>CredsMsgWaitTimeout</literal>: Custom message
403 showed when waiting for credentials by
404 <command>pam_vbox</command> has timed out. For example, they
405 did not arrive within time. This property must be set
406 read-only for the guest (<literal>RDONLYGUEST</literal>).
407 </para>
408 </listitem>
409
410 </itemizedlist>
411
412 <note>
413 <para>
414 If a <command>pam_vbox</command> guest property does not have
415 the correct flag set (<literal>RDONLYGUEST</literal>) the
416 property is ignored and, depending on the property, a default
417 value will be used. This can result in pam_vbox not waiting
418 for credentials. Consult the appropriate syslog file for more
419 information and use the <literal>debug</literal> option.
420 </para>
421 </note>
422
423 <sect3 id="autologon_unix_lightdm">
424
425 <title>&product-name; Greeter for Ubuntu/LightDM</title>
426
427 <para>
428 &product-name; comes with a greeter module, named
429 <command>vbox-greeter</command>, that can be used with
430 LightDM. LightDM is the default display manager for Ubuntu
431 Linux and therefore can also be used for automated guest
432 logins.
433 </para>
434
435 <para>
436 <command>vbox-greeter</command> does not need the
437 <command>pam_vbox</command> module described in
438 <xref linkend="autologon_unix"/>in order to function. It comes
439 with its own authentication mechanism provided by LightDM.
440 However, to provide maximum flexibility both modules can be
441 used together on the same guest.
442 </para>
443
444 <para>
445 As with the <command>pam_vbox</command> module,
446 <command>vbox-greeter</command> is shipped as part of the
447 Guest Additions but it is not installed or activated on the
448 guest OS by default. To install
449 <command>vbox-greeter</command> automatically upon Guest
450 Additions installation, use the
451 <option>--with-autologon</option> option when starting the
452 <command>VBoxLinuxAdditions.run</command> file:
453 </para>
454
455<screen># ./VBoxLinuxAdditions.run -- --with-autologon</screen>
456
457 <para>
458 For manual or postponed installation, copy the
459 <filename>vbox-greeter.desktop</filename> file from
460 <filename>/opt/VBoxGuestAdditions-&lt;version&gt;/other/</filename>
461 to the <filename>xgreeters</filename> directory, which is
462 usually <filename>/usr/share/xgreeters/</filename>. See your
463 guest OS documentation for the name of the correct LightDM
464 greeter directory.
465 </para>
466
467 <para>
468 The <command>vbox-greeter</command> module is installed by the
469 &product-name; Guest Additions installer and is located in
470 <filename>/usr/sbin/</filename>. To enable
471 <command>vbox-greeter</command> as the standard greeter
472 module, edit the file
473 <filename>/etc/lightdm/lightdm.conf</filename> as follows:
474 </para>
475
476<screen>[SeatDefaults]
477greeter-session=vbox-greeter</screen>
478
479 <note>
480 <itemizedlist>
481
482 <listitem>
483 <para>
484 The LightDM server must be fully restarted in order for
485 <command>vbox-greeter</command> to be used as the
486 default greeter. As <literal>root</literal> on Ubuntu,
487 run <command>service lightdm --full-restart</command> or
488 restart the guest.
489 </para>
490 </listitem>
491
492 <listitem>
493 <para>
494 <command>vbox-greeter</command> is independent of the
495 graphical session you choose, such as Gnome, KDE, or
496 Unity. However, <command>vbox-greeter</command> does
497 require FLTK 1.3 or later to implement its own user
498 interface.
499 </para>
500 </listitem>
501
502 </itemizedlist>
503 </note>
504
505 <para>
506 There are numerous guest properties which can be used to
507 further customize the login experience. For automatically
508 logging in users, the same guest properties apply as for
509 <command>pam_vbox</command>. See
510 <xref linkend="autologon_unix" />.
511 </para>
512
513 <para>
514 In addition to the previously mentioned guest properties,
515 <command>vbox-greeter</command> enables you to further
516 customize its user interface. The following guest properties
517 are located in the
518 <filename>/VirtualBox/GuestAdd/Greeter/</filename> directory:
519 </para>
520
521 <itemizedlist>
522
523 <listitem>
524 <para>
525 <literal>HideRestart</literal>: Set to 1 if
526 <command>vbox-greeter</command> should hide the button to
527 restart the guest. This property must be set read-only for
528 the guest (<literal>RDONLYGUEST</literal>).
529 </para>
530 </listitem>
531
532 <listitem>
533 <para>
534 <literal>HideShutdown</literal>: Set to 1 if
535 <command>vbox-greeter</command> should hide the button to
536 shutdown the guest. This property must be set read-only
537 for the guest (<literal>RDONLYGUEST</literal>).
538 </para>
539 </listitem>
540
541 <listitem>
542 <para>
543 <literal>BannerPath</literal>: Path to a
544 <filename>.PNG</filename> file to use as a banner image on
545 the top of the greeter. The image size must be 460 x 90
546 pixels, any bit depth. This property must be set read-only
547 for the guest (<literal>RDONLYGUEST</literal>).
548 </para>
549 </listitem>
550
551 <listitem>
552 <para>
553 <literal>UseTheming</literal>: Set to 1 for turning on the
554 following theming options. This property must be set
555 read-only for the guest (<literal>RDONLYGUEST</literal>).
556 </para>
557 </listitem>
558
559 <listitem>
560 <para>
561 <literal>Theme/BackgroundColor</literal>: Hexadecimal
562 RRGGBB color for the background. This property must be set
563 read-only for the guest (<literal>RDONLYGUEST</literal>).
564 </para>
565 </listitem>
566
567 <listitem>
568 <para>
569 <literal>Theme/LogonDialog/HeaderColor</literal>:
570 Hexadecimal RRGGBB foreground color for the header text.
571 This property must be set read-only for the guest
572 (<literal>RDONLYGUEST</literal>).
573 </para>
574 </listitem>
575
576 <listitem>
577 <para>
578 <literal>Theme/LogonDialog/BackgroundColor</literal>:
579 Hexadecimal RRGGBB color for the login dialog background.
580 This property must be set read-only for the guest
581 (<literal>RDONLYGUEST</literal>).
582 </para>
583 </listitem>
584
585 <listitem>
586 <para>
587 <literal>Theme/LogonDialog/ButtonColor</literal>:
588 Hexadecimal RRGGBB background color for the login dialog
589 button. This property must be set read-only for the guest
590 (<literal>RDONLYGUEST</literal>).
591 </para>
592 </listitem>
593
594 </itemizedlist>
595
596 <note>
597 <para>
598 The same restrictions for the guest properties above apply
599 as for the ones specified in the <literal>pam_vbox</literal>
600 section.
601 </para>
602 </note>
603
604 </sect3>
605
606 </sect2>
607
608 </sect1>
609
610 <sect1 id="adv-config-win-guest">
611
612 <title>Advanced Configuration for Windows Guests</title>
613
614 <sect2 id="sysprep">
615
616 <title>Automated Windows System Preparation</title>
617
618 <para>
619 Microsoft offers a system preparation tool called Sysprep, to
620 prepare a Windows system for deployment or redistribution. Some
621 Windows releases include Sysprep on the installation medium, but
622 the tool is also available for download from the Microsoft web
623 site. In a standard For most Windows versions, Sysprep is
624 included in a default installation. Sysprep mainly consists of
625 an executable called <command>sysprep.exe</command> which is
626 invoked by the user to put the Windows installation into
627 preparation mode.
628 </para>
629
630 <para>
631 The Guest Additions offer a way to launch a system preparation
632 on the guest operating system in an automated way, controlled
633 from the host system. See
634 <xref linkend="guestadd-guestcontrol" /> for details of how to
635 use this feature with the special identifier
636 <literal>sysprep</literal> as the program to execute, along with
637 the user name <literal>sysprep</literal> and password
638 <literal>sysprep</literal> for the credentials. Sysprep is then
639 started with the required system rights.
640 </para>
641
642 <note>
643 <para>
644 Specifying the location of <command>sysprep.exe</command> is
645 <emphasis role="bold">not possible</emphasis>. Instead the
646 following paths are used, based on the Windows release:
647 </para>
648
649 <itemizedlist>
650
651 <listitem>
652 <para>
653 <filename>C:\sysprep\sysprep.exe</filename> for Windows XP
654 and earlier
655 </para>
656 </listitem>
657
658 <listitem>
659 <para>
660 <filename>%WINDIR%\System32\sysprep\sysprep.exe</filename>
661 for Windows Vista and later
662 </para>
663 </listitem>
664
665 </itemizedlist>
666
667 <para>
668 The Guest Additions will automatically use the appropriate
669 path to execute the system preparation tool.
670 </para>
671 </note>
672
673 </sect2>
674
675 </sect1>
676
677 <sect1 id="adv-config-linux-guest">
678
679 <title>Advanced Configuration for Linux and Oracle Solaris Guests</title>
680
681 <sect2 id="linux-guest-manual-setup">
682
683 <title>Manual Setup of Selected Guest Services on Linux</title>
684
685 <para>
686 The &product-name; Guest Additions contain several different
687 drivers. If you do not want to configure them all, use the
688 following command to install the Guest Additions:
689 </para>
690
691<screen>$ sh ./VBoxLinuxAdditions.run no_setup</screen>
692
693 <para>
694 After running this script, run the <command>rcvboxadd
695 setup</command> command as <literal>root</literal> to compile
696 the kernel modules.
697 </para>
698
699 <para>
700 On some 64-bit guests, you must replace <filename>lib</filename>
701 with <filename>lib64</filename>. On older guests that do not run
702 the <command>udev</command> service, you must add the
703 <command>vboxadd</command> service to the default runlevel to
704 ensure that the modules are loaded.
705 </para>
706
707 <para>
708 To set up the time synchronization service, add the
709 <command>vboxadd-service</command> service to the default
710 runlevel. To set up the X11 and OpenGL part of the Guest
711 Additions, run the <command>rcvboxadd-x11 setup</command>
712 command. Note that you do not need to enable additional
713 services.
714 </para>
715
716 <para>
717 Use the <command>rcvboxadd setup</command> to recompile the
718 guest kernel modules.
719 </para>
720
721 <para>
722 After compilation, reboot your guest to ensure that the new
723 modules are loaded.
724 </para>
725
726 </sect2>
727
728 <sect2 id="guestxorgsetup">
729
730 <title>Guest Graphics and Mouse Driver Setup in Depth</title>
731
732 <para>
733 This section assumes that you are familiar with configuring the
734 X.Org server using xorg.conf and optionally the newer mechanisms
735 using hal or udev and xorg.conf.d. If not you can learn about
736 them by studying the documentation which comes with X.Org.
737 </para>
738
739 <para>
740 The &product-name; Guest Additions includes drivers for X.Org.
741 By default these drivers are in the following directory:
742 </para>
743
744 <para>
745 <filename>/opt/VBoxGuestAdditions-<replaceable>version</replaceable>/other/</filename>
746 </para>
747
748 <para>
749 The correct versions for the X server are symbolically linked
750 into the X.Org driver directories.
751 </para>
752
753 <para>
754 For graphics integration to work correctly, the X server must
755 load the <literal>vboxvideo</literal> driver. Many recent X
756 server versions look for it automatically if they see that they
757 are running in &product-name;. For an optimal user experience,
758 the guest kernel drivers must be loaded and the Guest Additions
759 tool <command>VBoxClient</command> must be running as a client
760 in the X session.
761 </para>
762
763 <para>
764 For mouse integration to work correctly, the guest kernel
765 drivers must be loaded. In addition, for legacy X servers the
766 correct <literal>vboxmouse</literal> driver must be loaded and
767 associated with <filename>/dev/mouse</filename> or
768 <filename>/dev/psaux</filename>. For most guests, a driver for a
769 PS/2 mouse must be loaded and the correct vboxmouse driver must
770 be associated with <filename>/dev/vboxguest</filename>.
771 </para>
772
773 <para>
774 The &product-name; guest graphics driver can use any graphics
775 configuration for which the virtual resolution fits into the
776 virtual video memory allocated to the virtual machine, minus a
777 small amount used by the guest driver, as described in
778 <xref linkend="settings-display" />. The driver will offer a
779 range of standard modes at least up to the default guest
780 resolution for all active guest monitors. The default mode can
781 be changed by setting the output property VBOX_MODE to
782 "&lt;width&gt;x&lt;height&gt;" for any guest monitor. When
783 VBoxClient and the kernel drivers are active this is done
784 automatically when the host requests a mode change. The driver
785 for older versions can only receive new modes by querying the
786 host for requests at regular intervals.
787 </para>
788
789 <para>
790 With legacy X Servers before version 1.3, you can also add your
791 own modes to the X server configuration file. Add them to the
792 "Modes" list in the "Display" subsection of the "Screen"
793 section. For example, the following section has a custom
794 2048x800 resolution mode added:
795 </para>
796
797<screen>Section "Screen"
798 Identifier "Default Screen"
799 Device "VirtualBox graphics card"
800 Monitor "Generic Monitor"
801 DefaultDepth 24
802 SubSection "Display"
803 Depth 24
804 Modes "2048x800" "800x600" "640x480"
805 EndSubSection
806EndSection</screen>
807
808 </sect2>
809
810 </sect1>
811
812 <sect1 id="cpuhotplug">
813
814 <title>CPU Hot-Plugging</title>
815
816 <para>
817 With virtual machines running modern server operating systems,
818 &product-name; supports CPU hot-plugging.
819 </para>
820
821 <para>
822 On a physical computer CPU hot-plugging would mean that a CPU can
823 be added or removed while the machine is running. &product-name;
824 supports adding and removing of virtual CPUs while a virtual
825 machine is running.
826 </para>
827
828 <para>
829 CPU hot-plugging works only with guest operating systems that
830 support the feature. So far this applies only to Linux and Windows
831 Server. Windows supports only hot-add, while Linux supports
832 hot-add and hot-remove. To use this feature with more than 8 CPUs,
833 a 64-bit Linux guest is required.
834 </para>
835
836 <para>
837 CPU hot-plugging is done using the <command>VBoxManage</command>
838 command-line interface. First, hot-plugging needs to be enabled
839 for a virtual machine:
840 </para>
841
842<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --cpu-hotplug on</screen>
843
844 <para>
845 The <option>--cpus</option> option is used to specify the maximum
846 number of CPUs that the virtual machine can have:
847 </para>
848
849<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --cpus 8</screen>
850
851 <para>
852 When the VM is off, you can then add and remove virtual CPUs with
853 the <command>VBoxManage modifyvm --plug-cpu</command> and
854 <command>VBoxManage modifyvm --unplug-cpu</command> commands, which
855 take the number of the virtual CPU as a parameter, as follows:
856 </para>
857
858<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --plug-cpu 3
859$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --unplug-cpu 3</screen>
860
861 <para>
862 Note that CPU 0 can never be removed.
863 </para>
864
865 <para>
866 While the VM is running, CPUs can be added and removed with the
867 <command>VBoxManage controlvm plugcpu</command> and
868 <command>VBoxManage controlvm unplugcpu</command> commands
869 instead, as follows:
870 </para>
871
872<screen>$ VBoxManage controlvm <replaceable>VM-name</replaceable> plugcpu 3
873$ VBoxManage controlvm <replaceable>VM-name</replaceable> unplugcpu 3</screen>
874
875 <para>
876 See <xref linkend="vboxmanage-modifyvm" /> and
877 <xref linkend="vboxmanage-controlvm" /> for details.
878 </para>
879
880 <para>
881 With Linux guests, the following applies:
882 </para>
883
884 <para>
885 To prevent ejection while the CPU is still used it has to be
886 ejected from within the guest before. The Linux Guest Additions
887 contain a service which receives hot-remove events and ejects the
888 CPU. Also, after a CPU is added to the VM it is not automatically
889 used by Linux. The Linux Guest Additions service will take care of
890 that if installed. If not a CPU can be started with the following
891 command:
892 </para>
893
894<screen>$ echo 1 &gt; /sys/devices/system/cpu/cpu&lt;id&gt;/online</screen>
895
896 </sect1>
897
898<!--<sect1 id="pcipassthrough">
899
900 <title>PCI Passthrough</title>
901
902 <para>
903 When running on Linux hosts with a kernel version later than
904 <literal>2.6.31</literal>, experimental host PCI devices
905 passthrough is available.
906 </para>
907
908 <note>
909 <para>
910 The PCI passthrough module is shipped as an &product-name;
911 extension package, which must be installed separately. See
912 <xref linkend="intro-installing" />.
913 </para>
914 </note>
915
916 <para>
917 This feature enables a guest to directly use physical PCI devices
918 on the host, even if host does not have drivers for this
919 particular device. Both, regular PCI and some PCI Express cards,
920 are supported. AGP and certain PCI Express cards are not supported
921 at the moment if they rely on Graphics Address Remapping Table
922 (GART) unit programming for texture management as it does rather
923 non-trivial operations with pages remapping interfering with
924 IOMMU. This limitation may be lifted in future releases.
925 </para>
926
927 <para>
928 To be fully functional, PCI passthrough support in &product-name;
929 depends upon an IOMMU hardware unit. If the device uses bus
930 mastering, for example it performs DMA to the OS memory on its
931 own, then an IOMMU is required. Otherwise such DMA transactions
932 may write to the wrong physical memory address as the device DMA
933 engine is programmed using a device-specific protocol to perform
934 memory transactions. The IOMMU functions as translation unit
935 mapping physical memory access requests from the device using
936 knowledge of the guest physical address to host physical addresses
937 translation rules.
938 </para>
939
940 <para>
941 Intel's solution for IOMMU is called Intel Virtualization
942 Technology for Directed I/O (VT-d), and AMD's solution is called
943 AMD-Vi. Check your motherboard datasheet for the appropriate
944 technology. Even if your hardware does not have a IOMMU, certain
945 PCI cards may work, such as serial PCI adapters, but the guest
946 will show a warning on boot and the VM execution will terminate if
947 the guest driver will attempt to enable card bus mastering.
948 </para>
949
950 <para>
951 It is very common that the BIOS or the host OS disables the IOMMU
952 by default. So before any attempt to use it please make sure that
953 the following apply:
954 </para>
955
956 <itemizedlist>
957
958 <listitem>
959 <para>
960 Your motherboard has an IOMMU unit.
961 </para>
962 </listitem>
963
964 <listitem>
965 <para>
966 Your CPU supports the IOMMU.
967 </para>
968 </listitem>
969
970 <listitem>
971 <para>
972 The IOMMU is enabled in the BIOS.
973 </para>
974 </listitem>
975
976 <listitem>
977 <para>
978 The VM must run with VT-x/AMD-V and nested paging enabled.
979 </para>
980 </listitem>
981
982 <listitem>
983 <para>
984 Your Linux kernel was compiled with IOMMU support, including
985 DMA remapping. See the <literal>CONFIG_DMAR</literal> kernel
986 compilation option. The PCI stub driver
987 (<literal>CONFIG_PCI_STUB</literal>) is required as well.
988 </para>
989 </listitem>
990
991 <listitem>
992 <para>
993 Your Linux kernel recognizes and uses the IOMMU unit. The
994 <literal>intel_iommu=on</literal> boot option could be needed.
995 Search for DMAR and PCI-DMA in kernel boot log.
996 </para>
997 </listitem>
998
999 </itemizedlist>
1000
1001 <para>
1002 Once you made sure that the host kernel supports the IOMMU, the
1003 next step is to select the PCI card and attach it to the guest. To
1004 figure out the list of available PCI devices, use the
1005 <command>lspci</command> command. The output will look as follows:
1006 </para>
1007
1008<screen>01:00.0 VGA compatible controller: ATI Technologies Inc Cedar PRO [Radeon HD 5450]
100901:00.1 Audio device: ATI Technologies Inc Manhattan HDMI Audio [Mobility Radeon HD 5000 Series]
101002:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit
1011 Ethernet controller (rev 03)
101203:00.0 SATA controller: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
101303:00.1 IDE interface: JMicron Technology Corp. JMB362/JMB363 Serial ATA Controller (rev 03)
101406:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8500 GT] (rev a1)</screen>
1015
1016 <para>
1017 The first column is a PCI address, in the format
1018 <literal><replaceable>bus</replaceable>:<replaceable>device</replaceable>.<replaceable>function</replaceable></literal>.
1019 This address could be used to identify the device for further
1020 operations. For example, to attach a PCI network controller on the
1021 system listed above to the second PCI bus in the guest, as device
1022 5, function 0, use the following command:
1023 </para>
1024
1025<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> -\-pciattach 02:00.0@01:05.0</screen>
1026
1027 <para>
1028 To detach the same device, use:
1029 </para>
1030
1031<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> -\-pcidetach 02:00.0</screen>
1032
1033 <para>
1034 Please note that both host and guest could freely assign a
1035 different PCI address to the card attached during runtime, so
1036 those addresses only apply to the address of the card at the
1037 moment of attachment on the host, and during BIOS PCI init on the
1038 guest.
1039 </para>
1040
1041 <para>
1042 If the virtual machine has a PCI device attached, certain
1043 limitations apply:
1044 </para>
1045
1046 <itemizedlist>
1047
1048 <listitem>
1049 <para>
1050 Only PCI cards with non-shared interrupts, such as those using
1051 MSI on the host, are supported at the moment.
1052 </para>
1053 </listitem>
1054
1055 <listitem>
1056 <para>
1057 No guest state can be reliably saved or restored. The internal
1058 state of the PCI card cannot be retrieved.
1059 </para>
1060 </listitem>
1061
1062 <listitem>
1063 <para>
1064 Teleportation, also called live migration, does not work. The
1065 internal state of the PCI card cannot be retrieved.
1066 </para>
1067 </listitem>
1068
1069 <listitem>
1070 <para>
1071 No lazy physical memory allocation. The host will preallocate
1072 the whole RAM required for the VM on startup, as we cannot
1073 catch physical hardware accesses to the physical memory.
1074 </para>
1075 </listitem>
1076
1077 </itemizedlist>
1078
1079 </sect1>-->
1080
1081 <sect1 id="webcam-passthrough">
1082
1083 <title>Webcam Passthrough</title>
1084
1085 <sect2 id="webcam-using-guest">
1086
1087 <title>Using a Host Webcam in the Guest</title>
1088
1089 <para>
1090 &product-name; includes a feature called <emphasis>webcam
1091 passthrough</emphasis>, which enables a guest to use a host
1092 webcam. This complements the general USB passthrough support
1093 which was the typical way of using host webcams in legacy
1094 releases. The webcam passthrough support can handle non-USB
1095 video sources in theory, but this is completely untested.
1096 </para>
1097
1098 <note>
1099 <para>
1100 The webcam passthrough module is shipped as part of the
1101 &product-name; extension pack, which must be installed
1102 separately. See <xref linkend="intro-installing" />.
1103 </para>
1104 </note>
1105
1106 <para>
1107 The host webcam can be attached to the VM using the
1108 <emphasis role="bold">Devices</emphasis> menu in the VM menu
1109 bar. The <emphasis role="bold">Webcams</emphasis> menu contains
1110 a list of available video input devices on the host. Clicking on
1111 a webcam name attaches or detaches the corresponding host
1112 device.
1113 </para>
1114
1115 <para>
1116 The <command>VBoxManage</command> command line tool can be used
1117 to enable webcam passthrough. Please see the host-specific
1118 sections below for additional details. The following commands
1119 are available:
1120 </para>
1121
1122 <itemizedlist>
1123
1124 <listitem>
1125 <para>
1126 Get a list of host webcams, or other video input devices:
1127 </para>
1128
1129<screen>$ VBoxManage list webcams</screen>
1130
1131 <para>
1132 The output format is as follows:
1133 </para>
1134
1135<screen>alias "user friendly name"
1136host path or identifier</screen>
1137
1138 <para>
1139 The alias can be used as a shortcut in other commands. Alias
1140 '.0' means the default video input device on the host. Alias
1141 '.1', '.2'means first, second video input device, and so on.
1142 The device order is host-specific.
1143 </para>
1144 </listitem>
1145
1146 <listitem>
1147 <para>
1148 Attach a webcam to a running VM, as follows:
1149 </para>
1150
1151<screen>VBoxManage controlvm <replaceable>VM name</replaceable> webcam attach [<replaceable>host_path</replaceable>|<replaceable>alias</replaceable> [<replaceable>settings</replaceable>]]</screen>
1152
1153 <para>
1154 This attaches a USB webcam device to the guest.
1155 </para>
1156
1157 <para>
1158 The <literal>settings</literal> parameter is a string
1159 <literal>Setting1=Value1;Setting2=Value2</literal>, which
1160 enables you to configure the emulated webcam device. The
1161 following settings are supported:
1162 </para>
1163
1164 <itemizedlist>
1165
1166 <listitem>
1167 <para>
1168 <literal>MaxFramerate</literal>: The highest rate at
1169 which video frames are sent to the guest. A higher frame
1170 rate requires more CPU power. Therefore sometimes it is
1171 useful to set a lower limit. Default is no limit and
1172 allow the guest to use all frame rates supported by the
1173 host webcam.
1174 </para>
1175 </listitem>
1176
1177 <listitem>
1178 <para>
1179 <literal>MaxPayloadTransferSize</literal>: How many
1180 bytes the emulated webcam can send to the guest at a
1181 time. Default value is 3060 bytes, which is used by some
1182 webcams. Higher values can slightly reduce CPU load, if
1183 the guest is able to use larger buffers. However, a high
1184 <literal>MaxPayloadTransferSize</literal> might be not
1185 supported by some guests.
1186 </para>
1187 </listitem>
1188
1189 </itemizedlist>
1190 </listitem>
1191
1192 <listitem>
1193 <para>
1194 Detach a webcam from a running VM, as follows:
1195 </para>
1196
1197<screen>VBoxManage controlvm <replaceable>VM-name</replaceable> webcam detach [<replaceable>host_path</replaceable>|<replaceable>alias</replaceable>]</screen>
1198 </listitem>
1199
1200 <listitem>
1201 <para>
1202 List the webcams attached to a running VM, as follows:
1203 </para>
1204
1205<screen>VBoxManage controlvm <replaceable>VM-name</replaceable> webcam list</screen>
1206
1207 <para>
1208 The output contains the path or alias which was used in the
1209 <command>webcam attach</command> command for each attached
1210 webcam.
1211 </para>
1212 </listitem>
1213
1214 </itemizedlist>
1215
1216 </sect2>
1217
1218 <sect2 id="webcam-win-hosts">
1219
1220 <title>Windows Hosts</title>
1221
1222 <para>
1223 When the webcam device is detached from the host, the emulated
1224 webcam device is automatically detached from the guest.
1225 </para>
1226
1227 </sect2>
1228
1229 <sect2 id="webcam-mac-hosts">
1230
1231 <title>Mac OS X Hosts</title>
1232
1233 <para>
1234 Mac OS X version 10.9 or later is required.
1235 </para>
1236
1237 <para>
1238 When the webcam device is detached from the host, the emulated
1239 webcam device remains attached to the guest and must be manually
1240 detached using the <command>VBoxManage controlvm
1241 <replaceable>VM-name</replaceable> webcam detach</command>
1242 command.
1243 </para>
1244
1245 </sect2>
1246
1247 <sect2 id="webcam-linux-hosts">
1248
1249 <title>Linux and Oracle Solaris Hosts</title>
1250
1251 <para>
1252 When the webcam is detached from the host the emulated webcam
1253 device is automatically detached from the guest only if the
1254 webcam is streaming video. If the emulated webcam is inactive it
1255 should be manually detached using the <command>VBoxManage
1256 controlvm <replaceable>VM-name</replaceable> webcam
1257 detach</command> command.
1258 </para>
1259
1260 <para>
1261 Aliases <filename>.0</filename> and <filename>.1</filename> are
1262 mapped to <filename>/dev/video0</filename>, alias
1263 <filename>.2</filename> is mapped to
1264 <filename>/dev/video1</filename> and so forth.
1265 </para>
1266
1267 </sect2>
1268
1269 </sect1>
1270
1271 <sect1 id="adv-display-config">
1272
1273 <title>Advanced Display Configuration</title>
1274
1275 <sect2 id="customvesa">
1276
1277 <title>Custom VESA Resolutions</title>
1278
1279 <para>
1280 Apart from the standard VESA resolutions, the &product-name;
1281 VESA BIOS enables you to add up to 16 custom video modes which
1282 will be reported to the guest operating system. When using
1283 Windows guests with the &product-name; Guest Additions, a custom
1284 graphics driver will be used instead of the fallback VESA
1285 solution so this information does not apply.
1286 </para>
1287
1288 <para>
1289 Additional video modes can be configured for each VM using the
1290 extra data facility. The extra data key is called
1291 <literal>CustomVideoMode<replaceable>x</replaceable></literal>
1292 with <replaceable>x</replaceable> being a number from 1 to 16.
1293 Please note that modes will be read from 1 until either the
1294 following number is not defined or 16 is reached. The following
1295 example adds a video mode that corresponds to the native display
1296 resolution of many notebook computers:
1297 </para>
1298
1299<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "CustomVideoMode1" "1400x1050x16"</screen>
1300
1301 <para>
1302 The VESA mode IDs for custom video modes start at
1303 <literal>0x160</literal>. In order to use the above defined
1304 custom video mode, the following command line has to be supplied
1305 to Linux:
1306 </para>
1307
1308<screen>vga = 0x200 | 0x160
1309vga = 864</screen>
1310
1311 <para>
1312 For guest operating systems with &product-name; Guest Additions,
1313 a custom video mode can be set using the video mode hint
1314 feature.
1315 </para>
1316
1317 </sect2>
1318
1319 <sect2 id="max-resolution-guests">
1320
1321 <title>Configuring the Maximum Resolution of Guests When Using the Graphical
1322 Frontend</title>
1323
1324 <para>
1325 When guest systems with the Guest Additions installed are
1326 started using the graphical frontend, the normal &product-name;
1327 application, they will not be allowed to use screen resolutions
1328 greater than the host's screen size unless the user manually
1329 resizes them by dragging the window, switching to full screen or
1330 seamless mode or sending a video mode hint using
1331 <command>VBoxManage</command>. This behavior is what most users
1332 will want, but if you have different needs, you can change it by
1333 issuing one of the following commands from the command line:
1334 </para>
1335
1336 <itemizedlist>
1337
1338 <listitem>
1339 <para>
1340 Remove all limits on guest resolutions.
1341 </para>
1342
1343<screen>VBoxManage setextradata global GUI/MaxGuestResolution any</screen>
1344 </listitem>
1345
1346 <listitem>
1347 <para>
1348 Manually specify a maximum resolution.
1349 </para>
1350
1351<screen>VBoxManage setextradata global GUI/MaxGuestResolution <replaceable>width</replaceable>x<replaceable>height</replaceable></screen>
1352 </listitem>
1353
1354 <listitem>
1355 <para>
1356 Restore the default settings to all guest VMs.
1357 </para>
1358
1359<screen>VBoxManage setextradata global GUI/MaxGuestResolution auto</screen>
1360 </listitem>
1361
1362 </itemizedlist>
1363
1364 </sect2>
1365
1366 </sect1>
1367
1368 <sect1 id="adv-storage-config">
1369
1370 <title>Advanced Storage Configuration</title>
1371
1372 <sect2 id="rawdisk">
1373
1374 <title>Using a Raw Host Hard Disk From a Guest</title>
1375
1376 <para>
1377 As an alternative to using virtual disk images as described in
1378 <xref linkend="storage" />, &product-name; can also present
1379 either entire physical hard disks or selected partitions as
1380 virtual disks to virtual machines.
1381 </para>
1382
1383 <para>
1384 With &product-name;, this type of access is called <emphasis>raw
1385 hard disk access</emphasis>. It enables a guest operating system
1386 to access its virtual hard disk without going through the host
1387 OS file system. The actual performance difference for image
1388 files compared to raw disk varies greatly depending on the
1389 overhead of the host file system, whether dynamically growing
1390 images are used, and on host OS caching strategies. The caching
1391 indirectly also affects other aspects such as failure behavior.
1392 For example, whether the virtual disk contains all data written
1393 before a host OS crash. Consult your host OS documentation for
1394 details on this.
1395 </para>
1396
1397 <warning>
1398 <para>
1399 Raw hard disk access is for expert users only. Incorrect use
1400 or use of an outdated configuration can lead to
1401 <emphasis role="bold">total loss of data</emphasis> on the
1402 physical disk. Most importantly, <emphasis>do not</emphasis>
1403 attempt to boot the partition with the currently running host
1404 operating system in a guest. This will lead to severe data
1405 corruption.
1406 </para>
1407 </warning>
1408
1409 <para>
1410 Raw hard disk access, both for entire disks and individual
1411 partitions, is implemented as part of the VMDK image format
1412 support. As a result, you will need to create a special VMDK
1413 image file which defines where the data will be stored. After
1414 creating such a special VMDK image, you can use it like a
1415 regular virtual disk image. For example, you can use the
1416 VirtualBox Manager, see <xref linkend="vdis" />, or
1417 <command>VBoxManage</command> to assign the image to a virtual
1418 machine.
1419 </para>
1420
1421 <sect3 id="rawdisk-access-entire-physical-disk">
1422
1423 <title>Access to Entire Physical Hard Disk</title>
1424
1425 <para>
1426 While this variant is the simplest to set up, you must be
1427 aware that this will give a guest operating system direct and
1428 full access to an <emphasis>entire physical disk</emphasis>.
1429 If your <emphasis>host</emphasis> operating system is also
1430 booted from this disk, please take special care to not access
1431 the partition from the guest at all. On the positive side, the
1432 physical disk can be repartitioned in arbitrary ways without
1433 having to recreate the image file that gives access to the raw
1434 disk.
1435 </para>
1436
1437 <para>
1438 On a Linux host, to create an image that represents an entire
1439 physical hard disk which will not contain any actual data, as
1440 this will all be stored on the physical disk, use the
1441 following command:
1442 </para>
1443
1444<screen>$ VBoxManage createmedium disk --filename <replaceable>path-to-file</replaceable>.vmdk --format=VMDK
1445 --variant RawDisk --property RawDrive=/dev/sda</screen>
1446
1447 <para>
1448 This creates the
1449 <filename><replaceable>path-to-file</replaceable>.vmdk</filename>
1450 file image that must be an absolute path. All data is read and
1451 written from <filename>/dev/sda</filename>.
1452 </para>
1453
1454 <para>
1455 On a Windows host, instead of the above device specification,
1456 for example use <filename>\\.\PhysicalDrive0</filename>. On a
1457 Mac OS X host, instead of the above device specification use
1458 for example <filename>/dev/rdisk1</filename>. Note that on Mac
1459 OS X you can only get access to an entire disk if no volume is
1460 mounted from it.
1461 </para>
1462
1463 <para>
1464 Creating the image requires read/write access for the given
1465 device. Read/write access is also later needed when using the
1466 image from a virtual machine. On some host platforms, such as
1467 Windows, raw disk access may be restricted and not permitted
1468 by the host OS in some situations.
1469 </para>
1470
1471 <para>
1472 Just like with regular disk images, this does not
1473 automatically attach the newly created image to a virtual
1474 machine. This can be done as follows:
1475 </para>
1476
1477<screen>$ VBoxManage storageattach WindowsXP --storagectl "IDE Controller" \
1478 --port 0 --device 0 --type hdd --medium <replaceable>path-to-file</replaceable>.vmdk</screen>
1479
1480 <para>
1481 When this is done the selected virtual machine will boot from
1482 the specified physical disk.
1483 </para>
1484
1485 </sect3>
1486
1487 <sect3 id="rawdisk-access-disk-partitions">
1488
1489 <title>Access to Individual Physical Hard Disk Partitions</title>
1490
1491 <para>
1492 This <emphasis>raw partition support</emphasis> is quite
1493 similar to the full hard disk access described above. However,
1494 in this case, any partitioning information will be stored
1495 inside the VMDK image. This means that you can install a
1496 different boot loader in the virtual hard disk without
1497 affecting the host's partitioning information. While the guest
1498 will be able to <emphasis>see</emphasis> all partitions that
1499 exist on the physical disk, access will be filtered in that
1500 reading from partitions for which no access is allowed the
1501 partitions will only yield zeroes, and all writes to them are
1502 ignored.
1503 </para>
1504
1505 <para>
1506 To create a special image for raw partition support, which
1507 will contain a small amount of data, on a Linux host, use the
1508 command:
1509 </para>
1510
1511<screen>$ VBoxManage createmedium disk --filename <replaceable>path-to-file</replaceable>.vmdk --format=VMDK
1512--variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5</screen>
1513
1514 <para>
1515 The command is identical to the one for full hard disk access,
1516 except for the additional
1517 <option>--property Partitions=1,5</option>
1518 parameter. This example would create the image
1519 <filename><replaceable>path-to-file</replaceable>.vmdk</filename>,
1520 which must be absolute, and partitions 1 and 5 of
1521 <filename>/dev/sda</filename> would be made accessible to the
1522 guest.
1523 </para>
1524
1525 <para>
1526 &product-name; uses the same partition numbering as your Linux
1527 host. As a result, the numbers given in the above example
1528 would refer to the first primary partition and the first
1529 logical drive in the extended partition, respectively.
1530 </para>
1531
1532 <para>
1533 On a Windows host, instead of the above device specification,
1534 use for example <filename>\\.\PhysicalDrive0</filename>. On a
1535 Mac OS X host, instead of the above device specification use
1536 <filename>/dev/rdisk1</filename>, for example. Note that on OS
1537 X you can only use partitions which are not mounted. Unmount
1538 the respective disk first using
1539 <emphasis>diskutil unmountDisk <filename>/dev/diskX</filename></emphasis>.
1540 Partition numbers are the same on Linux, Windows, and Mac OS X hosts.
1541 </para>
1542
1543 <para>
1544 The numbers for the list of partitions can be taken from the
1545 output of the following command:
1546 </para>
1547
1548<screen>$ VBoxManage list hostdrives</screen>
1549
1550 <para>
1551 The output lists available drives and their partitions with
1552 the partition types and sizes to give the user enough information
1553 to identify the partitions necessary for the guest.
1554 </para>
1555
1556 <para>
1557 Images which give access to individual partitions are specific
1558 to a particular host disk setup. You cannot transfer these
1559 images to another host. Also, whenever the host partitioning
1560 changes, the image <emphasis>must be recreated</emphasis>.
1561 </para>
1562
1563 <para>
1564 Creating the image requires read/write access for the given
1565 device. Read/write access is also later needed when using the
1566 image from a virtual machine. If this is not feasible, there
1567 is a special variant for raw partition access, currently only
1568 available on Linux hosts, that avoids having to give the
1569 current user access to the entire disk. To set up such an
1570 image, use:
1571 </para>
1572
1573<screen>$ VBoxManage createmedium disk --filename <replaceable>path-to-file</replaceable>.vmdk --format=VMDK
1574--variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5
1575--property Relative=1</screen>
1576
1577 <para>
1578 When used from a virtual machine, the image will then refer
1579 not to the entire disk, but only to the individual partitions.
1580 In this example, <filename>/dev/sda1</filename> and
1581 <filename>/dev/sda5</filename>. As a consequence, read/write
1582 access is only required for the affected partitions, not for
1583 the entire disk. During creation however, read-only access to
1584 the entire disk is required to obtain the partitioning
1585 information.
1586 </para>
1587
1588 <para>
1589 In some configurations it may be necessary to change the MBR
1590 code of the created image. For example, to replace the Linux
1591 boot loader that is used on the host by another boot loader.
1592 This enables for example the guest to boot directly to
1593 Windows, while the host boots Linux from the "same" disk. For
1594 this purpose the <option>--property-file
1595 BootSector=<replaceable>path-to-file-with-boot-sector</replaceable></option>
1596 parameter is provided. It specifies a file name from which to
1597 take the MBR code. The partition table is not modified at all,
1598 so a MBR file from a system with totally different
1599 partitioning can be used. An example of this is:
1600 </para>
1601
1602<screen>$ VBoxManage createmedium disk --filename <replaceable>path-to-file</replaceable>.vmdk --format=VMDK
1603--variant RawDisk --property RawDrive=/dev/sda --property Partitions=1,5
1604--property-file BootSector=winxp.mbr</screen>
1605
1606 <para>
1607 The modified MBR will be stored inside the image, not on the
1608 host disk.
1609 </para>
1610
1611 <para>
1612 The created image can be attached to a storage controller in a
1613 VM configuration as usual.
1614 </para>
1615
1616 </sect3>
1617
1618 </sect2>
1619
1620 <sect2 id="changevpd">
1621
1622 <title>Configuring the Hard Disk Vendor Product Data (VPD)</title>
1623
1624 <para>
1625 &product-name; reports vendor product data for its virtual hard
1626 disks which consist of hard disk serial number, firmware
1627 revision and model number. These can be changed using the
1628 following commands:
1629 </para>
1630
1631<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1632"VBoxInternal/Devices/ahci/0/Config/Port0/SerialNumber" "serial"
1633$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1634"VBoxInternal/Devices/ahci/0/Config/Port0/FirmwareRevision" "firmware"
1635$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1636"VBoxInternal/Devices/ahci/0/Config/Port0/ModelNumber" "model"</screen>
1637
1638 <para>
1639 The serial number is a 20 byte alphanumeric string, the firmware
1640 revision an 8 byte alphanumeric string and the model number a 40
1641 byte alphanumeric string. Instead of Port0, referring to the
1642 first port, specify the desired SATA hard disk port.
1643 </para>
1644
1645 <para>
1646 The above commands apply to virtual machines with an AHCI (SATA)
1647 controller. The commands for virtual machines with an IDE
1648 controller are:
1649 </para>
1650
1651<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1652"VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "serial"
1653$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1654"VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "firmware"
1655$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1656"VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "model"</screen>
1657
1658 <para>
1659 For hard disks, you can mark the drive as having a
1660 non-rotational medium by using the following command:
1661 </para>
1662
1663<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1664"VBoxInternal/Devices/ahci/0/Config/Port0/NonRotational" "1"</screen>
1665
1666 <para>
1667 Additional three parameters are needed for CD/DVD drives to
1668 report the vendor product data:
1669 </para>
1670
1671<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1672"VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIVendorId" "vendor"
1673VBoxManage setextradata <replaceable>VM-name</replaceable> \
1674"VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIProductId" "product"
1675VBoxManage setextradata <replaceable>VM-name</replaceable> \
1676"VBoxInternal/Devices/ahci/0/Config/Port0/ATAPIRevision" "revision"</screen>
1677
1678 <para>
1679 The vendor id is an 8 byte alphanumeric string, the product id
1680 an 16 byte alphanumeric string and the revision a 4 byte
1681 alphanumeric string. Instead of Port0, referring to the first
1682 port, specify the desired SATA hard disk port.
1683 </para>
1684
1685 </sect2>
1686
1687 <sect2 id="iscsi-intnet">
1688
1689 <title>Access iSCSI Targets Using Internal Networking</title>
1690
1691 <para>
1692 As an experimental feature, &product-name; enables access to an
1693 iSCSI target running in a virtual machine which is configured to
1694 use Internal Networking mode. See
1695 <xref linkend="storage-iscsi" />,
1696 <xref linkend="network_internal" />, and
1697 <xref
1698 linkend="vboxmanage-storageattach" />.
1699 </para>
1700
1701 <para>
1702 The IP stack accessing Internal Networking must be configured in
1703 the virtual machine which accesses the iSCSI target. A free
1704 static IP and a MAC address not used by other virtual machines
1705 must be chosen. In the example below, adapt the name of the
1706 virtual machine, the MAC address, the IP configuration, and the
1707 Internal Networking name (MyIntNet) according to your needs. The
1708 following eight commands must first be issued:
1709 </para>
1710
1711<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1712VBoxInternal/Devices/IntNetIP/0/Trusted 1
1713$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1714VBoxInternal/Devices/IntNetIP/0/Config/MAC 08:00:27:01:02:0f
1715$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1716VBoxInternal/Devices/IntNetIP/0/Config/IP 10.0.9.1
1717$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1718VBoxInternal/Devices/IntNetIP/0/Config/Netmask 255.255.255.0
1719$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1720VBoxInternal/Devices/IntNetIP/0/LUN#0/Driver IntNet
1721$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1722VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/Network MyIntNet
1723$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1724VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/TrunkType 2
1725$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1726VBoxInternal/Devices/IntNetIP/0/LUN#0/Config/IsService 1</screen>
1727
1728 <para>
1729 Finally the iSCSI disk must be attached with the
1730 <option>--intnet</option> option to tell the iSCSI initiator to
1731 use internal networking, as follows:
1732 </para>
1733
1734<screen>$ VBoxManage storageattach ... --medium iscsi --server 10.0.9.30 \
1735--target iqn.2008-12.com.sun:sampletarget --intnet</screen>
1736
1737 <para>
1738 Compared to a regular iSCSI setup, the IP address of the target
1739 <emphasis>must</emphasis> be specified as a numeric IP address,
1740 as there is no DNS resolver for internal networking.
1741 </para>
1742
1743 <para>
1744 The virtual machine with the iSCSI target should be started
1745 before the VM using it is powered on. If a virtual machine using
1746 an iSCSI disk is started without having the iSCSI target powered
1747 up, it can take up to 200 seconds to detect this situation. The
1748 VM will fail to power up.
1749 </para>
1750
1751 </sect2>
1752
1753 </sect1>
1754
1755 <sect1 id="changenat">
1756
1757 <title>Fine Tuning the &product-name; NAT Engine</title>
1758
1759 <sect2 id="nat-address-config">
1760
1761 <title>Configuring the Address of a NAT Network Interface</title>
1762
1763 <para>
1764 In NAT mode, the guest network interface is assigned to the IPv4
1765 range <literal>10.0.<replaceable>x</replaceable>.0/24</literal>
1766 by default where <replaceable>x</replaceable> corresponds to the
1767 instance of the NAT interface +2. So
1768 <replaceable>x</replaceable> is 2 when there is only one NAT
1769 instance active. In that case the guest is assigned to the
1770 address <literal>10.0.2.15</literal>, the gateway is set to
1771 <literal>10.0.2.2</literal> and the name server can be found at
1772 <literal>10.0.2.3</literal>.
1773 </para>
1774
1775 <para>
1776 If the NAT network needs to be changed, use the following
1777 command:
1778 </para>
1779
1780<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
1781--natnet1 "192.168/16"</screen>
1782
1783 <para>
1784 This command would reserve the network addresses from
1785 <literal>192.168.0.0</literal> to
1786 <literal>192.168.254.254</literal> for the first NAT network
1787 instance of <replaceable>VM-name</replaceable> The guest IP
1788 would be assigned to <literal>192.168.0.15</literal> and the
1789 default gateway could be found at
1790 <literal>192.168.0.2</literal>.
1791 </para>
1792
1793 </sect2>
1794
1795 <sect2 id="nat-adv-tftp">
1796
1797 <title>Configuring the Boot Server (Next Server) of a NAT Network Interface</title>
1798
1799 <para>
1800 For network booting in NAT mode, by default &product-name; uses
1801 a built-in TFTP server at the IP address 10.0.2.4. This default
1802 behavior should work fine for typical remote-booting scenarios.
1803 However, it is possible to change the boot server IP and the
1804 location of the boot image with the following commands:
1805 </para>
1806
1807<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
1808--nattftpserver1 10.0.2.2
1809$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
1810--nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe</screen>
1811
1812 </sect2>
1813
1814 <sect2 id="nat-adv-settings">
1815
1816 <title>Tuning TCP/IP Buffers for NAT</title>
1817
1818 <para>
1819 The &product-name; NAT stack performance is often determined by
1820 its interaction with the host's TCP/IP stack and the size of
1821 several buffers, <literal>SO_RCVBUF</literal> and
1822 <literal>SO_SNDBUF</literal>. For certain setups users might
1823 want to adjust the buffer size for a better performance. This
1824 can by achieved using the following commands, where values are
1825 in kilobytes and can range from 8 to 1024:
1826 </para>
1827
1828<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
1829--natsettings1 16000,128,128,0,0</screen>
1830
1831 <para>
1832 This example illustrates tuning the NAT settings. The first
1833 parameter is the MTU, then the size of the socket's send buffer
1834 and the size of the socket's receive buffer, the initial size of
1835 the TCP send window, and lastly the initial size of the TCP
1836 receive window. Note that specifying zero means fallback to the
1837 default value.
1838 </para>
1839
1840 <para>
1841 Each of these buffers has a default size of 64KB and default MTU
1842 is 1500.
1843 </para>
1844
1845 </sect2>
1846
1847 <sect2 id="nat-bind-sockets">
1848
1849 <title>Binding NAT Sockets to a Specific Interface</title>
1850
1851 <para>
1852 By default, &product-name;'s NAT engine will route TCP/IP
1853 packets through the default interface assigned by the host's
1854 TCP/IP stack. The technical reason for this is that the NAT
1855 engine uses sockets for communication. If you want to change
1856 this behavior, you can tell the NAT engine to bind to a
1857 particular IP address instead. For example, use the following
1858 command:
1859 </para>
1860
1861<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
1862--natbindip1 "10.45.0.2"</screen>
1863
1864 <para>
1865 After this, all outgoing traffic will be sent through the
1866 interface with the IP address 10.45.0.2. Ensure that this
1867 interface is up and running before changing the NAT bind
1868 address.
1869 </para>
1870
1871 </sect2>
1872
1873 <sect2 id="nat-adv-dns">
1874
1875 <title>Enabling DNS Proxy in NAT Mode</title>
1876
1877 <para>
1878 The NAT engine by default offers the same DNS servers to the
1879 guest that are configured on the host. In some scenarios, it can
1880 be desirable to hide the DNS server IPs from the guest, for
1881 example when this information can change on the host due to
1882 expiring DHCP leases. In this case, you can tell the NAT engine
1883 to act as DNS proxy using the following command:
1884 </para>
1885
1886<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --natdnsproxy1 on</screen>
1887
1888 </sect2>
1889
1890 <sect2 id="nat_host_resolver_proxy">
1891
1892 <title>Using the Host's Resolver as a DNS Proxy in NAT Mode</title>
1893
1894 <para>
1895 For resolving network names, the DHCP server of the NAT engine
1896 offers a list of registered DNS servers of the host. If for some
1897 reason you need to hide this DNS server list and use the host's
1898 resolver settings, thereby forcing the &product-name; NAT engine
1899 to intercept DNS requests and forward them to host's resolver,
1900 use the following command:
1901 </para>
1902
1903<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --natdnshostresolver1 on</screen>
1904
1905 <para>
1906 Note that this setting is similar to the DNS proxy mode, however
1907 whereas the proxy mode just forwards DNS requests to the
1908 appropriate servers, the resolver mode will interpret the DNS
1909 requests and use the host's DNS API to query the information and
1910 return it to the guest.
1911 </para>
1912
1913 <sect3 id="nat_host_resolver_name_intercepting">
1914
1915 <title>User-Defined Host Name Resolving</title>
1916
1917 <para>
1918 In some cases it might be useful to intercept the name
1919 resolving mechanism, providing a user-defined IP address on a
1920 particular DNS request. The intercepting mechanism enables the
1921 user to map not only a single host but domains and even more
1922 complex naming conventions if required.
1923 </para>
1924
1925 <para>
1926 The following command sets a rule for mapping a name to a
1927 specified IP:
1928 </para>
1929
1930<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> \
1931"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
1932<replaceable>unique-rule-name-of-interception-rule</replaceable>/HostIP" <replaceable>IPv4</replaceable>
1933
1934VBoxManage setextradata <replaceable>VM-name</replaceable> \
1935"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
1936<replaceable>unique-rule-name</replaceable>/HostName" <replaceable>hostname</replaceable></screen>
1937
1938 <para>
1939 The following command sets a rule for mapping a pattern name
1940 to a specified IP:
1941 </para>
1942
1943<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> \
1944"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
1945<replaceable>unique-rule-name</replaceable>/HostIP" <replaceable>IPv4</replaceable>
1946
1947VBoxManage setextradata <replaceable>VM-name</replaceable> \
1948"VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
1949<replaceable>unique-rule-name</replaceable>/HostNamePattern" <replaceable>hostpattern</replaceable></screen>
1950
1951 <para>
1952 The host name pattern can include the following wildcard
1953 characters: pipe (<literal>|</literal>), question mark
1954 (<literal>?</literal>), and asterisk (<literal>*</literal>).
1955 </para>
1956
1957 <para>
1958 This example demonstrates how to instruct the host-resolver
1959 mechanism to resolve all domain and probably some mirrors of
1960 www.blocked-site.info site with IP 127.0.0.1:
1961 </para>
1962
1963<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1964"VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/all_blocked_site/HostIP" 127.0.0.1
1965$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
1966"VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/all_blocked_site/HostNamePattern" "*.blocked-site.*|*.fb.org"</screen>
1967
1968 <para>
1969 The host resolver mechanism should be enabled to use
1970 user-defined mapping rules, otherwise they do not have any
1971 effect.
1972 </para>
1973
1974 </sect3>
1975
1976 </sect2>
1977
1978 <sect2 id="nat-adv-alias">
1979
1980 <title>Configuring Aliasing of the NAT Engine</title>
1981
1982 <para>
1983 By default, the NAT core uses aliasing and uses random ports
1984 when generating an alias for a connection. This works well for
1985 the most protocols like SSH, FTP and so on. Though some
1986 protocols might need a more transparent behavior or may depend
1987 on the real port number the packet was sent from. You can change
1988 the NAT mode by using the following commands:
1989 </para>
1990
1991<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
1992--nataliasmode1 proxyonly</screen>
1993
1994<screen>$ VBoxManage modifyvm "Linux Guest" --nataliasmode1 sameports</screen>
1995
1996 <para>
1997 The first example disables aliasing and switches NAT into
1998 transparent mode, the second example enforces preserving of port
1999 values. These modes can be combined if necessary.
2000 </para>
2001
2002 </sect2>
2003
2004 </sect1>
2005
2006 <sect1 id="changedmi">
2007
2008 <title>Configuring the BIOS DMI Information</title>
2009
2010 <para>
2011 The DMI data that &product-name; provides to guests can be changed
2012 for a specific VM. Use the following commands to configure the DMI
2013 BIOS information. In case your VM is configured to use EFI
2014 firmware you need to replace <literal>pcbios</literal> by
2015 <literal>efi</literal> in the keys.
2016 </para>
2017
2018 <itemizedlist>
2019
2020 <listitem>
2021 <para>
2022 DMI BIOS information (type 0)
2023 </para>
2024
2025<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2026"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "BIOS Vendor"
2027$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2028"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion" "BIOS Version"
2029$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2030"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate" "BIOS Release Date"
2031$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2032"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMajor" 1
2033$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2034"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseMinor" 2
2035$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2036"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMajor" 3
2037$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2038"VBoxInternal/Devices/pcbios/0/Config/DmiBIOSFirmwareMinor" 4</screen>
2039 </listitem>
2040
2041 <listitem>
2042 <para>
2043 DMI system information (type 1)
2044 </para>
2045
2046<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2047"VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "System Vendor"
2048$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2049"VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" "System Product"
2050$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2051"VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion" "System Version"
2052$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2053"VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "System Serial"
2054$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2055"VBoxInternal/Devices/pcbios/0/Config/DmiSystemSKU" "System SKU"
2056$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2057"VBoxInternal/Devices/pcbios/0/Config/DmiSystemFamily" "System Family"
2058$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2059"VBoxInternal/Devices/pcbios/0/Config/DmiSystemUuid" \
2060"9852bf98-b83c-49db-a8de-182c42c7226b"</screen>
2061 </listitem>
2062
2063 <listitem>
2064 <para>
2065 DMI board information (type 2)
2066 </para>
2067
2068<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2069"VBoxInternal/Devices/pcbios/0/Config/DmiBoardVendor" "Board Vendor"
2070$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2071"VBoxInternal/Devices/pcbios/0/Config/DmiBoardProduct" "Board Product"
2072$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2073"VBoxInternal/Devices/pcbios/0/Config/DmiBoardVersion" "Board Version"
2074$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2075"VBoxInternal/Devices/pcbios/0/Config/DmiBoardSerial" "Board Serial"
2076$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2077"VBoxInternal/Devices/pcbios/0/Config/DmiBoardAssetTag" "Board Tag"
2078$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2079"VBoxInternal/Devices/pcbios/0/Config/DmiBoardLocInChass" "Board Location"
2080$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2081"VBoxInternal/Devices/pcbios/0/Config/DmiBoardBoardType" 10</screen>
2082 </listitem>
2083
2084 <listitem>
2085 <para>
2086 DMI system enclosure or chassis (type 3)
2087 </para>
2088
2089<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2090"VBoxInternal/Devices/pcbios/0/Config/DmiChassisVendor" "Chassis Vendor"
2091$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2092"VBoxInternal/Devices/pcbios/0/Config/DmiChassisType" 3
2093$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2094"VBoxInternal/Devices/pcbios/0/Config/DmiChassisVersion" "Chassis Version"
2095$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2096"VBoxInternal/Devices/pcbios/0/Config/DmiChassisSerial" "Chassis Serial"
2097$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2098"VBoxInternal/Devices/pcbios/0/Config/DmiChassisAssetTag" "Chassis Tag"</screen>
2099 </listitem>
2100
2101 <listitem>
2102 <para>
2103 DMI processor information (type 4)
2104 </para>
2105
2106<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2107"VBoxInternal/Devices/pcbios/0/Config/DmiProcManufacturer" "GenuineIntel"
2108$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2109"VBoxInternal/Devices/pcbios/0/Config/DmiProcVersion" "Pentium(R) III"</screen>
2110 </listitem>
2111
2112 <listitem>
2113 <para>
2114 DMI OEM strings (type 11)
2115 </para>
2116
2117<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2118"VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxVer" "vboxVer_1.2.3"
2119$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2120"VBoxInternal/Devices/pcbios/0/Config/DmiOEMVBoxRev" "vboxRev_12345"</screen>
2121 </listitem>
2122
2123 </itemizedlist>
2124
2125 <para>
2126 If a DMI string is not set, the default value of &product-name; is
2127 used. To set an empty string use
2128 <literal>"&lt;EMPTY&gt;"</literal>.
2129 </para>
2130
2131 <para>
2132 Note that in the above list, all quoted parameters (DmiBIOSVendor,
2133 DmiBIOSVersion but not DmiBIOSReleaseMajor) are expected to be
2134 strings. If such a string is a valid number, the parameter is
2135 treated as number and the VM will most probably refuse to start
2136 with an <literal>VERR_CFGM_NOT_STRING</literal> error. In that
2137 case, use
2138 <literal>"string:<replaceable>value</replaceable>"</literal>. For
2139 example:
2140 </para>
2141
2142<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2143"VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "string:1234"</screen>
2144
2145 <para>
2146 Changing this information can be necessary to provide the DMI
2147 information of the host to the guest to prevent Windows from
2148 asking for a new product key. On Linux hosts, the DMI BIOS
2149 information can be obtained with the following command:
2150 </para>
2151
2152<screen>$ dmidecode -t0</screen>
2153
2154 <para>
2155 The DMI system information can be obtained as follows:
2156 </para>
2157
2158<screen>$ dmidecode -t1</screen>
2159
2160 </sect1>
2161
2162 <sect1 id="changeacpicust">
2163
2164 <title>Configuring Custom ACPI Tables</title>
2165
2166 <para>
2167 You can configure &product-name; to present up to four custom ACPI
2168 tables to the guest. Use a command such as the following to
2169 configure custom ACPI tables. Note that
2170 <literal>CustomTable1</literal>, <literal>CustomTable2</literal>,
2171 and <literal>CustomTable3</literal> are available in addition to
2172 <literal>CustomTable0</literal>.
2173 </para>
2174
2175<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
2176"VBoxInternal/Devices/acpi/0/Config/CustomTable0" "/<replaceable>path-to-table</replaceable>.bin"</screen>
2177
2178 <para>
2179 Configuring custom ACPI tables can for example avoid the need for
2180 asking for a new product key on Windows Vista, Windows 7, Windows
2181 8 and later guests. On Linux hosts, one of the system's ACPI
2182 tables can be read from
2183 <filename>/sys/firmware/acpi/tables/</filename>.
2184 </para>
2185
2186 </sect1>
2187
2188 <sect1 id="fine-tune-timers">
2189
2190 <title>Fine Tuning Timers and Time Synchronization</title>
2191
2192 <sect2 id="changetscmode">
2193
2194 <title>Configuring the Guest Time Stamp Counter (TSC) to Reflect Guest
2195 Execution</title>
2196
2197 <para>
2198 By default, &product-name; keeps all sources of time visible to
2199 the guest synchronized to a single time source, the monotonic
2200 host time. This reflects the assumptions of many guest operating
2201 systems, which expect all time sources to reflect "wall clock"
2202 time. In special circumstances it may be useful however to make
2203 the time stamp counter (TSC) in the guest reflect the time
2204 actually spent executing the guest.
2205 </para>
2206
2207 <para>
2208 This special TSC handling mode can be enabled on a per-VM basis,
2209 and for best results must be used only in combination with
2210 hardware virtualization. To enable this mode use the following
2211 command:
2212 </para>
2213
2214<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal/TM/TSCTiedToExecution" 1</screen>
2215
2216 <para>
2217 To revert to the default TSC handling mode use:
2218 </para>
2219
2220<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal/TM/TSCTiedToExecution"</screen>
2221
2222 <para>
2223 Note that if you use the special TSC handling mode with a guest
2224 operating system which is very strict about the consistency of
2225 time sources you may get a warning or error message about the
2226 timing inconsistency. It may also cause clocks to become
2227 unreliable with some guest operating systems depending on how
2228 they use the TSC.
2229 </para>
2230
2231 </sect2>
2232
2233 <sect2 id="warpguest">
2234
2235 <title>Accelerate or Slow Down the Guest Clock</title>
2236
2237 <para>
2238 For certain purposes it can be useful to accelerate or to slow
2239 down the virtual guest clock. This can be achieved as follows:
2240 </para>
2241
2242<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal/TM/WarpDrivePercentage" 200</screen>
2243
2244 <para>
2245 The above example will double the speed of the guest clock while
2246 </para>
2247
2248<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal/TM/WarpDrivePercentage" 50</screen>
2249
2250 <para>
2251 will halve the speed of the guest clock. Note that changing the
2252 rate of the virtual clock can confuse the guest and can even
2253 lead to abnormal guest behavior. For instance, a higher clock
2254 rate means shorter timeouts for virtual devices with the result
2255 that a slightly increased response time of a virtual device due
2256 to an increased host load can cause guest failures. Note further
2257 that any time synchronization mechanism will frequently try to
2258 resynchronize the guest clock with the reference clock, which is
2259 the host clock if the &product-name; Guest Additions are active.
2260 Therefore any time synchronization should be disabled if the
2261 rate of the guest clock is changed as described above. See
2262 <xref linkend="changetimesync" />.
2263 </para>
2264
2265 </sect2>
2266
2267 <sect2 id="changetimesync">
2268
2269 <title>Tuning the Guest Additions Time Synchronization Parameters</title>
2270
2271 <para>
2272 The &product-name; Guest Additions ensure that the guest's
2273 system time is synchronized with the host time. There are
2274 several parameters which can be tuned. The parameters can be set
2275 for a specific VM using the following command:
2276 </para>
2277
2278<screen>$ VBoxManage guestproperty set <replaceable>VM-name</replaceable> "/VirtualBox/GuestAdd/VBoxService/<replaceable>property</replaceable>" <replaceable>value</replaceable></screen>
2279
2280 <para>
2281 <replaceable>property</replaceable> is one of the following:
2282 </para>
2283
2284 <variablelist>
2285
2286 <varlistentry>
2287 <term>
2288 <option>--timesync-interval</option>
2289 </term>
2290
2291 <listitem>
2292 <para>
2293 Specifies the interval at which to synchronize the time
2294 with the host. The default is 10000 ms (10 seconds).
2295 </para>
2296 </listitem>
2297 </varlistentry>
2298
2299 <varlistentry>
2300 <term>
2301 <option>--timesync-min-adjust</option>
2302 </term>
2303
2304 <listitem>
2305 <para>
2306 The minimum absolute drift value measured in milliseconds
2307 to make adjustments for. The default is 1000 ms on OS/2
2308 and 100 ms elsewhere.
2309 </para>
2310 </listitem>
2311 </varlistentry>
2312
2313 <varlistentry>
2314 <term>
2315 <option>--timesync-latency-factor</option>
2316 </term>
2317
2318 <listitem>
2319 <para>
2320 The factor to multiply the time query latency with to
2321 calculate the dynamic minimum adjust time. The default is
2322 8 times, which means as follows:
2323 </para>
2324
2325 <para>
2326 Measure the time it takes to determine the host time, the
2327 guest has to contact the VM host service which may take
2328 some time. Multiply this value by 8 and do an adjustment
2329 only if the time difference between host and guest is
2330 bigger than this value. Do not do any time adjustment
2331 otherwise.
2332 </para>
2333 </listitem>
2334 </varlistentry>
2335
2336 <varlistentry>
2337 <term>
2338 <option>--timesync-max-latency</option>
2339 </term>
2340
2341 <listitem>
2342 <para>
2343 The max host timer query latency to accept. The default is
2344 250 ms.
2345 </para>
2346 </listitem>
2347 </varlistentry>
2348
2349 <varlistentry>
2350 <term>
2351 <option>--timesync-set-threshold</option>
2352 </term>
2353
2354 <listitem>
2355 <para>
2356 The absolute drift threshold, given as milliseconds where
2357 to start setting the time instead of trying to smoothly
2358 adjust it. The default is 20 minutes.
2359 </para>
2360 </listitem>
2361 </varlistentry>
2362
2363 <varlistentry>
2364 <term>
2365 <option>--timesync-set-start</option>
2366 </term>
2367
2368 <listitem>
2369 <para>
2370 Set the time when starting the time sync service.
2371 </para>
2372 </listitem>
2373 </varlistentry>
2374
2375 <varlistentry>
2376 <term>
2377 <option>--timesync-set-on-restore 0|1</option>
2378 </term>
2379
2380 <listitem>
2381 <para>
2382 Set the time after the VM was restored from a saved state
2383 when passing 1 as parameter. This is the default. Disable
2384 by passing 0. In the latter case, the time will be
2385 adjusted smoothly, which can take a long time.
2386 </para>
2387 </listitem>
2388 </varlistentry>
2389
2390 </variablelist>
2391
2392 <para>
2393 All these parameters can be specified as command line parameters
2394 to VBoxService as well.
2395 </para>
2396
2397 </sect2>
2398
2399 <sect2 id="disabletimesync">
2400
2401 <title>Disabling the Guest Additions Time Synchronization</title>
2402
2403 <para>
2404 Once installed and started, the &product-name; Guest Additions
2405 will try to synchronize the guest time with the host time. This
2406 can be prevented by forbidding the guest service from reading
2407 the host clock:
2408 </para>
2409
2410<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1</screen>
2411
2412 </sect2>
2413
2414 </sect1>
2415
2416 <sect1 id="vboxbowsolaris11">
2417
2418 <title>Installing the Alternate Bridged Networking Driver on Oracle Solaris 11
2419 Hosts</title>
2420
2421 <para>
2422 &product-name; includes a network filter driver that utilizes
2423 Oracle Solaris 11's Crossbow functionality. By default, this new
2424 driver is installed for Oracle Solaris 11 hosts that have support
2425 for it.
2426 </para>
2427
2428 <para>
2429 To force installation of the older STREAMS based network filter
2430 driver, execute as root the following command before installing
2431 the &product-name; package:
2432 </para>
2433
2434<screen>$ touch /etc/vboxinst_vboxflt</screen>
2435
2436 <para>
2437 To force installation of the Crossbow based network filter driver,
2438 execute as root the following command before installing the
2439 &product-name; package:
2440 </para>
2441
2442<screen>$ touch /etc/vboxinst_vboxbow</screen>
2443
2444 <para>
2445 To check which driver is currently being used by &product-name;,
2446 execute:
2447 </para>
2448
2449<screen>$ modinfo | grep vbox</screen>
2450
2451 <para>
2452 If the output contains "vboxbow", it indicates &product-name; is
2453 using the Crossbow network filter driver, while the name "vboxflt"
2454 indicates usage of the older STREAMS network filter.
2455 </para>
2456
2457 </sect1>
2458
2459 <sect1 id="vboxbowvnictemplates">
2460
2461 <title>&product-name; VNIC Templates for VLANs on Oracle Solaris 11 Hosts</title>
2462
2463 <para>
2464 &product-name; supports Virtual Network Interface (VNIC) templates
2465 for configuring VMs over VLANs. An &product-name; VNIC template is
2466 a VNIC whose name starts with
2467 <filename>vboxvnic_template</filename>. The string is
2468 case-sensitive.
2469 </para>
2470
2471 <para>
2472 On Oracle Solaris 11 hosts, when Crossbow-based bridged networking
2473 is used, a VNIC template may be used to specify the VLAN ID to use
2474 while bridging over a network link.
2475 </para>
2476
2477 <para>
2478 The following is an example of how to use a VNIC template to
2479 configure a VM over a VLAN. Create an &product-name; VNIC
2480 template, by executing as root:
2481 </para>
2482
2483<screen># dladm create-vnic -t -l nge0 -v 23 vboxvnic_template0</screen>
2484
2485 <para>
2486 This will create a temporary VNIC template over interface
2487 <command>nge0</command> with the VLAN ID 23. To create VNIC
2488 templates that are persistent across host reboots, skip the
2489 <option>-t</option> parameter in the above command. You may check
2490 the current state of links using the following command:
2491 </para>
2492
2493<screen>$ dladm show-link
2494LINK CLASS MTU STATE BRIDGE OVER
2495nge0 phys 1500 up -- --
2496nge1 phys 1500 down -- --
2497vboxvnic_template0 vnic 1500 up -- nge0
2498
2499$ dladm show-vnic
2500LINK OVER SPEED MACADDRESS MACADDRTYPE VID
2501vboxvnic_template0 nge0 1000 2:8:20:25:12:75 random 23</screen>
2502
2503 <para>
2504 Once the VNIC template is created, any VMs that need to be on VLAN
2505 23 over the interface <command>nge0</command> can be configured to
2506 bridge using this VNIC template.
2507 </para>
2508
2509 <para>
2510 VNIC templates makes managing VMs on VLANs simpler and efficient.
2511 The VLAN details are not stored as part of every VM's
2512 configuration but rather inherited from the VNIC template while
2513 starting the VM. The VNIC template itself can be modified anytime
2514 using the <command>dladm</command> command.
2515 </para>
2516
2517 <para>
2518 VNIC templates can be created with additional properties such as
2519 bandwidth limits and CPU fanout. Refer to your Oracle Solaris
2520 network documentation for details. The additional properties are
2521 also applied to VMs which bridge using the VNIC template.
2522 </para>
2523
2524 </sect1>
2525
2526 <sect1 id="addhostonlysolaris">
2527
2528 <title>Configuring Multiple Host-Only Network Interfaces on Oracle Solaris
2529 Hosts</title>
2530
2531 <para>
2532 By default &product-name; provides you with one host-only network
2533 interface. Adding more host-only network interfaces on Oracle
2534 Solaris hosts requires manual configuration. Here is how to add
2535 another host-only network interface.
2536 </para>
2537
2538 <para>
2539 Begin by stopping all running VMs. Then, unplumb the existing
2540 "vboxnet0" interface by execute the following command as root:
2541 </para>
2542
2543<screen># ifconfig vboxnet0 unplumb</screen>
2544
2545 <para>
2546 If you have several vboxnet interfaces, you will need to unplumb
2547 all of them. Once all vboxnet interfaces are unplumbed, remove the
2548 driver by executing the following command as root:
2549 </para>
2550
2551<screen># rem_drv vboxnet</screen>
2552
2553 <para>
2554 Edit the file
2555 <filename>/platform/i86pc/kernel/drv/vboxnet.conf</filename> and
2556 add a line for the new interface we want to add as shown below:
2557 </para>
2558
2559<screen>name="vboxnet" parent="pseudo" instance=1;
2560name="vboxnet" parent="pseudo" instance=2;</screen>
2561
2562 <para>
2563 Add as many of these lines as required with each line having a
2564 unique instance number.
2565 </para>
2566
2567 <para>
2568 Next, reload the vboxnet driver by executing the following command
2569 as root:
2570 </para>
2571
2572<screen># add_drv vboxnet</screen>
2573
2574 <para>
2575 On Oracle Solaris 11.1 and newer hosts you may want to rename the
2576 default vanity interface name. To check what name has been
2577 assigned, execute:
2578 </para>
2579
2580<screen>$ dladm show-phys
2581LINK MEDIA STATE SPEED DUPLEX DEVICE
2582net0 Ethernet up 100 full e1000g0
2583net2 Ethernet up 1000 full vboxnet1
2584net1 Ethernet up 1000 full vboxnet0</screen>
2585
2586 <para>
2587 In the above example, we can rename "net2" to "vboxnet1" before
2588 proceeding to plumb the interface. This can be done by executing
2589 as root:
2590 </para>
2591
2592<screen># dladm rename-link net2 vboxnet1</screen>
2593
2594 <para>
2595 Now plumb all the interfaces using <command>ifconfig
2596 vboxnet<replaceable>X</replaceable> plumb</command>, where
2597 <replaceable>X</replaceable> would be 1 in this case. Once the
2598 interface is plumbed, it may be configured like any other network
2599 interface. Refer to the <command>ifconfig</command> documentation
2600 for further details.
2601 </para>
2602
2603 <para>
2604 To make the settings for the newly added interfaces persistent
2605 across reboots, you will need to edit the files
2606 <filename>/etc/inet/netmasks</filename>, and if you are using NWAM
2607 <filename>/etc/nwam/llp</filename> and add the appropriate entries
2608 to set the netmask and static IP for each of those interfaces. The
2609 &product-name; installer only updates these configuration files
2610 for the one "vboxnet0" interface it creates by default.
2611 </para>
2612
2613 </sect1>
2614
2615 <sect1 id="solariscodedumper">
2616
2617 <title>Configuring the &product-name; CoreDumper on Oracle Solaris Hosts</title>
2618
2619 <para>
2620 &product-name; is capable of producing its own core files for
2621 extensive debugging when things go wrong. Currently this is only
2622 available on Oracle Solaris hosts.
2623 </para>
2624
2625 <para>
2626 The &product-name; CoreDumper can be enabled using the following
2627 command:
2628 </para>
2629
2630<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> VBoxInternal2/CoreDumpEnabled 1</screen>
2631
2632 <para>
2633 You can specify which directory to use for core dumps with this
2634 command, as follows:
2635 </para>
2636
2637<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> VBoxInternal2/CoreDumpDir <replaceable>path-to-directory</replaceable></screen>
2638
2639 <para>
2640 Make sure the directory you specify is on a volume with sufficient
2641 free space and that the &product-name; process has sufficient
2642 permissions to write files to this directory. If you skip this
2643 command and do not specify any core dump directory, the current
2644 directory of the &product-name; executable will be used. This
2645 would most likely fail when writing cores as they are protected
2646 with root permissions. It is recommended you explicitly set a core
2647 dump directory.
2648 </para>
2649
2650 <para>
2651 You must specify when the &product-name; CoreDumper should be
2652 triggered. This is done using the following commands:
2653 </para>
2654
2655<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> VBoxInternal2/CoreDumpReplaceSystemDump 1
2656$ VBoxManage setextradata <replaceable>VM-name</replaceable> VBoxInternal2/CoreDumpLive 1</screen>
2657
2658 <para>
2659 At least one of the above two commands will have to be provided if
2660 you have enabled the &product-name; CoreDumper.
2661 </para>
2662
2663 <para>
2664 Setting <literal>CoreDumpReplaceSystemDump</literal> sets up the
2665 VM to override the host's core dumping mechanism and in the event
2666 of any crash only the &product-name; CoreDumper would produce the
2667 core file.
2668 </para>
2669
2670 <para>
2671 Setting <literal>CoreDumpLive</literal> sets up the VM to produce
2672 cores whenever the VM process receives a
2673 <literal>SIGUSR2</literal> signal. After producing the core file,
2674 the VM will not be terminated and will continue to run. You can
2675 thus take cores of the VM process using the following command:
2676 </para>
2677
2678<screen>$ kill -s SIGUSR2 <replaceable>VM-process-id</replaceable></screen>
2679
2680 <para>
2681 The &product-name; CoreDumper creates core files of the form
2682 <filename>core.vb.<replaceable>process-name</replaceable>.<replaceable>process-ID</replaceable></filename>
2683 such as <filename>core.vb.VBoxHeadless.11321</filename>.
2684 </para>
2685
2686 </sect1>
2687
2688 <sect1 id="vboxandsolzvmm">
2689
2690 <title>&product-name; and Oracle Solaris Kernel Zones</title>
2691
2692 <para>
2693 Oracle Solaris kernel zones on x86-based systems make use of
2694 hardware-assisted virtualization features like &product-name;
2695 does. However, for kernel zones and &product-name; to share this
2696 hardware resource, they need to cooperate.
2697 </para>
2698
2699 <para>
2700 By default, due to performance reasons, &product-name; acquires
2701 the hardware-assisted virtualization resource (VT-x/AMD-V)
2702 globally on the host machine and uses it until the last
2703 &product-name; VM that requires it is powered off. This prevents
2704 other software from using VT-x/AMD-V during the time
2705 &product-name; has taken control of it.
2706 </para>
2707
2708 <para>
2709 &product-name; can be instructed to relinquish use of
2710 hardware-assisted virtualization features when not executing guest
2711 code, thereby allowing kernel zones to make use of them. To do
2712 this, shutdown all &product-name; VMs and execute the following
2713 command:
2714 </para>
2715
2716<screen>$ VBoxManage setproperty hwvirtexclusive off</screen>
2717
2718 <para>
2719 This command needs to be executed only once as the setting is
2720 stored as part of the global &product-name; settings which will
2721 continue to persist across host-reboots and &product-name;
2722 upgrades.
2723 </para>
2724
2725 </sect1>
2726
2727 <sect1 id="guitweaks">
2728
2729 <title>Locking Down the &product-name; GUI</title>
2730
2731 <sect2 id="customize-vm-manager">
2732
2733 <title>Customizing the VirtualBox Manager</title>
2734
2735 <para>
2736 There are several advanced customization settings for locking
2737 down the VirtualBox Manager. Locking down means removing some
2738 features that the user should not see.
2739 </para>
2740
2741<screen>VBoxManage setextradata global GUI/Customizations <replaceable>property</replaceable>[,<replaceable>property</replaceable> ...]</screen>
2742
2743 <para>
2744 <replaceable>property</replaceable> is one of the following
2745 properties:
2746 </para>
2747
2748 <variablelist>
2749
2750 <varlistentry>
2751 <term>
2752 <literal>noSelector</literal>
2753 </term>
2754
2755 <listitem>
2756 <para>
2757 Do not allow users to start the VirtualBox Manager. Trying
2758 to do so will show a window containing a proper error
2759 message.
2760 </para>
2761 </listitem>
2762 </varlistentry>
2763
2764 <varlistentry>
2765 <term>
2766 <literal>noMenuBar</literal>
2767 </term>
2768
2769 <listitem>
2770 <para>
2771 VM windows will not contain a menu bar.
2772 </para>
2773 </listitem>
2774 </varlistentry>
2775
2776 <varlistentry>
2777 <term>
2778 <literal>noStatusBar</literal>
2779 </term>
2780
2781 <listitem>
2782 <para>
2783 VM windows will not contain a status bar.
2784 </para>
2785 </listitem>
2786 </varlistentry>
2787
2788 </variablelist>
2789
2790 <para>
2791 To disable any of these VirtualBox Manager customizations use
2792 the following command:
2793 </para>
2794
2795<screen>$ VBoxManage setextradata global GUI/Customizations</screen>
2796
2797 </sect2>
2798
2799 <sect2 id="customize-vm-selector">
2800
2801 <title>VM Selector Customization</title>
2802
2803 <para>
2804 The following per-machine VM extradata settings can be used to
2805 change the behavior of the VM selector window in respect of
2806 certain VMs:
2807 </para>
2808
2809<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> <replaceable>property</replaceable> true</screen>
2810
2811 <para>
2812 <replaceable>property</replaceable> can be any of the following:
2813 </para>
2814
2815 <variablelist>
2816
2817 <varlistentry>
2818 <term>
2819 <literal>GUI/HideDetails</literal>
2820 </term>
2821
2822 <listitem>
2823 <para>
2824 Do not show the VM configuration of a certain VM. The
2825 details window will remain just empty if this VM is
2826 selected.
2827 </para>
2828 </listitem>
2829 </varlistentry>
2830
2831 <varlistentry>
2832 <term>
2833 <literal>GUI/PreventReconfiguration</literal>
2834 </term>
2835
2836 <listitem>
2837 <para>
2838 Do not allow the user to open the
2839 <emphasis role="bold">Settings</emphasis> dialog for a
2840 certain VM.
2841 </para>
2842 </listitem>
2843 </varlistentry>
2844
2845 <varlistentry>
2846 <term>
2847 <literal>GUI/PreventSnapshotOperations</literal>
2848 </term>
2849
2850 <listitem>
2851 <para>
2852 Prevent snapshot operations for a VM from the GUI, either
2853 at runtime or when the VM is powered off.
2854 </para>
2855 </listitem>
2856 </varlistentry>
2857
2858 <varlistentry>
2859 <term>
2860 <literal>GUI/HideFromManager</literal>
2861 </term>
2862
2863 <listitem>
2864 <para>
2865 Hide a certain VM in the VM selector window.
2866 </para>
2867 </listitem>
2868 </varlistentry>
2869
2870 <varlistentry>
2871 <term>
2872 <literal>GUI/PreventApplicationUpdate</literal>
2873 </term>
2874
2875 <listitem>
2876 <para>
2877 Disable the automatic update check and hide the
2878 corresponding menu item.
2879 </para>
2880 </listitem>
2881 </varlistentry>
2882
2883 </variablelist>
2884
2885 <para>
2886 Note that these settings do not prevent the user from
2887 reconfiguring the VM by using the <command>VBoxManage
2888 modifyvm</command> command.
2889 </para>
2890
2891 </sect2>
2892
2893 <sect2 id="config-vm-selector-menu">
2894
2895 <title>Configure VM Selector Menu Entries</title>
2896
2897 <para>
2898 You can disable certain entries in the global settings page of
2899 the VM selector:
2900 </para>
2901
2902<screen>$ VBoxManage setextradata global GUI/RestrictedGlobalSettingsPages <replaceable>property</replaceable>[,<replaceable>property</replaceable>...]</screen>
2903
2904 <para>
2905 <replaceable>property</replaceable> is one of the following:
2906 </para>
2907
2908 <variablelist>
2909
2910 <varlistentry>
2911 <term>
2912 <literal>General</literal>
2913 </term>
2914
2915 <listitem>
2916 <para>
2917 Do not show the <emphasis role="bold">General</emphasis>
2918 settings pane.
2919 </para>
2920 </listitem>
2921 </varlistentry>
2922
2923 <varlistentry>
2924 <term>
2925 <literal>Input</literal>
2926 </term>
2927
2928 <listitem>
2929 <para>
2930 Do not show the <emphasis role="bold">Input</emphasis>
2931 settings pane.
2932 </para>
2933 </listitem>
2934 </varlistentry>
2935
2936 <varlistentry>
2937 <term>
2938 <literal>Update</literal>
2939 </term>
2940
2941 <listitem>
2942 <para>
2943 Do not show the <emphasis role="bold">Update</emphasis>
2944 settings pane.
2945 </para>
2946 </listitem>
2947 </varlistentry>
2948
2949 <varlistentry>
2950 <term>
2951 <literal>Language</literal>
2952 </term>
2953
2954 <listitem>
2955 <para>
2956 Do not show the <emphasis role="bold">Language</emphasis>
2957 settings pane.
2958 </para>
2959 </listitem>
2960 </varlistentry>
2961
2962 <varlistentry>
2963 <term>
2964 <literal>Display</literal>
2965 </term>
2966
2967 <listitem>
2968 <para>
2969 Do not show the <emphasis role="bold">Display</emphasis>
2970 settings pane.
2971 </para>
2972 </listitem>
2973 </varlistentry>
2974
2975 <varlistentry>
2976 <term>
2977 <literal>Network</literal>
2978 </term>
2979
2980 <listitem>
2981 <para>
2982 Do not show the <emphasis role="bold">Network</emphasis>
2983 settings pane.
2984 </para>
2985 </listitem>
2986 </varlistentry>
2987
2988 <varlistentry>
2989 <term>
2990 <literal>Extensions</literal>
2991 </term>
2992
2993 <listitem>
2994 <para>
2995 Do not show the
2996 <emphasis role="bold">Extensions</emphasis> settings pane.
2997 </para>
2998 </listitem>
2999 </varlistentry>
3000
3001 <varlistentry>
3002 <term>
3003 <literal>Proxy</literal>
3004 </term>
3005
3006 <listitem>
3007 <para>
3008 Do not show the <emphasis role="bold">Proxy</emphasis>
3009 settings pane.
3010 </para>
3011 </listitem>
3012 </varlistentry>
3013
3014 </variablelist>
3015
3016 <para>
3017 This is a global setting. You can specify any combination of
3018 properties. To restore the default behavior, use the following
3019 command:
3020 </para>
3021
3022<screen>$ VBoxManage setextradata global GUI/RestrictedGlobalSettingsPages</screen>
3023
3024 </sect2>
3025
3026 <sect2 id="config-vm-window-menu">
3027
3028 <title>Configure VM Window Menu Entries</title>
3029
3030 <para>
3031 You can disable certain menu actions in the VM window:
3032 </para>
3033
3034<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMenus OPTION[,OPTION...]</screen>
3035
3036 <para>
3037 where <literal>OPTION</literal> is one of the following
3038 keywords:
3039 </para>
3040
3041 <variablelist>
3042
3043 <varlistentry>
3044 <term>
3045 <literal>All</literal>
3046 </term>
3047
3048 <listitem>
3049 <para>
3050 Do not show any menu in the VM window.
3051 </para>
3052 </listitem>
3053 </varlistentry>
3054
3055 <varlistentry>
3056 <term>
3057 <literal>Application</literal>
3058 </term>
3059
3060 <listitem>
3061 <para>
3062 Do not show
3063 <emphasis role="bold">Application/File</emphasis> menu in
3064 the VM window.
3065 </para>
3066 </listitem>
3067 </varlistentry>
3068
3069 <varlistentry>
3070 <term>
3071 <literal>Machine</literal>
3072 </term>
3073
3074 <listitem>
3075 <para>
3076 Do not show the <emphasis role="bold">Machine</emphasis>
3077 menu in the VM window.
3078 </para>
3079 </listitem>
3080 </varlistentry>
3081
3082 <varlistentry>
3083 <term>
3084 <literal>View</literal>
3085 </term>
3086
3087 <listitem>
3088 <para>
3089 Do not show the <emphasis role="bold">View</emphasis> menu
3090 in the VM window.
3091 </para>
3092 </listitem>
3093 </varlistentry>
3094
3095 <varlistentry>
3096 <term>
3097 <literal>Input</literal>
3098 </term>
3099
3100 <listitem>
3101 <para>
3102 Do not show <emphasis role="bold">Input</emphasis> menu in
3103 the VM window.
3104 </para>
3105 </listitem>
3106 </varlistentry>
3107
3108 <varlistentry>
3109 <term>
3110 <literal>Devices</literal>
3111 </term>
3112
3113 <listitem>
3114 <para>
3115 Do not show the <emphasis role="bold">Devices</emphasis>
3116 menu in the VM window.
3117 </para>
3118 </listitem>
3119 </varlistentry>
3120
3121 <varlistentry>
3122 <term>
3123 <literal>Help</literal>
3124 </term>
3125
3126 <listitem>
3127 <para>
3128 Do not show the <emphasis role="bold">Help</emphasis> menu
3129 in the VM window.
3130 </para>
3131 </listitem>
3132 </varlistentry>
3133
3134 <varlistentry>
3135 <term>
3136 <literal>Debug</literal>
3137 </term>
3138
3139 <listitem>
3140 <para>
3141 Do not show the <emphasis role="bold">Debug</emphasis>
3142 menu in the VM window. The Debug menu is only visible if
3143 the GUI was started with special command line parameters
3144 or environment variable settings.
3145 </para>
3146 </listitem>
3147 </varlistentry>
3148
3149 </variablelist>
3150
3151 <para>
3152 This is a per-VM or global setting. Any combination of the above
3153 is allowed. To restore the default behavior, use the following
3154 command:
3155 </para>
3156
3157<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMenus</screen>
3158
3159 <para>
3160 You can also disable certain menu actions of certain menus. Use
3161 the following command to disable certain actions of the
3162 <emphasis role="bold">Application</emphasis> menu. This is only
3163 available on Mac OS X hosts.
3164 </para>
3165
3166<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeApplicationMenuActions OPTION[,OPTION...]</screen>
3167
3168 <para>
3169 where <literal>OPTION</literal> is one of the following
3170 keywords:
3171 </para>
3172
3173 <variablelist>
3174
3175 <varlistentry>
3176 <term>
3177 <literal>All</literal>
3178 </term>
3179
3180 <listitem>
3181 <para>
3182 Do not show any menu item in this menu.
3183 </para>
3184 </listitem>
3185 </varlistentry>
3186
3187 <varlistentry>
3188 <term>
3189 <literal>About</literal>
3190 </term>
3191
3192 <listitem>
3193 <para>
3194 Do not show the <emphasis role="bold">About</emphasis>
3195 menu item in this menu.
3196 </para>
3197 </listitem>
3198 </varlistentry>
3199
3200 <varlistentry>
3201 <term>
3202 <literal>Preferences</literal>
3203 </term>
3204
3205 <listitem>
3206 <para>
3207 Do not show the
3208 <emphasis role="bold">Preferences</emphasis> menu item in
3209 this menu.
3210 </para>
3211 </listitem>
3212 </varlistentry>
3213
3214 <varlistentry>
3215 <term>
3216 <literal>NetworkAccessManager</literal>
3217 </term>
3218
3219 <listitem>
3220 <para>
3221 Do not show the <emphasis role="bold">Network Operations
3222 Manager</emphasis> menu item in this menu.
3223 </para>
3224 </listitem>
3225 </varlistentry>
3226
3227 <varlistentry>
3228 <term>
3229 <literal>ResetWarnings</literal>
3230 </term>
3231
3232 <listitem>
3233 <para>
3234 Do not show the <emphasis role="bold">Reset All
3235 Warnings</emphasis> menu item in this menu.
3236 </para>
3237 </listitem>
3238 </varlistentry>
3239
3240 <varlistentry>
3241 <term>
3242 <literal>Close</literal>
3243 </term>
3244
3245 <listitem>
3246 <para>
3247 Do not show the <emphasis role="bold">Close</emphasis>
3248 menu item in this menu.
3249 </para>
3250 </listitem>
3251 </varlistentry>
3252
3253 </variablelist>
3254
3255 <para>
3256 This is a per-VM or global setting. Any combination of the above
3257 is allowed. To restore the default behavior, use the following
3258 command:
3259 </para>
3260
3261<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMenus</screen>
3262
3263 <para>
3264 Use the following command to disable certain actions of the
3265 <emphasis role="bold">Machine</emphasis> menu:
3266 </para>
3267
3268<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMachineMenuActions OPTION[,OPTION...]</screen>
3269
3270 <para>
3271 where <literal>OPTION</literal> is one of the following
3272 keywords:
3273 </para>
3274
3275 <variablelist>
3276
3277 <varlistentry>
3278 <term>
3279 <literal>All</literal>
3280 </term>
3281
3282 <listitem>
3283 <para>
3284 Do not show any menu item in this menu.
3285 </para>
3286 </listitem>
3287 </varlistentry>
3288
3289 <varlistentry>
3290 <term>
3291 <literal>SettingsDialog</literal>
3292 </term>
3293
3294 <listitem>
3295 <para>
3296 Do not show the <emphasis role="bold">Settings</emphasis>
3297 menu item in this menu.
3298 </para>
3299 </listitem>
3300 </varlistentry>
3301
3302 <varlistentry>
3303 <term>
3304 <literal>TakeSnapshot</literal>
3305 </term>
3306
3307 <listitem>
3308 <para>
3309 Do not show the <emphasis role="bold">Take
3310 Snapshot...</emphasis> menu item in this menu.
3311 </para>
3312 </listitem>
3313 </varlistentry>
3314
3315 <varlistentry>
3316 <term>
3317 <literal>InformationDialog</literal>
3318 </term>
3319
3320 <listitem>
3321 <para>
3322 Do not show the <emphasis role="bold">Session
3323 Information...</emphasis> menu item in this menu.
3324 </para>
3325 </listitem>
3326 </varlistentry>
3327
3328 <varlistentry>
3329 <term>
3330 <literal>FileManagerDialog</literal>
3331 </term>
3332
3333 <listitem>
3334 <para>
3335 Do not show the <emphasis role="bold">File
3336 Manager...</emphasis> menu item in this menu.
3337 </para>
3338 </listitem>
3339 </varlistentry>
3340
3341 <varlistentry>
3342 <term>
3343 <literal>Pause</literal>
3344 </term>
3345
3346 <listitem>
3347 <para>
3348 Do not show the <emphasis role="bold">Pause</emphasis>
3349 menu item in this menu.
3350 </para>
3351 </listitem>
3352 </varlistentry>
3353
3354 <varlistentry>
3355 <term>
3356 <literal>Reset</literal>
3357 </term>
3358
3359 <listitem>
3360 <para>
3361 Do not show the <emphasis role="bold">Reset</emphasis>
3362 menu item in this menu.
3363 </para>
3364 </listitem>
3365 </varlistentry>
3366
3367 <varlistentry>
3368 <term>
3369 <literal>Shutdown</literal>
3370 </term>
3371
3372 <listitem>
3373 <para>
3374 Do not show the <emphasis role="bold">ACPI
3375 Shutdown</emphasis> menu item in this menu.
3376 </para>
3377 </listitem>
3378 </varlistentry>
3379
3380 </variablelist>
3381
3382 <para>
3383 This is a per-VM or global setting. Any combination of the above
3384 is allowed. To restore the default behavior, use
3385 </para>
3386
3387<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeMachineMenuActions</screen>
3388
3389 <para>
3390 Use the following command to disable certain actions of the
3391 <emphasis role="bold">View</emphasis> menu:
3392 </para>
3393
3394<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeViewMenuActions OPTION[,OPTION...]</screen>
3395
3396 <para>
3397 where <literal>OPTION</literal> is one of the following
3398 keywords:
3399 </para>
3400
3401 <variablelist>
3402
3403 <varlistentry>
3404 <term>
3405 <literal>All</literal>
3406 </term>
3407
3408 <listitem>
3409 <para>
3410 Do not show any menu item in this menu.
3411 </para>
3412 </listitem>
3413 </varlistentry>
3414
3415 <varlistentry>
3416 <term>
3417 <literal>Fullscreen</literal>
3418 </term>
3419
3420 <listitem>
3421 <para>
3422 Do not show the <emphasis role="bold">Full-screen
3423 Mode</emphasis> menu item in this menu.
3424 </para>
3425 </listitem>
3426 </varlistentry>
3427
3428 <varlistentry>
3429 <term>
3430 <literal>Seamless</literal>
3431 </term>
3432
3433 <listitem>
3434 <para>
3435 Do not show the <emphasis role="bold">Seamless
3436 Mode</emphasis> menu item in this menu.
3437 </para>
3438 </listitem>
3439 </varlistentry>
3440
3441 <varlistentry>
3442 <term>
3443 <literal>Scale</literal>
3444 </term>
3445
3446 <listitem>
3447 <para>
3448 Do not show the <emphasis role="bold">Scaled
3449 Mode</emphasis> menu item in this menu.
3450 </para>
3451 </listitem>
3452 </varlistentry>
3453
3454 <varlistentry>
3455 <term>
3456 <literal>GuestAutoresize</literal>
3457 </term>
3458
3459 <listitem>
3460 <para>
3461 Do not show the <emphasis role="bold">Auto-resize Guest
3462 Display</emphasis> menu item in this menu.
3463 </para>
3464 </listitem>
3465 </varlistentry>
3466
3467 <varlistentry>
3468 <term>
3469 <literal>AdjustWindow</literal>
3470 </term>
3471
3472 <listitem>
3473 <para>
3474 Do not show the <emphasis role="bold">Adjust Window
3475 Size</emphasis> menu item in this menu.
3476 </para>
3477 </listitem>
3478 </varlistentry>
3479
3480 <varlistentry>
3481 <term>
3482 <literal>TakeScreenshot</literal>
3483 </term>
3484
3485 <listitem>
3486 <para>
3487 Do not show the <emphasis role="bold">Take
3488 Screenshot...</emphasis> menu item in this menu.
3489 </para>
3490 </listitem>
3491 </varlistentry>
3492
3493 <varlistentry>
3494 <term>
3495 <literal>Recording</literal>
3496 </term>
3497
3498 <listitem>
3499 <para>
3500 Do not show the <emphasis role="bold">Recording</emphasis>
3501 menu item in this menu.
3502 </para>
3503 </listitem>
3504 </varlistentry>
3505
3506 <varlistentry>
3507 <term>
3508 <literal>VRDEServer</literal>
3509 </term>
3510
3511 <listitem>
3512 <para>
3513 Do not show the <emphasis role="bold">Remote
3514 Display</emphasis> menu item in this menu.
3515 </para>
3516 </listitem>
3517 </varlistentry>
3518
3519 <varlistentry>
3520 <term>
3521 <literal>MenuBar</literal>
3522 </term>
3523
3524 <listitem>
3525 <para>
3526 Do not show the <emphasis role="bold">Menu Bar</emphasis>
3527 menu item in this menu.
3528 </para>
3529 </listitem>
3530 </varlistentry>
3531
3532 <varlistentry>
3533 <term>
3534 <literal>MenuBarSettings</literal>
3535 </term>
3536
3537 <listitem>
3538 <para>
3539 Do not show the <emphasis role="bold">Menu Bar
3540 Settings...</emphasis> menu item in this menu.
3541 </para>
3542 </listitem>
3543 </varlistentry>
3544
3545 <varlistentry>
3546 <term>
3547 <literal>StatusBar</literal>
3548 </term>
3549
3550 <listitem>
3551 <para>
3552 Do not show the <emphasis role="bold">Status
3553 Bar</emphasis> menu item in this menu.
3554 </para>
3555 </listitem>
3556 </varlistentry>
3557
3558 <varlistentry>
3559 <term>
3560 <literal>StatusbarSettings</literal>
3561 </term>
3562
3563 <listitem>
3564 <para>
3565 Do not show the <emphasis role="bold">Statusbar
3566 Settings...</emphasis> menu item in this menu.
3567 </para>
3568 </listitem>
3569 </varlistentry>
3570
3571 </variablelist>
3572
3573 <para>
3574 This is a per-VM or global setting. Any combination of the above
3575 is allowed. To restore the default behavior, use
3576 </para>
3577
3578<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeViewMenuActions</screen>
3579
3580 <para>
3581 Use the following command to disable certain actions of the
3582 <emphasis role="bold">Input</emphasis> menu:
3583 </para>
3584
3585<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeInputMenuActions OPTION[,OPTION...]</screen>
3586
3587 <para>
3588 where <literal>OPTION</literal> is one of the following
3589 keywords:
3590 </para>
3591
3592 <variablelist>
3593
3594 <varlistentry>
3595 <term>
3596 <literal>All</literal>
3597 </term>
3598
3599 <listitem>
3600 <para>
3601 Do not show any menu item in this menu.
3602 </para>
3603 </listitem>
3604 </varlistentry>
3605
3606 <varlistentry>
3607 <term>
3608 <literal>Keyboard</literal>
3609 </term>
3610
3611 <listitem>
3612 <para>
3613 Do not show the <emphasis role="bold">Keyboard</emphasis>
3614 menu item in this menu.
3615 </para>
3616 </listitem>
3617 </varlistentry>
3618
3619 <varlistentry>
3620 <term>
3621 <literal>KeyboardSettings</literal>
3622 </term>
3623
3624 <listitem>
3625 <para>
3626 Do not show the <emphasis role="bold">Keyboard
3627 Settings...</emphasis> menu item in this menu.
3628 </para>
3629 </listitem>
3630 </varlistentry>
3631
3632 <varlistentry>
3633 <term>
3634 <literal>SoftKeyboard</literal>
3635 </term>
3636
3637 <listitem>
3638 <para>
3639 Do not show the <emphasis role="bold">Soft
3640 Keyboard...</emphasis> menu item in this menu.
3641 </para>
3642 </listitem>
3643 </varlistentry>
3644
3645 <varlistentry>
3646 <term>
3647 <literal>TypeCAD</literal>
3648 </term>
3649
3650 <listitem>
3651 <para>
3652 Do not show the <emphasis role="bold">Insert
3653 Ctrl-Alt-Del</emphasis> menu item in this menu.
3654 </para>
3655 </listitem>
3656 </varlistentry>
3657
3658 <varlistentry>
3659 <term>
3660 <literal>TypeCABS</literal>
3661 </term>
3662
3663 <listitem>
3664 <para>
3665 Do not show the <emphasis role="bold">Insert
3666 Ctrl-Alt-Backspace</emphasis> menu item in this menu.
3667 </para>
3668 </listitem>
3669 </varlistentry>
3670
3671 <varlistentry>
3672 <term>
3673 <literal>TypeCtrlBreak</literal>
3674 </term>
3675
3676 <listitem>
3677 <para>
3678 Do not show the <emphasis role="bold">Insert
3679 Ctrl-Break</emphasis> menu item in this menu.
3680 </para>
3681 </listitem>
3682 </varlistentry>
3683
3684 <varlistentry>
3685 <term>
3686 <literal>TypeInsert</literal>
3687 </term>
3688
3689 <listitem>
3690 <para>
3691 Do not show the <emphasis role="bold">Insert
3692 Insert</emphasis> menu item in this menu.
3693 </para>
3694 </listitem>
3695 </varlistentry>
3696
3697 <varlistentry>
3698 <term>
3699 <literal>TypePrintScreen</literal>
3700 </term>
3701
3702 <listitem>
3703 <para>
3704 Do not show the <emphasis role="bold">Insert Print
3705 Screen</emphasis> menu item in this menu.
3706 </para>
3707 </listitem>
3708 </varlistentry>
3709
3710 <varlistentry>
3711 <term>
3712 <literal>TypeAltPrintScreen</literal>
3713 </term>
3714
3715 <listitem>
3716 <para>
3717 Do not show the <emphasis role="bold">Insert Alt Print
3718 Screen</emphasis> menu item in this menu.
3719 </para>
3720 </listitem>
3721 </varlistentry>
3722
3723 <varlistentry>
3724 <term>
3725 <literal>TypeHostKeyCombo</literal>
3726 </term>
3727
3728 <listitem>
3729 <para>
3730 Do not show the <emphasis role="bold">Insert Host Key
3731 Combo</emphasis> menu item in this menu.
3732 </para>
3733 </listitem>
3734 </varlistentry>
3735
3736 <varlistentry>
3737 <term>
3738 <literal>MouseIntegration</literal>
3739 </term>
3740
3741 <listitem>
3742 <para>
3743 Do not show the
3744 <emphasis role="bold">MouseIntegration</emphasis> menu
3745 item in this menu.
3746 </para>
3747 </listitem>
3748 </varlistentry>
3749
3750 </variablelist>
3751
3752 <para>
3753 This is a per-VM or global setting. Any combination of the above
3754 is allowed. To restore the default behavior, use
3755 </para>
3756
3757<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeInputMenuActions</screen>
3758
3759 <para>
3760 Use the following command to disable certain actions of the
3761 <emphasis role="bold">Devices</emphasis> menu:
3762 </para>
3763
3764<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDevicesMenuActions OPTION[,OPTION...]</screen>
3765
3766 <para>
3767 where <literal>OPTION</literal> is one of the following keywords
3768 to disable actions in the
3769 <emphasis role="bold">Devices</emphasis> menu:
3770 </para>
3771
3772 <variablelist>
3773
3774 <varlistentry>
3775 <term>
3776 <literal>All</literal>
3777 </term>
3778
3779 <listitem>
3780 <para>
3781 Do not show any menu item in this menu.
3782 </para>
3783 </listitem>
3784 </varlistentry>
3785
3786 <varlistentry>
3787 <term>
3788 <literal>HardDrives</literal>
3789 </term>
3790
3791 <listitem>
3792 <para>
3793 Do not show the <emphasis role="bold">Hard
3794 Disks</emphasis> menu item in this menu.
3795 </para>
3796 </listitem>
3797 </varlistentry>
3798
3799 <varlistentry>
3800 <term>
3801 <literal>OpticalDevices</literal>
3802 </term>
3803
3804 <listitem>
3805 <para>
3806 Do not show the <emphasis role="bold">Optical
3807 Devices</emphasis> menu item in this menu.
3808 </para>
3809 </listitem>
3810 </varlistentry>
3811
3812 <varlistentry>
3813 <term>
3814 <literal>FloppyDevices</literal>
3815 </term>
3816
3817 <listitem>
3818 <para>
3819 Do not show the <emphasis role="bold">Floppy
3820 Drives</emphasis> menu item in this menu.
3821 </para>
3822 </listitem>
3823 </varlistentry>
3824
3825 <varlistentry>
3826 <term>
3827 <literal>Audio</literal>
3828 </term>
3829
3830 <listitem>
3831 <para>
3832 Do not show the <emphasis role="bold">Audio</emphasis>
3833 menu item in this menu.
3834 </para>
3835 </listitem>
3836 </varlistentry>
3837
3838 <varlistentry>
3839 <term>
3840 <literal>Network</literal>
3841 </term>
3842
3843 <listitem>
3844 <para>
3845 Do not show the <emphasis role="bold">Network</emphasis>
3846 menu item in this menu.
3847 </para>
3848 </listitem>
3849 </varlistentry>
3850
3851 <varlistentry>
3852 <term>
3853 <literal>NetworkSettings</literal>
3854 </term>
3855
3856 <listitem>
3857 <para>
3858 Do not show the <emphasis role="bold">Network
3859 Settings</emphasis> menu item in this menu.
3860 </para>
3861 </listitem>
3862 </varlistentry>
3863
3864 <varlistentry>
3865 <term>
3866 <literal>USBDevices</literal>
3867 </term>
3868
3869 <listitem>
3870 <para>
3871 Do not show the <emphasis role="bold">USB </emphasis> menu
3872 item in this menu.
3873 </para>
3874 </listitem>
3875 </varlistentry>
3876
3877 <varlistentry>
3878 <term>
3879 <literal>WebCams</literal>
3880 </term>
3881
3882 <listitem>
3883 <para>
3884 Do not show the <emphasis role="bold">WebCams </emphasis>
3885 menu item in this menu.
3886 </para>
3887 </listitem>
3888 </varlistentry>
3889
3890 <varlistentry>
3891 <term>
3892 <literal>SharedFolders</literal>
3893 </term>
3894
3895 <listitem>
3896 <para>
3897 Do not show the <emphasis role="bold">Shared
3898 Folders</emphasis> menu item in this menu.
3899 </para>
3900 </listitem>
3901 </varlistentry>
3902
3903 <varlistentry>
3904 <term>
3905 <literal>SharedFoldersSettings</literal>
3906 </term>
3907
3908 <listitem>
3909 <para>
3910 Do not show the <emphasis role="bold">Shared Folders
3911 Settings...</emphasis> menu item in this menu.
3912 </para>
3913 </listitem>
3914 </varlistentry>
3915
3916 <varlistentry>
3917 <term>
3918 <literal>SharedClipboard</literal>
3919 </term>
3920
3921 <listitem>
3922 <para>
3923 Do not show the <emphasis role="bold">Shared
3924 Clipboard</emphasis> menu item in this menu.
3925 </para>
3926 </listitem>
3927 </varlistentry>
3928
3929 <varlistentry>
3930 <term>
3931 <literal>DragAndDrop</literal>
3932 </term>
3933
3934 <listitem>
3935 <para>
3936 Do not show the <emphasis role="bold">Drag and
3937 Drop</emphasis> menu item in this menu.
3938 </para>
3939 </listitem>
3940 </varlistentry>
3941
3942 <varlistentry>
3943 <term>
3944 <literal>InstallGuestTools</literal>
3945 </term>
3946
3947 <listitem>
3948 <para>
3949 Do not show the <emphasis role="bold">Insert Guest
3950 Additions CD image...</emphasis> menu item in this menu.
3951 </para>
3952 </listitem>
3953 </varlistentry>
3954
3955 </variablelist>
3956
3957 <para>
3958 This is a per-VM or global or global setting. Any combination of
3959 the above is allowed. To restore the default behavior, use
3960 </para>
3961
3962<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDevicesMenuActions</screen>
3963
3964 <para>
3965 Use the following command to disable certain actions of the
3966 <emphasis role="bold">Debug</emphasis> menu:
3967 </para>
3968
3969<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDebuggerMenuActions OPTION[,OPTION...]</screen>
3970
3971 <para>
3972 where <literal>OPTION</literal> is one of the following keywords
3973 to disable actions in the <emphasis>Debug</emphasis> menu, which
3974 is normally completely disabled:
3975 </para>
3976
3977 <variablelist>
3978
3979 <varlistentry>
3980 <term>
3981 <literal>All</literal>
3982 </term>
3983
3984 <listitem>
3985 <para>
3986 Do not show any menu item in this menu.
3987 </para>
3988 </listitem>
3989 </varlistentry>
3990
3991 <varlistentry>
3992 <term>
3993 <literal>Statistics</literal>
3994 </term>
3995
3996 <listitem>
3997 <para>
3998 Do not show the
3999 <emphasis role="bold">Statistics...</emphasis> menu item
4000 in this menu.
4001 </para>
4002 </listitem>
4003 </varlistentry>
4004
4005 <varlistentry>
4006 <term>
4007 <literal>CommandLine</literal>
4008 </term>
4009
4010 <listitem>
4011 <para>
4012 Do not show the <emphasis role="bold">Command
4013 Line...</emphasis> menu item in this menu.
4014 </para>
4015 </listitem>
4016 </varlistentry>
4017
4018 <varlistentry>
4019 <term>
4020 <literal>Logging</literal>
4021 </term>
4022
4023 <listitem>
4024 <para>
4025 Do not show the
4026 <emphasis role="bold">Logging...</emphasis> menu item in
4027 this menu.
4028 </para>
4029 </listitem>
4030 </varlistentry>
4031
4032 <varlistentry>
4033 <term>
4034 <literal>LogDialog</literal>
4035 </term>
4036
4037 <listitem>
4038 <para>
4039 Do not show the <emphasis role="bold">Show
4040 Log...</emphasis> menu item in this menu.
4041 </para>
4042 </listitem>
4043 </varlistentry>
4044
4045 <varlistentry>
4046 <term>
4047 <literal>GuestControlConsole</literal>
4048 </term>
4049
4050 <listitem>
4051 <para>
4052 Do not show the <emphasis role="bold">Guest Control
4053 Terminal...</emphasis> menu item in this menu.
4054 </para>
4055 </listitem>
4056 </varlistentry>
4057
4058 </variablelist>
4059
4060 <para>
4061 This is a per-VM or global setting. Any combination of the above
4062 is allowed. To restore the default behavior, use
4063 </para>
4064
4065<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeDebuggerMenuActions</screen>
4066
4067 <para>
4068 Use the following command to disable certain actions of the
4069 <emphasis role="bold">View</emphasis> menu:
4070 </para>
4071
4072<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeHelpMenuActions OPTION[,OPTION...]</screen>
4073
4074 <para>
4075 where <literal>OPTION</literal> is one of the following keywords
4076 to disable actions in the <emphasis role="bold">Help</emphasis>
4077 menu, which is normally completely disabled:
4078 </para>
4079
4080 <variablelist>
4081
4082 <varlistentry>
4083 <term>
4084 <literal>All</literal>
4085 </term>
4086
4087 <listitem>
4088 <para>
4089 Do not show any menu item in this menu.
4090 </para>
4091 </listitem>
4092 </varlistentry>
4093
4094 <varlistentry>
4095 <term>
4096 <literal>Contents</literal>
4097 </term>
4098
4099 <listitem>
4100 <para>
4101 Do not show the
4102 <emphasis role="bold">Contents...</emphasis> menu item in
4103 this menu.
4104 </para>
4105 </listitem>
4106 </varlistentry>
4107
4108 <varlistentry>
4109 <term>
4110 <literal>WebSite</literal>
4111 </term>
4112
4113 <listitem>
4114 <para>
4115 Do not show the <emphasis role="bold">VirtualBox Web
4116 Site...</emphasis> menu item in this menu.
4117 </para>
4118 </listitem>
4119 </varlistentry>
4120
4121 <varlistentry>
4122 <term>
4123 <literal>BugTracker</literal>
4124 </term>
4125
4126 <listitem>
4127 <para>
4128 Do not show the <emphasis role="bold">VirtualBox Bug
4129 Tracker...</emphasis> menu item in this menu.
4130 </para>
4131 </listitem>
4132 </varlistentry>
4133
4134 <varlistentry>
4135 <term>
4136 <literal>Forums</literal>
4137 </term>
4138
4139 <listitem>
4140 <para>
4141 Do not show the <emphasis role="bold">VirtualBox
4142 Forums...</emphasis> menu item in this menu.
4143 </para>
4144 </listitem>
4145 </varlistentry>
4146
4147 <varlistentry>
4148 <term>
4149 <literal>Oracle</literal>
4150 </term>
4151
4152 <listitem>
4153 <para>
4154 Do not show the <emphasis role="bold">Oracle Web
4155 Site...</emphasis> menu item in this menu.
4156 </para>
4157 </listitem>
4158 </varlistentry>
4159
4160 <varlistentry>
4161 <term>
4162 <literal>About</literal>
4163 </term>
4164
4165 <listitem>
4166 <para>
4167 Do not show the <emphasis role="bold">About
4168 VirtualBox...</emphasis> menu item in this menu. Only for
4169 non-Mac OS X hosts.
4170 </para>
4171 </listitem>
4172 </varlistentry>
4173
4174 </variablelist>
4175
4176 <para>
4177 This is a per-VM or global setting. Any combination of the above
4178 is allowed. To restore the default behavior, use
4179 </para>
4180
4181<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedRuntimeHelpMenuActions</screen>
4182
4183 </sect2>
4184
4185 <sect2 id="config-vm-window-status-bar">
4186
4187 <title>Configure VM Window Status Bar Entries</title>
4188
4189 <para>
4190 You can disable certain status bar items:
4191 </para>
4192
4193<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedStatusBarIndicators OPTION[,OPTION...]</screen>
4194
4195 <para>
4196 where <literal>OPTION</literal> is one of the following
4197 keywords:
4198 </para>
4199
4200 <variablelist>
4201
4202 <varlistentry>
4203 <term>
4204 <literal>HardDisks</literal>
4205 </term>
4206
4207 <listitem>
4208 <para>
4209 Do not show the hard disk icon in the VM window status
4210 bar. By default the hard disk icon is only shown if the VM
4211 configuration contains one or more hard disks.
4212 </para>
4213 </listitem>
4214 </varlistentry>
4215
4216 <varlistentry>
4217 <term>
4218 <literal>OpticalDisks</literal>
4219 </term>
4220
4221 <listitem>
4222 <para>
4223 Do not show the CD icon in the VM window status bar. By
4224 default the CD icon is only shown if the VM configuration
4225 contains one or more CD drives.
4226 </para>
4227 </listitem>
4228 </varlistentry>
4229
4230 <varlistentry>
4231 <term>
4232 <literal>FloppyDisks</literal>
4233 </term>
4234
4235 <listitem>
4236 <para>
4237 Do not show the floppy icon in the VM window status bar.
4238 By default the floppy icon is only shown if the VM
4239 configuration contains one or more floppy drives.
4240 </para>
4241 </listitem>
4242 </varlistentry>
4243
4244 <varlistentry>
4245 <term>
4246 <literal>Network</literal>
4247 </term>
4248
4249 <listitem>
4250 <para>
4251 Do not show the network icon in the VM window status bar.
4252 By default the network icon is only shown if the VM
4253 configuration contains one or more active network
4254 adapters.
4255 </para>
4256 </listitem>
4257 </varlistentry>
4258
4259 <varlistentry>
4260 <term>
4261 <literal>USB</literal>
4262 </term>
4263
4264 <listitem>
4265 <para>
4266 Do not show the USB icon in the status bar.
4267 </para>
4268 </listitem>
4269 </varlistentry>
4270
4271 <varlistentry>
4272 <term>
4273 <literal>SharedFolders</literal>
4274 </term>
4275
4276 <listitem>
4277 <para>
4278 Do not show the shared folders icon in the status bar.
4279 </para>
4280 </listitem>
4281 </varlistentry>
4282
4283 <varlistentry>
4284 <term>
4285 <literal>Capture</literal>
4286 </term>
4287
4288 <listitem>
4289 <para>
4290 Do not show the capture icon in the status bar.
4291 </para>
4292 </listitem>
4293 </varlistentry>
4294
4295 <varlistentry>
4296 <term>
4297 <literal>Features</literal>
4298 </term>
4299
4300 <listitem>
4301 <para>
4302 Do not show the CPU features icon in the status bar.
4303 </para>
4304 </listitem>
4305 </varlistentry>
4306
4307 <varlistentry>
4308 <term>
4309 <literal>Mouse</literal>
4310 </term>
4311
4312 <listitem>
4313 <para>
4314 Do not show the mouse icon in the status bar.
4315 </para>
4316 </listitem>
4317 </varlistentry>
4318
4319 <varlistentry>
4320 <term>
4321 <literal>Keyboard</literal>
4322 </term>
4323
4324 <listitem>
4325 <para>
4326 Do not show the keyboard icon in the status bar.
4327 </para>
4328 </listitem>
4329 </varlistentry>
4330
4331 </variablelist>
4332
4333 <para>
4334 This is a per-VM or global setting. Any combination of the above
4335 is allowed. If all options are specified, no icons are displayed
4336 in the status bar of the VM window. To restore the default
4337 behavior, use
4338 </para>
4339
4340<screen>VBoxManage setextradata "VM name"|global GUI/RestrictedStatusBarIndicators</screen>
4341
4342 </sect2>
4343
4344 <sect2 id="config-vm-window-visual-modes">
4345
4346 <title>Configure VM Window Visual Modes</title>
4347
4348 <para>
4349 You can disable certain VM visual modes:
4350 </para>
4351
4352<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/RestrictedVisualStates <replaceable>property</replaceable>[,<replaceable>property</replaceable>...]</screen>
4353
4354 <para>
4355 <replaceable>property</replaceable> is one of the following:
4356 </para>
4357
4358 <variablelist>
4359
4360 <varlistentry>
4361 <term>
4362 <literal>Fullscreen</literal>
4363 </term>
4364
4365 <listitem>
4366 <para>
4367 Do not allow to switch the VM into full screen mode.
4368 </para>
4369 </listitem>
4370 </varlistentry>
4371
4372 <varlistentry>
4373 <term>
4374 <literal>Seamless</literal>
4375 </term>
4376
4377 <listitem>
4378 <para>
4379 Do not allow to switch the VM into seamless mode.
4380 </para>
4381 </listitem>
4382 </varlistentry>
4383
4384 <varlistentry>
4385 <term>
4386 <literal>Scale</literal>
4387 </term>
4388
4389 <listitem>
4390 <para>
4391 Do not allow to switch the VM into scale mode.
4392 </para>
4393 </listitem>
4394 </varlistentry>
4395
4396 </variablelist>
4397
4398 <para>
4399 This is a per-VM setting. You can specify any combination of
4400 properties. To restore the default behavior, use the following
4401 command:
4402 </para>
4403
4404<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/RestrictedVisualStates</screen>
4405
4406 </sect2>
4407
4408 <sect2 id="host-key-customize">
4409
4410 <title>Host Key Customization</title>
4411
4412 <para>
4413 To disable all Host key combinations, open the preferences and
4414 change the Host key to None. This might be useful when using
4415 &product-name; in a kiosk mode.
4416 </para>
4417
4418 <para>
4419 To redefine or disable certain Host key actions, use the
4420 following command:
4421 </para>
4422
4423<screen>$ VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=F,...."</screen>
4424
4425 <para>
4426 The following table shows the possible Host key actions,
4427 together with their default Host key shortcut. Setting an action
4428 to None will disable that Host key action.
4429 </para>
4430
4431 <table id="table-host-key-customize" tabstyle="oracle-all">
4432 <title>Host Key Customization</title>
4433 <tgroup cols="3">
4434 <thead>
4435 <row>
4436 <entry><para>
4437 <emphasis role="bold">Action</emphasis>
4438 </para></entry>
4439 <entry><para>
4440 <emphasis role="bold">Default Key</emphasis>
4441 </para></entry>
4442 <entry><para>
4443 <emphasis role="bold">Action</emphasis>
4444 </para></entry>
4445 </row>
4446 </thead>
4447 <tbody>
4448 <row>
4449 <entry><para>
4450 <literal>TakeSnapshot</literal>
4451 </para></entry>
4452 <entry><para>
4453 T
4454 </para></entry>
4455 <entry><para>
4456 Take a snapshot
4457 </para></entry>
4458 </row>
4459 <row>
4460 <entry><para>
4461 <literal>TakeScreenshot</literal>
4462 </para></entry>
4463 <entry><para>
4464 E
4465 </para></entry>
4466 <entry><para>
4467 Take a screenshot
4468 </para></entry>
4469 </row>
4470 <row>
4471 <entry><para>
4472 <literal>MouseIntegration</literal>
4473 </para></entry>
4474 <entry><para>
4475 I
4476 </para></entry>
4477 <entry><para>
4478 Toggle mouse integration
4479 </para></entry>
4480 </row>
4481 <row>
4482 <entry><para>
4483 <literal>TypeCAD</literal>
4484 </para></entry>
4485 <entry><para>
4486 Del
4487 </para></entry>
4488 <entry><para>
4489 Inject Ctrl+Alt+Del
4490 </para></entry>
4491 </row>
4492 <row>
4493 <entry><para>
4494 <literal>TypeCABS</literal>
4495 </para></entry>
4496 <entry><para>
4497 Backspace
4498 </para></entry>
4499 <entry><para>
4500 Inject Ctrl+Alt+Backspace
4501 </para></entry>
4502 </row>
4503 <row>
4504 <entry><para>
4505 <literal>Pause</literal>
4506 </para></entry>
4507 <entry><para>
4508 P
4509 </para></entry>
4510 <entry><para>
4511 Pause the VM
4512 </para></entry>
4513 </row>
4514 <row>
4515 <entry><para>
4516 <literal>Reset</literal>
4517 </para></entry>
4518 <entry><para>
4519 R
4520 </para></entry>
4521 <entry>Hard reset the guest</entry>
4522 </row>
4523 <row>
4524 <entry><para>
4525 <literal>SaveState</literal>
4526 </para></entry>
4527 <entry><para></para></entry>
4528 <entry><para>
4529 Save the VM state and terminate the VM
4530 </para></entry>
4531 </row>
4532 <row>
4533 <entry><para>
4534 <literal>Shutdown</literal>
4535 </para></entry>
4536 <entry><para>
4537 H
4538 </para></entry>
4539 <entry><para>
4540 Press the virtual ACPI power button
4541 </para></entry>
4542 </row>
4543 <row>
4544 <entry><para>
4545 <literal>PowerOff</literal>
4546 </para></entry>
4547 <entry><para></para></entry>
4548 <entry><para>
4549 Power off the VM without saving the state
4550 </para></entry>
4551 </row>
4552 <row>
4553 <entry><para>
4554 <literal>Close</literal>
4555 </para></entry>
4556 <entry><para>
4557 Q
4558 </para></entry>
4559 <entry><para>
4560 Show the Close VM dialog
4561 </para></entry>
4562 </row>
4563 <row>
4564 <entry><para>
4565 <literal>FullscreenMode</literal>
4566 </para></entry>
4567 <entry><para>
4568 F
4569 </para></entry>
4570 <entry><para>
4571 Switch the VM into full screen mode
4572 </para></entry>
4573 </row>
4574 <row>
4575 <entry><para>
4576 <literal>SeamlessMode</literal>
4577 </para></entry>
4578 <entry><para>
4579 L
4580 </para></entry>
4581 <entry><para>
4582 Switch the VM into seamless mode
4583 </para></entry>
4584 </row>
4585 <row>
4586 <entry><para>
4587 <literal>ScaleMode</literal>
4588 </para></entry>
4589 <entry><para>
4590 C
4591 </para></entry>
4592 <entry><para>
4593 Switch the VM into scaled mode
4594 </para></entry>
4595 </row>
4596 <row>
4597 <entry><para>
4598 <literal>GuestAutoResize</literal>
4599 </para></entry>
4600 <entry><para>
4601 G
4602 </para></entry>
4603 <entry><para>
4604 Automatically resize the guest window
4605 </para></entry>
4606 </row>
4607 <row>
4608 <entry><para>
4609 <literal>WindowAdjust</literal>
4610 </para></entry>
4611 <entry><para>
4612 A
4613 </para></entry>
4614 <entry><para>
4615 Immediately resize the guest window
4616 </para></entry>
4617 </row>
4618 <row>
4619 <entry><para>
4620 <literal>PopupMenu</literal>
4621 </para></entry>
4622 <entry><para>
4623 Home
4624 </para></entry>
4625 <entry><para>
4626 Show the popup menu in full screen mode and seamless
4627 mode
4628 </para></entry>
4629 </row>
4630 <row>
4631 <entry><para>
4632 <literal>SettingsDialog</literal>
4633 </para></entry>
4634 <entry><para>
4635 S
4636 </para></entry>
4637 <entry><para>
4638 Open the VM Settings dialog
4639 </para></entry>
4640 </row>
4641 <row>
4642 <entry><para>
4643 <literal>InformationDialog</literal>
4644 </para></entry>
4645 <entry><para>
4646 N
4647 </para></entry>
4648 <entry><para>
4649 Show the VM Session Information window
4650 </para></entry>
4651 </row>
4652 <row>
4653 <entry><para>
4654 <literal>NetworkAdaptersDialog</literal>
4655 </para></entry>
4656 <entry><para></para></entry>
4657 <entry><para>
4658 Show the VM Network Adapters dialog
4659 </para></entry>
4660 </row>
4661 <row>
4662 <entry><para>
4663 <literal>SharedFoldersDialog</literal>
4664 </para></entry>
4665 <entry><para></para></entry>
4666 <entry><para>
4667 Show the VM Shared Folders dialog
4668 </para></entry>
4669 </row>
4670 <row>
4671 <entry><para>
4672 <literal>InstallGuestAdditions</literal>
4673 </para></entry>
4674 <entry><para>
4675 D
4676 </para></entry>
4677 <entry><para>
4678 Mount the ISO containing the Guest Additions
4679 </para></entry>
4680 </row>
4681 </tbody>
4682 </tgroup>
4683 </table>
4684
4685 <para>
4686 To disable full screen mode and seamless mode, use the following
4687 command:
4688 </para>
4689
4690<screen>$ VBoxManage setextradata global GUI/Input/MachineShortcuts "FullscreenMode=None,SeamlessMode=None"</screen>
4691
4692 </sect2>
4693
4694 <sect2 id="terminate-vm-action">
4695
4696 <title>Action when Terminating the VM</title>
4697
4698 <para>
4699 You can disallow certain actions when terminating a VM. To
4700 disallow specific actions, use the following command:
4701 </para>
4702
4703<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/RestrictedCloseActions <replaceable>property</replaceable>[,<replaceable>property</replaceable>...]</screen>
4704
4705 <para>
4706 <replaceable>property</replaceable> is one of the following:
4707 </para>
4708
4709 <variablelist>
4710
4711 <varlistentry>
4712 <term>
4713 <literal>SaveState</literal>
4714 </term>
4715
4716 <listitem>
4717 <para>
4718 Do not allow the user to save the VM state when
4719 terminating the VM.
4720 </para>
4721 </listitem>
4722 </varlistentry>
4723
4724 <varlistentry>
4725 <term>
4726 <literal>Shutdown</literal>
4727 </term>
4728
4729 <listitem>
4730 <para>
4731 Do not allow the user to shutdown the VM by sending the
4732 ACPI power-off event to the guest.
4733 </para>
4734 </listitem>
4735 </varlistentry>
4736
4737 <varlistentry>
4738 <term>
4739 <literal>PowerOff</literal>
4740 </term>
4741
4742 <listitem>
4743 <para>
4744 Do not allow the user to power off the VM.
4745 </para>
4746 </listitem>
4747 </varlistentry>
4748
4749 <varlistentry>
4750 <term>
4751 <literal>PowerOffRestoringSnapshot</literal>
4752 </term>
4753
4754 <listitem>
4755 <para>
4756 Do not allow the user to return to the last snapshot when
4757 powering off the VM.
4758 </para>
4759 </listitem>
4760 </varlistentry>
4761
4762 <varlistentry>
4763 <term>
4764 <literal>Detach</literal>
4765 </term>
4766
4767 <listitem>
4768 <para>
4769 Do not allow the user to detach from the VM process if the
4770 VM was started in separate mode.
4771 </para>
4772 </listitem>
4773 </varlistentry>
4774
4775 </variablelist>
4776
4777 <para>
4778 This is a per-VM setting. You can specify any combination of
4779 properties. If all properties are specified, the VM cannot be
4780 shut down.
4781 </para>
4782
4783 </sect2>
4784
4785 <sect2 id="terminate-vm-default-action">
4786
4787 <title>Default Action when Terminating the VM</title>
4788
4789 <para>
4790 You can define a specific action for terminating a VM. In
4791 contrast to the setting decribed in the previous section, this
4792 setting allows only one action when the user terminates the VM.
4793 No exit menu is shown. Use the following command:
4794 </para>
4795
4796<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/DefaultCloseAction <replaceable>action</replaceable></screen>
4797
4798 <para>
4799 <replaceable>action</replaceable> is one of the following:
4800 </para>
4801
4802 <variablelist>
4803
4804 <varlistentry>
4805 <term>
4806 <literal>SaveState</literal>
4807 </term>
4808
4809 <listitem>
4810 <para>
4811 Save the VM state before terminating the VM process.
4812 </para>
4813 </listitem>
4814 </varlistentry>
4815
4816 <varlistentry>
4817 <term>
4818 <literal>Shutdown</literal>
4819 </term>
4820
4821 <listitem>
4822 <para>
4823 The VM is shut down by sending the ACPI power-off event to
4824 the guest.
4825 </para>
4826 </listitem>
4827 </varlistentry>
4828
4829 <varlistentry>
4830 <term>
4831 <literal>PowerOff</literal>
4832 </term>
4833
4834 <listitem>
4835 <para>
4836 The VM is powered off.
4837 </para>
4838 </listitem>
4839 </varlistentry>
4840
4841 <varlistentry>
4842 <term>
4843 <literal>PowerOffRestoringSnapshot</literal>
4844 </term>
4845
4846 <listitem>
4847 <para>
4848 The VM is powered off and the saved state returns to the
4849 last snapshot.
4850 </para>
4851 </listitem>
4852 </varlistentry>
4853
4854 <varlistentry>
4855 <term>
4856 <literal>Detach</literal>
4857 </term>
4858
4859 <listitem>
4860 <para>
4861 Terminate the frontend but leave the VM process running.
4862 </para>
4863 </listitem>
4864 </varlistentry>
4865
4866 </variablelist>
4867
4868 <para>
4869 This is a per-VM setting. You can specify any combination of
4870 properties. If all properties are specified, the VM cannot be
4871 shut down.
4872 </para>
4873
4874 </sect2>
4875
4876 <sect2 id="guru-meditation-action">
4877
4878 <title>Action for Handling a Guru Meditation</title>
4879
4880 <para>
4881 A VM runs into a Guru Meditation if there is a problem which
4882 cannot be fixed by other means than terminating the process. The
4883 default is to show a message window which instructs the user to
4884 open a bug report.
4885 </para>
4886
4887 <para>
4888 This behavior can be configured as follows:
4889 </para>
4890
4891<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/GuruMeditationHandler <replaceable>mode</replaceable></screen>
4892
4893 <para>
4894 <replaceable>mode</replaceable> is one of the following:
4895 </para>
4896
4897 <variablelist>
4898
4899 <varlistentry>
4900 <term>
4901 <literal>Default</literal>
4902 </term>
4903
4904 <listitem>
4905 <para>
4906 A message window is shown. After the user confirmed, the
4907 VM is terminated.
4908 </para>
4909 </listitem>
4910 </varlistentry>
4911
4912 <varlistentry>
4913 <term>
4914 <literal>PowerOff</literal>
4915 </term>
4916
4917 <listitem>
4918 <para>
4919 The VM is immediately powered-off without showing any
4920 message window. The VM logfile will show information about
4921 what happened.
4922 </para>
4923 </listitem>
4924 </varlistentry>
4925
4926 <varlistentry>
4927 <term>
4928 <literal>Ignore</literal>
4929 </term>
4930
4931 <listitem>
4932 <para>
4933 The VM is left in stuck mode. Execution is stopped but no
4934 message window is shown. The VM has to be powered off
4935 manually.
4936 </para>
4937 </listitem>
4938 </varlistentry>
4939
4940 </variablelist>
4941
4942 <para>
4943 This is a per-VM setting.
4944 </para>
4945
4946 </sect2>
4947
4948 <sect2 id="mouse-capture">
4949
4950 <title>Configuring Automatic Mouse Capturing</title>
4951
4952 <para>
4953 By default, the mouse is captured if the user clicks on the
4954 guest window and the guest expects relative mouse coordinates at
4955 this time. This happens if the pointing device is configured as
4956 PS/2 mouse and the guest has not yet started the &product-name;
4957 Guest Additions. For instance, the guest is booting or the Guest
4958 Additions are not installed, or if the pointing device is
4959 configured as a USB tablet but the guest has no USB driver
4960 loaded yet. Once the Guest Additions become active or the USB
4961 guest driver is started, the mouse capture is automatically
4962 released.
4963 </para>
4964
4965 <para>
4966 The default behavior is sometimes not desired. Therefore it can
4967 be configured as follows:
4968 </para>
4969
4970<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/MouseCapturePolicy <replaceable>mode</replaceable></screen>
4971
4972 <para>
4973 <replaceable>mode</replaceable> is one of the following:
4974 </para>
4975
4976 <variablelist>
4977
4978 <varlistentry>
4979 <term>
4980 <literal>Default</literal>
4981 </term>
4982
4983 <listitem>
4984 <para>
4985 The default behavior as described above.
4986 </para>
4987 </listitem>
4988 </varlistentry>
4989
4990 <varlistentry>
4991 <term>
4992 <literal>HostComboOnly</literal>
4993 </term>
4994
4995 <listitem>
4996 <para>
4997 The mouse is only captured if the Host Key is toggled.
4998 </para>
4999 </listitem>
5000 </varlistentry>
5001
5002 <varlistentry>
5003 <term>
5004 <literal>Disabled</literal>
5005 </term>
5006
5007 <listitem>
5008 <para>
5009 The mouse is never captured, also not by toggling the Host
5010 Key
5011 </para>
5012 </listitem>
5013 </varlistentry>
5014
5015 </variablelist>
5016
5017 <para>
5018 This is a per-VM setting.
5019 </para>
5020
5021 </sect2>
5022
5023 <sect2 id="legacy-fullscreen-mode">
5024
5025 <title>Requesting Legacy Full-Screen Mode</title>
5026
5027 <para>
5028 &product-name; uses special window manager facilities to switch
5029 a multi-screen machine to full-screen on a multi-monitor host
5030 system. However, not all window managers provide these
5031 facilities correctly. &product-name; can be configured to use a
5032 legacy method of switching to full-screen mode instead, by using
5033 the command:
5034 </para>
5035
5036<screen>VBoxManage setextradata global GUI/Fullscreen/LegacyMode true</screen>
5037
5038 <para>
5039 You can go back to the default method by using the following
5040 command:
5041 </para>
5042
5043<screen>VBoxManage setextradata global GUI/Fullscreen/LegacyMode</screen>
5044
5045 <para>
5046 This is a global setting.
5047 </para>
5048
5049 </sect2>
5050
5051 <sect2 id="restrict-network-attachments">
5052
5053 <title>Removing Certain Modes of Networking From the GUI</title>
5054
5055 <para>
5056 It is possible to remove networking modes from &product-name;
5057 GUI. To do this, use the following command:
5058 </para>
5059
5060<screen>VBoxManage setextradata global GUI/RestrictedNetworkAttachmentTypes <replaceable>property</replaceable>[,<replaceable>property</replaceable>...]</screen>
5061
5062 <para>
5063 <replaceable>property</replaceable> is one of the following:
5064 </para>
5065
5066 <variablelist>
5067
5068 <varlistentry>
5069 <term>
5070 <literal>NAT</literal>
5071 </term>
5072
5073 <listitem>
5074 <para>
5075 Remove the <emphasis role="bold">NAT</emphasis> option
5076 from the GUI.
5077 </para>
5078 </listitem>
5079 </varlistentry>
5080
5081 <varlistentry>
5082 <term>
5083 <literal>NATNetwork</literal>
5084 </term>
5085
5086 <listitem>
5087 <para>
5088 Remove the <emphasis role="bold">NAT network</emphasis>
5089 option from the GUI.
5090 </para>
5091 </listitem>
5092 </varlistentry>
5093
5094 <varlistentry>
5095 <term>
5096 <literal>BridgedAdapter</literal>
5097 </term>
5098
5099 <listitem>
5100 <para>
5101 Remove the <emphasis role="bold">Bridged
5102 networking</emphasis> option from the GUI.
5103 </para>
5104 </listitem>
5105 </varlistentry>
5106
5107 <varlistentry>
5108 <term>
5109 <literal>InternalNetwork</literal>
5110 </term>
5111
5112 <listitem>
5113 <para>
5114 Remove the <emphasis role="bold">Internal
5115 networking</emphasis> option from the GUI.
5116 </para>
5117 </listitem>
5118 </varlistentry>
5119
5120 <varlistentry>
5121 <term>
5122 <literal>HostOnlyAdapter</literal>
5123 </term>
5124
5125 <listitem>
5126 <para>
5127 Remove the <emphasis role="bold">Host Only
5128 networking</emphasis> option from the GUI.
5129 </para>
5130 </listitem>
5131 </varlistentry>
5132
5133 <varlistentry>
5134 <term>
5135 <literal>GenericDriver</literal>
5136 </term>
5137
5138 <listitem>
5139 <para>
5140 Remove the <emphasis role="bold">Generic
5141 networking</emphasis> option from the GUI.
5142 </para>
5143 </listitem>
5144 </varlistentry>
5145
5146 </variablelist>
5147
5148 <para>
5149 This is a global setting. You can specify any combination of
5150 properties. To restore the default behavior, use the following
5151 command:
5152 </para>
5153
5154<screen>VBoxManage setextradata global GUI/RestrictedNetworkAttachmentTypes</screen>
5155
5156 </sect2>
5157
5158 </sect1>
5159
5160 <sect1 id="vboxwebsrv-daemon">
5161
5162 <title>Starting the &product-name; Web Service Automatically</title>
5163
5164 <para>
5165 The &product-name; web service, <command>vboxwebsrv</command>, is
5166 used for controlling &product-name; remotely. It is documented in
5167 detail in the &product-name; Software Development Kit (SDK). See
5168 <xref linkend="VirtualBoxAPI" />. Web service start scripts are
5169 available for supported host operating systems. The following
5170 sections describe how to use the scripts. The &product-name; web
5171 service is never started automatically as a result of a standard
5172 installation.
5173 </para>
5174
5175 <sect2 id="vboxwebsrv-linux">
5176
5177 <title>Linux: Starting the Web Service With init</title>
5178
5179 <para>
5180 On Linux, the web service can be automatically started during
5181 host boot by adding appropriate parameters to the file
5182 <filename>/etc/default/virtualbox</filename>. There is one
5183 mandatory parameter, <literal>VBOXWEB_USER</literal>, which must
5184 be set to the user which will later start the VMs. The
5185 parameters in the following table all start with the
5186 <literal>VBOXWEB_</literal> prefix string. For example:
5187 <literal>VBOXWEB_HOST</literal> and
5188 <literal>VBOXWEB_PORT</literal>.
5189 </para>
5190
5191 <table id="table-websrv-config-params" tabstyle="oracle-all">
5192 <title>Web Service Configuration Parameters</title>
5193 <tgroup cols="3">
5194 <thead>
5195 <row>
5196 <entry><para>
5197 <emphasis role="bold">Parameter</emphasis>
5198 </para></entry>
5199 <entry><para>
5200 <emphasis role="bold">Description</emphasis>
5201 </para></entry>
5202 <entry><para>
5203 <emphasis role="bold">Default</emphasis>
5204 </para></entry>
5205 </row>
5206 </thead>
5207 <tbody>
5208 <row>
5209 <entry><para>
5210 <literal>USER</literal>
5211 </para></entry>
5212 <entry><para>
5213 The user which the web service runs as
5214 </para></entry>
5215 <entry><para></para></entry>
5216 </row>
5217 <row>
5218 <entry><para>
5219 <literal>HOST</literal>
5220 </para></entry>
5221 <entry><para>
5222 The host to bind the web service to
5223 </para></entry>
5224 <entry><para>
5225 localhost
5226 </para></entry>
5227 </row>
5228 <row>
5229 <entry><para>
5230 <literal>PORT</literal>
5231 </para></entry>
5232 <entry><para>
5233 The port to bind the web service to
5234 </para></entry>
5235 <entry><para>
5236 18083
5237 </para></entry>
5238 </row>
5239 <row>
5240 <entry><para>
5241 <literal>SSL_KEYFILE</literal>
5242 </para></entry>
5243 <entry><para>
5244 Server key and certificate file, in PEM format
5245 </para></entry>
5246 <entry><para></para></entry>
5247 </row>
5248 <row>
5249 <entry><para>
5250 <literal>SSL_PASSWORDFILE</literal>
5251 </para></entry>
5252 <entry><para>
5253 File name for password to server key
5254 </para></entry>
5255 <entry><para></para></entry>
5256 </row>
5257 <row>
5258 <entry><para>
5259 <literal>SSL_CACERT</literal>
5260 </para></entry>
5261 <entry><para>
5262 CA certificate file, in PEM format
5263 </para></entry>
5264 <entry><para></para></entry>
5265 </row>
5266 <row>
5267 <entry><para>
5268 <literal>SSL_CAPATH</literal>
5269 </para></entry>
5270 <entry><para>
5271 CA certificate path
5272 </para></entry>
5273 <entry><para></para></entry>
5274 </row>
5275 <row>
5276 <entry><para>
5277 <literal>SSL_DHFILE</literal>
5278 </para></entry>
5279 <entry><para>
5280 DH file name or DH key length in bits
5281 </para></entry>
5282 <entry><para></para></entry>
5283 </row>
5284 <row>
5285 <entry><para>
5286 <literal>SSL_RANDFILE</literal>
5287 </para></entry>
5288 <entry><para>
5289 File containing seed for random number generator
5290 </para></entry>
5291 <entry><para></para></entry>
5292 </row>
5293 <row>
5294 <entry><para>
5295 <literal>TIMEOUT</literal>
5296 </para></entry>
5297 <entry><para>
5298 Session timeout in seconds, 0 disables timeouts
5299 </para></entry>
5300 <entry><para>
5301 300
5302 </para></entry>
5303 </row>
5304 <row>
5305 <entry><para>
5306 <literal>CHECK_INTERVAL</literal>
5307 </para></entry>
5308 <entry><para>
5309 Frequency of timeout checks in seconds
5310 </para></entry>
5311 <entry><para>
5312 5
5313 </para></entry>
5314 </row>
5315 <row>
5316 <entry><para>
5317 <literal>THREADS</literal>
5318 </para></entry>
5319 <entry><para>
5320 Maximum number of worker threads to run in parallel
5321 </para></entry>
5322 <entry><para>
5323 100
5324 </para></entry>
5325 </row>
5326 <row>
5327 <entry><para>
5328 <literal>KEEPALIVE</literal>
5329 </para></entry>
5330 <entry><para>
5331 Maximum number of requests before a socket will be
5332 closed
5333 </para></entry>
5334 <entry><para>
5335 100
5336 </para></entry>
5337 </row>
5338 <row>
5339 <entry><para>
5340 <literal>ROTATE</literal>
5341 </para></entry>
5342 <entry><para>
5343 Number of log files, 0 disables log rotation
5344 </para></entry>
5345 <entry><para>
5346 10
5347 </para></entry>
5348 </row>
5349 <row>
5350 <entry><para>
5351 <literal>LOGSIZE</literal>
5352 </para></entry>
5353 <entry><para>
5354 Maximum log file size to trigger rotation, in bytes
5355 </para></entry>
5356 <entry><para>
5357 1MB
5358 </para></entry>
5359 </row>
5360 <row>
5361 <entry><para>
5362 <literal>LOGINTERVAL</literal>
5363 </para></entry>
5364 <entry><para>
5365 Maximum time interval to trigger log rotation, in
5366 seconds
5367 </para></entry>
5368 <entry><para>
5369 1 day
5370 </para></entry>
5371 </row>
5372 </tbody>
5373 </tgroup>
5374 </table>
5375
5376 <para>
5377 Setting the parameter <literal>SSL_KEYFILE</literal> enables the
5378 SSL/TLS support. Using encryption is strongly encouraged, as
5379 otherwise everything, including passwords, is transferred in
5380 clear text.
5381 </para>
5382
5383 </sect2>
5384
5385 <sect2 id="vboxwebsrv-solaris">
5386
5387 <title>Oracle Solaris: Starting the Web Service With SMF</title>
5388
5389 <para>
5390 On Oracle Solaris hosts, the &product-name; web service daemon
5391 is integrated into the SMF framework. You can change the
5392 parameters, but do not have to if the defaults below already
5393 match your needs:
5394 </para>
5395
5396<screen>svccfg -s svc:/application/virtualbox/webservice:default setprop config/host=localhost
5397svccfg -s svc:/application/virtualbox/webservice:default setprop config/port=18083
5398svccfg -s svc:/application/virtualbox/webservice:default setprop config/user=root</screen>
5399
5400 <para>
5401 The table in <xref linkend="vboxwebsrv-linux"/> showing the
5402 parameter names and defaults also applies for Oracle Solaris.
5403 The parameter names must be changed to lowercase and a prefix of
5404 <literal>config/</literal> has to be added. For example:
5405 <literal>config/user</literal> or
5406 <literal>config/ssl_keyfile</literal>. If you make any change,
5407 do not forget to run the following command to put the changes
5408 into effect immediately:
5409 </para>
5410
5411<screen>svcadm refresh svc:/application/virtualbox/webservice:default</screen>
5412
5413 <para>
5414 If you forget the above command then the previous settings are
5415 used when enabling the service. Check the current property
5416 settings as follows:
5417 </para>
5418
5419<screen>svcprop -p config svc:/application/virtualbox/webservice:default</screen>
5420
5421 <para>
5422 When everything is configured correctly you can start the
5423 &product-name; web service with the following command:
5424 </para>
5425
5426<screen>svcadm enable svc:/application/virtualbox/webservice:default</screen>
5427
5428 <para>
5429 For more information about SMF, please refer to the Oracle
5430 Solaris documentation.
5431 </para>
5432
5433 </sect2>
5434
5435 <sect2 id="vboxwebsrv-osx">
5436
5437 <title>Mac OS X: Starting the Web Service With launchd</title>
5438
5439 <para>
5440 On Mac OS X, launchd is used to start the &product-name;
5441 webservice. An example configuration file can be found in
5442 <filename>$HOME/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</filename>.
5443 It can be enabled by changing the <literal>Disabled</literal>
5444 key from <literal>true</literal> to <literal>false</literal>. To
5445 manually start the service use the following command:
5446 </para>
5447
5448<screen>launchctl load ~/Library/LaunchAgents/org.virtualbox.vboxwebsrv.plist</screen>
5449
5450 <para>
5451 For additional information on how launchd services could be
5452 configured see:
5453 </para>
5454
5455 <para>
5456 <ulink
5457 url="https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html" />.
5458 </para>
5459
5460 </sect2>
5461
5462 </sect1>
5463
5464 <sect1 id="vboxwatchdog">
5465
5466 <title>&product-name; Watchdog</title>
5467
5468 <para>
5469 The memory ballooning service, formerly known as
5470 <command>VBoxBalloonCtrl</command>, was renamed to VBoxWatchdog.
5471 This service now incorporates the following host services that are
5472 meant to be run in a server environment:
5473 </para>
5474
5475 <itemizedlist>
5476
5477 <listitem>
5478 <para>
5479 <emphasis role="bold">Memory ballooning control.</emphasis>
5480 This service automatically takes care of a VM's configured
5481 memory balloon. See <xref linkend="guestadd-balloon" />. This
5482 service is useful for server environments where VMs may
5483 dynamically require more or less memory during runtime.
5484 </para>
5485
5486 <para>
5487 The service periodically checks a VM's current memory balloon
5488 and its free guest RAM and automatically adjusts the current
5489 memory balloon by inflating or deflating it accordingly. This
5490 handling only applies to running VMs having recent Guest
5491 Additions installed.
5492 </para>
5493 </listitem>
5494
5495 <listitem>
5496 <para>
5497 <emphasis role="bold">Host isolation detection.</emphasis>
5498 This service provides a way to detect whether the host cannot
5499 reach the specific &product-name; server instance anymore and
5500 take appropriate actions, such as shutting down, saving the
5501 current state or even powering down certain VMs.
5502 </para>
5503 </listitem>
5504
5505 </itemizedlist>
5506
5507 <para>
5508 All configuration values can be either specified using the command
5509 line or global extradata, whereas command line values always have
5510 a higher priority when set. Some of the configuration values also
5511 be specified on a per-VM basis. So the overall lookup order is:
5512 command line, per-VM basis extradata if available, global
5513 extradata.
5514 </para>
5515
5516 <sect2 id="vboxwatchdog-ballonctrl">
5517
5518 <title>Memory Ballooning Control</title>
5519
5520 <para>
5521 The memory ballooning control inflates and deflates the memory
5522 balloon of VMs based on the VMs free memory and the desired
5523 maximum balloon size.
5524 </para>
5525
5526 <para>
5527 To set up the memory ballooning control the maximum ballooning
5528 size a VM can reach needs to be set. This can be specified using
5529 the command line, as follows:
5530 </para>
5531
5532<screen>--balloon-max &lt;Size in MB&gt;</screen>
5533
5534 <para>
5535 Using a per-VM basis extradata value, as follows:
5536 </para>
5537
5538<screen>VBoxManage setextradata &lt;VM-Name&gt; VBoxInternal2/Watchdog/BalloonCtrl/BalloonSizeMax &lt;Size in MB&gt;</screen>
5539
5540 <para>
5541 Using a global extradata value, as follows:
5542 </para>
5543
5544<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonSizeMax &lt;Size in MB&gt;</screen>
5545
5546 <note>
5547 <para>
5548 If no maximum ballooning size is specified by at least one of
5549 the parameters above, no ballooning will be performed at all.
5550 </para>
5551 </note>
5552
5553 <para>
5554 Setting the ballooning increment in MB can be either done using
5555 command line, as follows:
5556 </para>
5557
5558<screen>--balloon-inc &lt;Size in MB&gt;</screen>
5559
5560 <para>
5561 Using a global extradata value, as follows:
5562 </para>
5563
5564<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonIncrementMB &lt;Size in MB&gt;</screen>
5565
5566 <para>
5567 The default ballooning increment is 256 MB if not specified.
5568 </para>
5569
5570 <para>
5571 The same options apply for a ballooning decrement. Using the
5572 command line, as follows:
5573 </para>
5574
5575<screen>--balloon-dec &lt;Size in MB&gt;</screen>
5576
5577 <para>
5578 Using a global extradata value, as follows:
5579 </para>
5580
5581<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonDecrementMB &lt;Size in MB&gt;</screen>
5582
5583 <para>
5584 The default ballooning decrement is 128 MB if not specified.
5585 </para>
5586
5587 <para>
5588 The lower limit in MB for a balloon can be defined using the
5589 command line, as follows:
5590 </para>
5591
5592<screen>--balloon-lower-limit &lt;Size in MB&gt;</screen>
5593
5594 <para>
5595 Using a global extradata value, as follows:
5596 </para>
5597
5598<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/BalloonCtrl/BalloonLowerLimitMB &lt;Size in MB&gt;</screen>
5599
5600 <para>
5601 The default lower limit is 128 MB if not specified.
5602 </para>
5603
5604 </sect2>
5605
5606 <sect2 id="vboxwatchdog-hostisln">
5607
5608 <title>Host Isolation Detection</title>
5609
5610 <para>
5611 To detect whether a host is being isolated, that is, the host
5612 cannot reach the &product-name; server instance anymore, the
5613 host needs to set an alternating value to a global extradata
5614 value within a time period. If this value is not set within that
5615 time period a timeout occurred and the so-called host isolation
5616 response will be performed to the VMs handled. Which VMs are
5617 handled can be controlled by defining VM groups and assigning
5618 VMs to those groups. By default no groups are set, meaning that
5619 all VMs on the server will be handled when no host response is
5620 received within 30 seconds.
5621 </para>
5622
5623 <para>
5624 Set the groups handled by the host isolation detection using the
5625 following command line:
5626 </para>
5627
5628<screen>--apimon-groups=&lt;string[,stringN]&gt;</screen>
5629
5630 <para>
5631 Using a global extradata value, as follows:
5632 </para>
5633
5634<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/Groups &lt;string[,stringN]&gt;</screen>
5635
5636 <para>
5637 Set the host isolation timeout using the following command line:
5638 </para>
5639
5640<screen>--apimon-isln-timeout=&lt;ms&gt;</screen>
5641
5642 <para>
5643 Using a global extradata value, as follows:
5644 </para>
5645
5646<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationTimeoutMS &lt;ms&gt;</screen>
5647
5648 <para>
5649 Set the actual host isolation response using the following
5650 command line:
5651 </para>
5652
5653<screen>--apimon-isln-response=&lt;cmd&gt;</screen>
5654
5655 <para>
5656 Using a global extradata value, as follows:
5657 </para>
5658
5659<screen>VBoxManage setextradata global VBoxInternal2/Watchdog/APIMonitor/IsolationResponse &lt;cmd&gt;</screen>
5660
5661 <para>
5662 The following response commands are available:
5663 </para>
5664
5665 <itemizedlist>
5666
5667 <listitem>
5668 <para>
5669 <literal>none</literal>. This has no effect.
5670 </para>
5671 </listitem>
5672
5673 <listitem>
5674 <para>
5675 <literal>pause</literal>. Pauses the execution of a VM.
5676 </para>
5677 </listitem>
5678
5679 <listitem>
5680 <para>
5681 <literal>poweroff</literal>. Shuts down the VM by pressing
5682 the virtual power button. The VM will not have the chance of
5683 saving any data or veto the shutdown process.
5684 </para>
5685 </listitem>
5686
5687 <listitem>
5688 <para>
5689 <literal>save</literal>. Saves the current machine state and
5690 powers off the VM afterwards. If saving the machine state
5691 fails the VM will be paused.
5692 </para>
5693 </listitem>
5694
5695 <listitem>
5696 <para>
5697 <literal>shutdown</literal>. Shuts down the VM in a gentle
5698 way by sending an <literal>ACPI</literal> shutdown event to
5699 the VM's operating system. The OS then has the chance of
5700 doing a clean shutdown.
5701 </para>
5702 </listitem>
5703
5704 </itemizedlist>
5705
5706 </sect2>
5707
5708 <sect2 id="vboxwatchdog-moreinfo">
5709
5710 <title>More Information</title>
5711
5712 <para>
5713 For more advanced options and parameters like verbose logging
5714 check the built-in command line help accessible with
5715 <option>--help</option>.
5716 </para>
5717
5718 </sect2>
5719
5720 <sect2 id="vboxwatchdog-linux">
5721
5722 <title>Linux: Starting the Watchdog Service With init</title>
5723
5724 <para>
5725 On Linux, the watchdog service can be automatically started
5726 during host boot by adding appropriate parameters to the file
5727 <filename>/etc/default/virtualbox</filename>. There is one
5728 mandatory parameter, <literal>VBOXWATCHDOG_USER</literal>, which
5729 must be set to the user which will later start the VMs. For
5730 backward compatibility you can also specify
5731 <literal>VBOXBALLOONCTRL_USER</literal>.
5732 </para>
5733
5734 <para>
5735 The parameters in the following table all start with the
5736 <literal>VBOXWATCHDOG_</literal> prefix string. For example:
5737 <literal>VBOXWATCHDOG_BALLOON_INTERVAL</literal> and
5738 <literal>VBOXWATCHDOG_LOGSIZE</literal>. Legacy parameters such
5739 as <literal>VBOXBALLOONCTRL_INTERVAL</literal> can still be
5740 used.
5741 </para>
5742
5743 <table id="table-vboxwatchdog-config-params" tabstyle="oracle-all">
5744 <title>&product-name; Watchdog Configuration Parameters</title>
5745 <tgroup cols="3">
5746 <thead>
5747 <row>
5748 <entry><para>
5749 <emphasis role="bold">Parameter</emphasis>
5750 </para></entry>
5751 <entry><para>
5752 <emphasis role="bold">Description</emphasis>
5753 </para></entry>
5754 <entry><para>
5755 <emphasis role="bold">Default</emphasis>
5756 </para></entry>
5757 </row>
5758 </thead>
5759 <tbody>
5760 <row>
5761 <entry><para>
5762 <literal>USER</literal>
5763 </para></entry>
5764 <entry><para>
5765 The user which the watchdog service runs as
5766 </para></entry>
5767 <entry><para></para></entry>
5768 </row>
5769 <row>
5770 <entry><para>
5771 <literal>ROTATE</literal>
5772 </para></entry>
5773 <entry><para>
5774 Number of log files, 0 disables log rotation
5775 </para></entry>
5776 <entry><para>
5777 10
5778 </para></entry>
5779 </row>
5780 <row>
5781 <entry><para>
5782 <literal>LOGSIZE</literal>
5783 </para></entry>
5784 <entry><para>
5785 Maximum log file size to trigger rotation, in bytes
5786 </para></entry>
5787 <entry><para>
5788 1MB
5789 </para></entry>
5790 </row>
5791 <row>
5792 <entry><para>
5793 <literal>LOGINTERVAL</literal>
5794 </para></entry>
5795 <entry><para>
5796 Maximum time interval to trigger log rotation, in
5797 seconds
5798 </para></entry>
5799 <entry><para>
5800 1 day
5801 </para></entry>
5802 </row>
5803 <row>
5804 <entry><para>
5805 <literal>BALLOON_INTERVAL</literal>
5806 </para></entry>
5807 <entry><para>
5808 Interval for checking the balloon size, in
5809 milliseconds
5810 </para></entry>
5811 <entry><para>
5812 30000
5813 </para></entry>
5814 </row>
5815 <row>
5816 <entry><para>
5817 <literal>BALLOON_INCREMENT</literal>
5818 </para></entry>
5819 <entry><para>
5820 Balloon size increment, in megabytes
5821 </para></entry>
5822 <entry><para>
5823 256
5824 </para></entry>
5825 </row>
5826 <row>
5827 <entry><para>
5828 <literal>BALLOON_DECREMENT</literal>
5829 </para></entry>
5830 <entry><para>
5831 Balloon size decrement, in megabytes
5832 </para></entry>
5833 <entry><para>
5834 128
5835 </para></entry>
5836 </row>
5837 <row>
5838 <entry><para>
5839 <literal>BALLOON_LOWERLIMIT</literal>
5840 </para></entry>
5841 <entry><para>
5842 Balloon size lower limit, in megabytes
5843 </para></entry>
5844 <entry><para>
5845 64
5846 </para></entry>
5847 </row>
5848 <row>
5849 <entry><para>
5850 <literal>BALLOON_SAFETYMARGIN</literal>
5851 </para></entry>
5852 <entry><para>
5853 Free memory required for decreasing the balloon size,
5854 in megabytes
5855 </para></entry>
5856 <entry><para>
5857 1024
5858 </para></entry>
5859 </row>
5860 </tbody>
5861 </tgroup>
5862 </table>
5863
5864 </sect2>
5865
5866 <sect2 id="vboxwatchdog-solaris">
5867
5868 <title>Oracle Solaris: Starting the Watchdog Service With SMF</title>
5869
5870 <para>
5871 On Oracle Solaris hosts, the &product-name; watchdog service
5872 daemon is integrated into the SMF framework. You can change the
5873 parameters, but do not have to if the defaults already match
5874 your needs:
5875 </para>
5876
5877<screen>svccfg -s svc:/application/virtualbox/balloonctrl:default setprop \
5878 config/balloon_interval=10000
5879svccfg -s svc:/application/virtualbox/balloonctrl:default setprop \
5880config/balloon_safetymargin=134217728</screen>
5881
5882 <para>
5883 <xref linkend="table-vboxwatchdog-config-params"/> also applies
5884 for Oracle Solaris. The parameter names must be changed to
5885 lowercase and a prefix of <literal>config/</literal> has to be
5886 added. For example: <literal>config/user</literal> or
5887 <literal>config/balloon_safetymargin</literal>. If you made any
5888 change, do not forget to run the following command to put the
5889 changes into effect immediately:
5890 </para>
5891
5892<screen>svcadm refresh svc:/application/virtualbox/balloonctrl:default</screen>
5893
5894 <para>
5895 If you forget the above command then the previous settings will
5896 be used when enabling the service. Check the current property
5897 settings with the following command:
5898 </para>
5899
5900<screen>svcprop -p config svc:/application/virtualbox/balloonctrl:default</screen>
5901
5902 <para>
5903 When everything is configured correctly you can start the
5904 &product-name; watchdog service with the following command:
5905 </para>
5906
5907<screen>svcadm enable svc:/application/virtualbox/balloonctrl:default</screen>
5908
5909 <para>
5910 For more information about SMF, please refer to the Oracle
5911 Solaris documentation.
5912 </para>
5913
5914 </sect2>
5915
5916 </sect1>
5917
5918 <sect1 id="otherextpacks">
5919
5920 <title>Other Extension Packs</title>
5921
5922 <para>
5923 Another extension pack called VNC is available. This extension
5924 pack is open source and replaces the previous integration of the
5925 VNC remote access protocol. This is experimental code, and is
5926 initially available in the &product-name; source code package
5927 only. It is to a large portion code contributed by users, and is
5928 not supported in any way by Oracle.
5929 </para>
5930
5931 <para>
5932 The keyboard handling is severely limited, and only the US
5933 keyboard layout works. Other keyboard layouts will have at least
5934 some keys which produce the wrong results, often with quite
5935 surprising effects, and for layouts which have significant
5936 differences to the US keyboard layout it is most likely unusable.
5937 </para>
5938
5939 <para>
5940 It is possible to install both the &product-name; Extension Pack
5941 and VNC, but only one VRDE module can be active at any time. The
5942 following command switches to the VNC VRDE module in VNC:
5943 </para>
5944
5945<screen>VBoxManage setproperty vrdeextpack VNC</screen>
5946
5947 <para>
5948 Configuring the remote access works very similarly to VRDP, see
5949 <xref linkend="vrde" />, with some limitations. VNC does not
5950 support specifying several port numbers, and the authentication is
5951 done differently. VNC can only deal with password authentication,
5952 and there is no option to use password hashes. This leaves no
5953 other choice than having a clear-text password in the VM
5954 configuration, which can be set with the following command:
5955 </para>
5956
5957<screen>VBoxManage modifyvm <replaceable>VM-name</replaceable> --vrde-property VNCPassword=secret</screen>
5958
5959 <para>
5960 The user is responsible for keeping this password secret, and it
5961 should be removed when a VM configuration is passed to another
5962 person, for whatever purpose. Some VNC servers claim to have
5963 encrypted passwords in the configuration. This is not true
5964 encryption, it is only concealing the passwords, which is only as
5965 secure as using clear-text passwords.
5966 </para>
5967
5968 <para>
5969 The following command switches back to VRDP, if installed:
5970 </para>
5971
5972<screen>VBoxManage setproperty vrdeextpack "&product-name; Extension Pack"</screen>
5973
5974 </sect1>
5975
5976 <sect1 id="autostart">
5977
5978 <title>Starting Virtual Machines During System Boot</title>
5979
5980 <para>
5981 You can start VMs automatically during system boot on Linux,
5982 Oracle Solaris, and Mac OS X platforms for all users.
5983 </para>
5984
5985 <sect2 id="autostart-linux">
5986
5987 <title>Linux: Starting the Autostart Service With init</title>
5988
5989 <para>
5990 On Linux, the autostart service is activated by setting two
5991 variables in <filename>/etc/default/virtualbox</filename>. The
5992 first one is <literal>VBOXAUTOSTART_DB</literal> which contains
5993 an absolute path to the autostart database directory. The
5994 directory should have write access for every user who should be
5995 able to start virtual machines automatically. Furthermore the
5996 directory should have the sticky bit set. The second variable is
5997 <literal>VBOXAUTOSTART_CONFIG</literal> which points the service
5998 to the autostart configuration file which is used during boot to
5999 determine whether to allow individual users to start a VM
6000 automatically and configure startup delays. The configuration
6001 file can be placed in <filename>/etc/vbox</filename> and
6002 contains several options. One is
6003 <literal>default_policy</literal> which controls whether the
6004 autostart service allows or denies to start a VM for users which
6005 are not in the exception list. The exception list starts with
6006 <literal>exception_list</literal> and contains a comma separated
6007 list with usernames. Furthermore a separate startup delay can be
6008 configured for every user to avoid overloading the host. A
6009 sample configuration is given below:
6010 </para>
6011
6012<screen>
6013# Default policy is to deny starting a VM, the other option is "allow".
6014default_policy = deny
6015
6016# Bob is allowed to start virtual machines but starting them
6017# will be delayed for 10 seconds
6018bob = {
6019 allow = true
6020 startup_delay = 10
6021}
6022
6023# Alice is not allowed to start virtual machines, useful to exclude certain users
6024# if the default policy is set to allow.
6025alice = {
6026 allow = false
6027}
6028</screen>
6029
6030 <para>
6031 Any user who wants to enable autostart for individual machines
6032 must set the path to the autostart database directory with the
6033 following command:
6034 </para>
6035
6036<screen>VBoxManage setproperty autostartdbpath <replaceable>autostart-directory</replaceable></screen>
6037
6038 </sect2>
6039
6040 <sect2 id="autostart-solaris">
6041
6042 <title>Oracle Solaris: Starting the Autostart Service With SMF</title>
6043
6044 <para>
6045 On Oracle Solaris hosts, the &product-name; autostart daemon is
6046 integrated into the SMF framework. To enable it you must point
6047 the service to an existing configuration file which has the same
6048 format as on Linux, see <xref linkend="autostart-linux" />. For
6049 example:
6050 </para>
6051
6052<screen># svccfg -s svc:/application/virtualbox/autostart:default setprop \
6053 config/config=/etc/vbox/autostart.cfg</screen>
6054
6055 <para>
6056 When everything is configured correctly you can start the
6057 &product-name; autostart service with the following command:
6058 </para>
6059
6060<screen># svcadm enable svc:/application/virtualbox/autostart:default</screen>
6061
6062 <para>
6063 For more information about SMF, see the Oracle Solaris
6064 documentation.
6065 </para>
6066
6067 </sect2>
6068
6069 <sect2 id="autostart-osx">
6070
6071 <title>Mac OS X: Starting the Autostart Service With launchd</title>
6072
6073 <para>
6074 On Mac OS X, launchd is used to start the &product-name;
6075 autostart service. An example configuration file can be found in
6076 <filename>/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist</filename>.
6077 To enable the service copy the file to
6078 <filename>/Library/LaunchDaemons</filename> and change the
6079 <literal>Disabled</literal> key from <literal>true</literal> to
6080 <literal>false</literal>. Furthermore replace the second
6081 parameter to an existing configuration file which has the same
6082 format as on Linux, see <xref linkend="autostart-linux" />.
6083 </para>
6084
6085 <para>
6086 To manually start the service use the following command:
6087 </para>
6088
6089<screen># launchctl load /Library/LaunchDaemons/org.virtualbox.vboxautostart.plist</screen>
6090
6091 <para>
6092 For additional information on how launchd services can be
6093 configured see:
6094 </para>
6095
6096 <para>
6097 <ulink
6098 url="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html" />.
6099 </para>
6100
6101 </sect2>
6102
6103 <sect2 id="autostart-windows">
6104
6105 <title>Windows: Starting the Autostart Service</title>
6106
6107 <para>
6108 On Windows, autostart functionality consist of two components.
6109 The first component is a configuration file where the
6110 administrator can both set a delayed start for the VMs and
6111 temporarily disable autostarting for a particular user. The
6112 configuration file should be located in a folder accessible by
6113 all required users but it should have permissions allowing only
6114 reading by everyone but administrators. The configuration file
6115 contains several options. The
6116 <literal>default_policy</literal> controls whether the autostart
6117 service allows or denies starting of a VM for users that are not
6118 in the exception list. The exception list starts with
6119 <literal>exception_list</literal> and contains a comma separated
6120 list with usernames. Furthermore, a separate startup delay can
6121 be configured for every user to avoid overloading the host. A
6122 sample configuration is given below:
6123 </para>
6124
6125<screen>
6126 # Default policy is to deny starting a VM, the other option is "allow".
6127 default_policy = deny
6128
6129 # Bob is allowed to start virtual machines but starting them
6130 # will be delayed for 10 seconds
6131 bob = {
6132 allow = true
6133 startup_delay = 10
6134 }
6135
6136 # Alice is not allowed to start virtual machines, useful to exclude certain users
6137 # if the default policy is set to allow.
6138 alice = {
6139 allow = false
6140 }
6141</screen>
6142
6143 <para>
6144 The user name can be specified using the following forms:
6145 "user", "domain\user", ".\user" and "user@domain". An
6146 administrator must add the
6147 <literal>VBOXAUTOSTART_CONFIG</literal> environment variable
6148 into system variables containing the path to the configuration
6149 file described above. The environment variable tells the
6150 autostart services which configuration file is used.
6151 </para>
6152
6153 <para>
6154 The second component of autostart functionality is a Windows
6155 service. Every instance of this works on behalf of a particular
6156 user using their credentials.
6157 </para>
6158
6159 <para>
6160 To enable autostarting for a particular user, a member of the
6161 administrators group must run the following command:
6162 </para>
6163
6164<screen>VBoxAutostartSvc install --user=<replaceable>user</replaceable> [--password-file=<replaceable>password_file</replaceable>]</screen>
6165
6166 <para>
6167 The password file should contain the password followed by a line
6168 break. The rest of the file is ignored. The user will be asked
6169 for a password if the password file is not specified.
6170 </para>
6171
6172 <para>
6173 To disable autostarting for particular user, a member of the
6174 administrators group must run the following command:
6175 </para>
6176
6177<screen>VBoxAutostartSvc delete --user=<replaceable>user</replaceable></screen>
6178
6179 <para>
6180 If a user has changed their password then a member of the
6181 administrators group must either reinstall the service or change
6182 the service credentials using Windows Service Manager. Due to
6183 Windows security policies, the autostart service cannot be
6184 installed for users with empty passwords.
6185 </para>
6186
6187 <para>
6188 Finally, the user should define which VMs should be started at
6189 boot. The user should run the following command for every VM
6190 they wish to start at boot:
6191 </para>
6192
6193<screen>VBoxManage modifyvm <replaceable>VM name or UUID</replaceable> --autostart-enabled on</screen>
6194
6195 <para>
6196 The user can remove a particular VM from the VMs starting at
6197 boot by running the following command:
6198 </para>
6199
6200<screen>VBoxManage modifyvm <replaceable>VM name or UUID</replaceable> --autostart-enabled off</screen>
6201
6202 <note>
6203 <para>
6204 On Windows hosts, starting VMs via the autostart service might cause some
6205 issues, as the virtual machines are starting within the same session as
6206 VBoxSVC. For more information see <xref linkend="vboxsvc-session-0" />.
6207 </para>
6208 </note>
6209
6210 </sect2>
6211
6212 </sect1>
6213
6214 <sect1 id="vmencryption">
6215
6216 <title>Encryption of VMs</title>
6217
6218 <para>
6219 &product-name; enables you to transparently encrypt the VM data
6220 stored in the configuration file, saved state and EFI boot data
6221 for the guest.
6222 </para>
6223
6224 <para>
6225 &product-name; uses the AES algorithm in various modes. The selected
6226 mode depends on encrypting component of the VM. &product-name;
6227 supports 128-bit or 256-bit data encryption keys (DEK). The DEK
6228 is stored encrypted in the VM configuration file and is decrypted
6229 during VM opening.
6230 </para>
6231
6232 <para>
6233 Since the DEK is stored as part of the VM configuration file, it
6234 is important that it is kept safe. Losing the DEK means that the
6235 data stored in the VM is lost irrecoverably. Having complete and
6236 up to date backups of all data related to the VM is the
6237 responsibility of the user.
6238 </para>
6239
6240 <para>
6241 The VM, even if it is encrypted, may contain mediums encrypted with
6242 different passwords. To deal with this, the password for the VM itself
6243 also has password identifier such as passwords for mediums. The password
6244 ID is an arbitrary string which uniquely identifies the password in the
6245 VM and its mediums. It is allowed to use the same password for VM and
6246 its mediums with the same ID.
6247 </para>
6248
6249 <sect2 id="vmencryption-limitations">
6250
6251 <title>Limitations of VM Encryption</title>
6252
6253 <para>
6254 There are some limitations the user needs to be aware of when
6255 using this feature:
6256 </para>
6257
6258 <itemizedlist>
6259
6260 <listitem>
6261 <para>
6262 Exporting appliances containing encrypted VM is not
6263 possible because the OVF specification does not support
6264 this. The VM is therefore decrypted during export.
6265 </para>
6266 </listitem>
6267
6268 <listitem>
6269 <para>
6270 The DEK is kept in memory while the VM is running to be able
6271 to encrypt and decrypt VM data. While this should be obvious
6272 the user needs to be aware of this because an attacker might
6273 be able to extract the key on a compromised host and decrypt
6274 the data.
6275 </para>
6276 </listitem>
6277
6278 <listitem>
6279 <para>
6280 When encrypting or decrypting the VM, the password is passed
6281 in clear text using the &product-name; API. This needs to be
6282 kept in mind, especially when using third party API clients
6283 which make use of the webservice where the password might be
6284 transmitted over the network. The use of HTTPS is mandatory
6285 in such a case.
6286 </para>
6287 </listitem>
6288
6289 </itemizedlist>
6290
6291 </sect2>
6292
6293 <sect2 id="vmencryption-encryption">
6294
6295 <title>Encrypting VMs</title>
6296
6297 <para>
6298 Encrypting VMs can be done either using the GUI or
6299 <command>VBoxManage</command>. To encrypt an unencrypted
6300 VM with <command>VBoxManage</command>, use:
6301 </para>
6302
6303<screen>VBoxManage encryptvm <replaceable>uuid</replaceable>|<replaceable>vmname</replaceable> setencryption --new-password <replaceable>filename</replaceable>|- \
6304--cipher <replaceable>cipher-ID</replaceable> --new-password-id "<replaceable>ID</replaceable></screen>
6305
6306 <para>
6307 To supply the encryption password point
6308 <command>VBoxManage</command> to the file where the password is
6309 stored or specify <option>-</option> to let VBoxManage ask you
6310 for the password on the command line.
6311 </para>
6312
6313 <para>
6314 The cipher parameter specifies the cipher to use for encryption
6315 and can be either <literal>AES-128</literal> or
6316 <literal>AES-256</literal>. Appropriate mode GCM, CTR or XTS will
6317 be selected by VM depending on encrypting component.
6318 The specified password identifier can be freely chosen by the user
6319 and is used for correct identification when supplying multiple
6320 passwords for the VM.
6321 </para>
6322
6323 </sect2>
6324
6325 <sect2 id="vmencryption-addpassword">
6326
6327 <title>Opening the encrypted VM</title>
6328
6329 <para>
6330 At the time the &product-name; has just started up the encrypted
6331 VM can not be opened and it stays inaccessible. Also the encrypted
6332 VM stays inaccessible if it just registered without password or
6333 password is incorrect. The user needs to provide the password
6334 through either GUI or <command>VBoxManage</command> using the
6335 following command:
6336 </para>
6337
6338<screen>VBoxManage encryptvm <replaceable>uuid</replaceable>|<replaceable>vmname</replaceable> addpassword --password <replaceable>filename</replaceable>|- --password-id <replaceable>ID</replaceable></screen>
6339
6340 <para>
6341 To supply the encryption password point
6342 <command>VBoxManage</command> to the file where the password is
6343 stored or specify <option>-</option> to let VBoxManage ask you
6344 for the password on the command line.
6345 </para>
6346
6347 <para>
6348 If <replaceable>ID</replaceable> is the same as the password
6349 identifier supplied when encrypting the VM it updates the
6350 accessibility state.
6351 </para>
6352
6353 <para>
6354 If user needs to remove the entered password from the VM memory
6355 it can call <command>VBoxManage</command> using the following
6356 command:
6357 </para>
6358
6359<screen>VBoxManage encryptvm <replaceable>uuid</replaceable>|<replaceable>vmname</replaceable> removepassword <replaceable>ID</replaceable></screen>
6360
6361 <para>
6362 If <replaceable>ID</replaceable> is the same as the password
6363 identifier supplied when encrypting the VM it updates the
6364 accessibility state.
6365 </para>
6366
6367 <note>
6368 <para>
6369 If machine becomes inaccessible all passwords are purged.
6370 One has to add required passwords again using
6371 <command>VBoxManage encryptvm
6372 <replaceable>vmname</replaceable> addpassword</command>
6373 command, see <xref linkend="vmencryption-addpassword" />.
6374 </para>
6375 </note>
6376
6377 </sect2>
6378
6379 <sect2 id="vmencryption-decryption">
6380
6381 <title>Decrypting Encrypted VMs</title>
6382
6383 <para>
6384 In some circumstances it might be required to decrypt previously
6385 encrypted VMs. This can be done in the GUI or using
6386 <command>VBoxManage</command> with the following command:
6387 </para>
6388
6389<screen>VBoxManage encryptvm <replaceable>uuid</replaceable>|<replaceable>vmname</replaceable> setencryption --old-password <replaceable>file</replaceable>|-</screen>
6390
6391 <para>
6392 The only required parameter is the password the VM was
6393 encrypted with. The options are the same as for encrypting
6394 VMs.
6395 </para>
6396
6397 </sect2>
6398
6399 </sect1>
6400
6401 <sect1 id="vboxexpertstoragemgmt">
6402
6403 <title>&product-name; Expert Storage Management</title>
6404
6405 <para>
6406 In case the snapshot model of &product-name; is not sufficient it
6407 is possible to enable a special mode which makes it possible to
6408 reconfigure storage attachments while the VM is paused. The user
6409 has to make sure that the disk data stays consistent to the guest
6410 because unlike with hotplugging the guest is not informed about
6411 detached or newly attached media.
6412 </para>
6413
6414 <para>
6415 The expert storage management mode can be enabled per VM
6416 executing:
6417 </para>
6418
6419<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal2/SilentReconfigureWhilePaused" 1</screen>
6420
6421 <para>
6422 You can reconfigure storage attachments later while the VM is
6423 paused by using the <command>VBoxManage storageattach</command>
6424 command.
6425 </para>
6426
6427 </sect1>
6428
6429 <sect1 id="hostpowertweaks">
6430
6431 <title>Handling of Host Power Management Events</title>
6432
6433 <para>
6434 Some host power management events are handled by &product-name;.
6435 The actual behavior depends on the platform:
6436 </para>
6437
6438 <itemizedlist>
6439
6440 <listitem>
6441 <para>
6442 <emphasis role="bold">Host Suspends.</emphasis> This event is
6443 generated when the host is about to suspend, that is, the host
6444 saves the state to some non-volatile storage and powers off.
6445 </para>
6446
6447 <para>
6448 This event is currently only handled on Windows hosts and Mac
6449 OS X hosts. When this event is generated, &product-name; will
6450 pause all running VMs.
6451 </para>
6452 </listitem>
6453
6454 <listitem>
6455 <para>
6456 <emphasis role="bold">Host Resumes.</emphasis> This event is
6457 generated when the host woke up from the suspended state.
6458 </para>
6459
6460 <para>
6461 This event is currently only handled on Windows hosts and Mac
6462 OS X hosts. When this event is generated, &product-name; will
6463 resume all VMs which are where paused before.
6464 </para>
6465 </listitem>
6466
6467 <listitem>
6468 <para>
6469 <emphasis role="bold">Battery Low.</emphasis> The battery
6470 level reached a critical level, usually less than 5 percent
6471 charged.
6472 </para>
6473
6474 <para>
6475 This event is currently only handled on Windows hosts and Mac
6476 OS X hosts. When this event is generated, &product-name; will
6477 save the state and terminate all VMs in preparation of a
6478 potential host powerdown.
6479 </para>
6480
6481 <para>
6482 The behavior can be configured. By executing the following
6483 command, no VM is saved:
6484 </para>
6485
6486<screen>$ VBoxManage setextradata global "VBoxInternal2/SavestateOnBatteryLow" 0</screen>
6487
6488 <para>
6489 This is a global setting as well as a per-VM setting. The
6490 per-VM value has higher precedence than the global value. The
6491 following command will save the state of all VMs but will not
6492 save the state of VM "foo":
6493 </para>
6494
6495<screen>$ VBoxManage setextradata global "VBoxInternal2/SavestateOnBatteryLow" 1
6496$ VBoxManage setextradata "foo" "VBoxInternal2/SavestateOnBatteryLow" 0</screen>
6497
6498 <para>
6499 The first line is actually not required as by default the
6500 savestate action is performed.
6501 </para>
6502 </listitem>
6503
6504 </itemizedlist>
6505
6506 </sect1>
6507
6508 <sect1 id="sse412passthrough">
6509
6510 <title>Passing Through SSE4.1/SSE4.2 Instructions</title>
6511
6512 <para>
6513 To provide SSE 4.1/SSE 4.2 support to guests, the host CPU has to
6514 implement these instruction sets. The instruction sets are exposed
6515 to guests by default, but it is possible to disable the
6516 instructions for certain guests by using the following commands:
6517 </para>
6518
6519<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
6520VBoxInternal/CPUM/IsaExts/SSE4.1 0
6521$ VBoxManage setextradata <replaceable>VM-name</replaceable> \
6522VBoxInternal/CPUM/IsaExts/SSE4.2 0</screen>
6523
6524 <para>
6525 These are per-VM settings which are enabled by default.
6526 </para>
6527
6528 </sect1>
6529
6530 <sect1 id="hidledssync">
6531
6532 <title>Support for Keyboard Indicator Synchronization</title>
6533
6534 <para>
6535 This feature makes the host keyboard indicators (LEDs) match those
6536 of the VM's emulated keyboard when the machine window is active.
6537 It is currently implemented for Mac OS X and Windows hosts. This
6538 feature is enabled by default on supported host OSes. You can
6539 disable this feature by running the following command:
6540 </para>
6541
6542<screen>$ VBoxManage setextradata <replaceable>VM-name</replaceable> GUI/HidLedsSync 0</screen>
6543
6544 <para>
6545 This is a per-VM setting that is enabled by default.
6546 </para>
6547
6548 </sect1>
6549
6550 <sect1 id="usbtrafficcapturing">
6551
6552 <title>Capturing USB Traffic for Selected Devices</title>
6553
6554 <para>
6555 You can capture USB traffic for single USB devices or on the root
6556 hub level, which captures the traffic of all USB devices attached
6557 to the root hub. &product-name; stores the traffic in a format
6558 which is compatible with Wireshark. To capture the traffic of a
6559 specific USB device it must be attached to the VM with
6560 <command>VBoxManage</command> using the following command:
6561 </para>
6562
6563<screen>VBoxManage controlvm <replaceable>VM-name</replaceable> usbattach <replaceable>device uuid</replaceable>|<replaceable>address</replaceable> --capturefile <replaceable>filename</replaceable></screen>
6564
6565 <para>
6566 In order to enable capturing on the root hub use the following
6567 command while the VM is not running:
6568 </para>
6569
6570<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> \
6571VBoxInternal/Devices/usb-ehci/0/LUN#0/Config/CaptureFilename <replaceable>filename</replaceable></screen>
6572
6573 <para>
6574 The command above enables capturing on the root hub attached to
6575 the EHCI controller. To enable it for the OHCI or XHCI controller
6576 replace <literal>usb-ehci</literal> with
6577 <literal>usb-ohci</literal> or <literal>usb-xhci</literal>,
6578 respectively.
6579 </para>
6580
6581 </sect1>
6582
6583 <sect1 id="heartbeatservice">
6584
6585 <title>Configuring the Heartbeat Service</title>
6586
6587 <para>
6588 &product-name; ships a simple heartbeat service. Once the Guest
6589 Additions are active, the guest sends frequent heartbeat pings to
6590 the host. If the guest stops sending the heartbeat pings without
6591 properly terminating the service, the VM process will log this
6592 event in the VBox.log file. In the future it might be possible to
6593 configure dedicated actions but for now there is only a warning in
6594 the log file.
6595 </para>
6596
6597 <para>
6598 There are two parameters to configure. The <emphasis>heartbeat
6599 interval</emphasis> defines the time between two heartbeat pings.
6600 The default value is 2 seconds, that is, the heartbeat service of
6601 the &product-name; Guest Additions will send a heartbeat ping
6602 every two seconds. The value in nanoseconds can be configured like
6603 this:
6604 </para>
6605
6606<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> \
6607VBoxInternal/Devices/VMMDev/0/Config/HeartbeatInterval 2000000000</screen>
6608
6609 <para>
6610 The <emphasis>heartbeat timeout</emphasis> defines the time the
6611 host waits starting from the last heartbeat ping before it defines
6612 the guest as unresponsive. The default value is 2 times the
6613 heartbeat interval (4 seconds) and can be configured as following,
6614 in nanoseconds:
6615 </para>
6616
6617<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> \
6618VBoxInternal/Devices/VMMDev/0/Config/HeartbeatTimeout 4000000000</screen>
6619
6620 <para>
6621 If the heartbeat timeout expires, there will be a log message like
6622 <emphasis>VMMDev: HeartBeatCheckTimer: Guest seems to be
6623 unresponsive. Last heartbeat received 5 seconds ago.</emphasis> If
6624 another heartbeat ping arrives after this warning, there will be a
6625 log message like <emphasis>VMMDev: GuestHeartBeat: Guest is
6626 alive.</emphasis>
6627 </para>
6628
6629 </sect1>
6630
6631 <sect1 id="diskencryption">
6632
6633 <title>Encryption of Disk Images</title>
6634
6635 <para>
6636 &product-name; enables you to transparently encrypt the data
6637 stored in hard disk images for the guest. It does not depend on a
6638 specific image format to be used. Images which have the data
6639 encrypted are not portable between &product-name; and other
6640 virtualization software.
6641 </para>
6642
6643 <para>
6644 &product-name; uses the AES algorithm in XTS mode and supports
6645 128-bit or 256-bit data encryption keys (DEK). The DEK is stored
6646 encrypted in the medium properties and is decrypted during VM
6647 startup by entering a password which was chosen when the image was
6648 encrypted.
6649 </para>
6650
6651 <para>
6652 Since the DEK is stored as part of the VM configuration file, it
6653 is important that it is kept safe. Losing the DEK means that the
6654 data stored in the disk images is lost irrecoverably. Having
6655 complete and up to date backups of all data related to the VM is
6656 the responsibility of the user.
6657 </para>
6658
6659 <sect2 id="diskencryption-limitations">
6660
6661 <title>Limitations of Disk Encryption</title>
6662
6663 <para>
6664 There are some limitations the user needs to be aware of when
6665 using this feature:
6666 </para>
6667
6668 <itemizedlist>
6669
6670 <listitem>
6671 <para>
6672 This feature is part of the &product-name; Extension Pack,
6673 which needs to be installed. Otherwise disk encryption is
6674 unavailable.
6675 </para>
6676 </listitem>
6677
6678 <listitem>
6679 <para>
6680 Since encryption works only on the stored user data, it is
6681 currently not possible to check for metadata integrity of
6682 the disk image. Attackers might destroy data by removing or
6683 changing blocks of data in the image or change metadata
6684 items such as the disk size.
6685 </para>
6686 </listitem>
6687
6688 <listitem>
6689 <para>
6690 Exporting appliances which contain encrypted disk images is
6691 not possible because the OVF specification does not support
6692 this. All images are therefore decrypted during export.
6693 </para>
6694 </listitem>
6695
6696 <listitem>
6697 <para>
6698 The DEK is kept in memory while the VM is running to be able
6699 to decrypt data read and encrypt data written by the guest.
6700 While this should be obvious the user needs to be aware of
6701 this because an attacker might be able to extract the key on
6702 a compromised host and decrypt the data.
6703 </para>
6704 </listitem>
6705
6706 <listitem>
6707 <para>
6708 When encrypting or decrypting the images, the password is
6709 passed in clear text using the &product-name; API. This
6710 needs to be kept in mind, especially when using third party
6711 API clients which make use of the webservice where the
6712 password might be transmitted over the network. The use of
6713 HTTPS is mandatory in such a case.
6714 </para>
6715 </listitem>
6716
6717 <listitem>
6718 <para>
6719 Encrypting images with differencing images is only possible
6720 if there are no snapshots or a linear chain of snapshots.
6721 This limitation may be addressed in a future &product-name;
6722 version.
6723 </para>
6724 </listitem>
6725
6726 <listitem>
6727 <para>
6728 The disk encryption feature can protect the content of the
6729 disks configured for a VM only. It does not cover any other
6730 data related to a VM, including saved state or the
6731 configuration file itself.
6732 </para>
6733 </listitem>
6734
6735 </itemizedlist>
6736
6737 </sect2>
6738
6739 <sect2 id="diskencryption-encryption">
6740
6741 <title>Encrypting Disk Images</title>
6742
6743 <para>
6744 Encrypting disk images can be done either using the GUI or
6745 <command>VBoxManage</command>. While the GUI is easier to use,
6746 it works on a per VM basis and encrypts all disk images attached
6747 to the specific VM. With <command>VBoxManage</command> one can
6748 encrypt individual images, including all differencing images. To
6749 encrypt an unencrypted medium with
6750 <command>VBoxManage</command>, use:
6751 </para>
6752
6753<screen>VBoxManage encryptmedium <replaceable>uuid</replaceable>|<replaceable>filename</replaceable> \
6754--newpassword <replaceable>filename</replaceable>|- --cipher <replaceable>cipher-ID</replaceable> --newpasswordid "<replaceable>ID</replaceable></screen>
6755
6756 <para>
6757 To supply the encryption password point
6758 <command>VBoxManage</command> to the file where the password is
6759 stored or specify <option>-</option> to let VBoxManage ask you
6760 for the password on the command line.
6761 </para>
6762
6763 <para>
6764 The cipher parameter specifies the cipher to use for encryption
6765 and can be either <literal>AES-XTS128-PLAIN64</literal> or
6766 <literal>AES-XTS256-PLAIN64</literal>. The specified password
6767 identifier can be freely chosen by the user and is used for
6768 correct identification when supplying multiple passwords during
6769 VM startup.
6770 </para>
6771
6772 <para>
6773 If the user uses the same password when encrypting multiple
6774 images and also the same password identifier, the user needs to
6775 supply the password only once during VM startup.
6776 </para>
6777
6778 </sect2>
6779
6780 <sect2 id="diskencryption-startvm">
6781
6782 <title>Starting a VM with Encrypted Images</title>
6783
6784 <para>
6785 When a VM is started using the GUI, a dialog will open where the
6786 user needs to enter all passwords for all encrypted images
6787 attached to the VM. If another frontend like VBoxHeadless is
6788 used, the VM will be paused as soon as the guest tries to access
6789 an encrypted disk. The user needs to provide the passwords
6790 through <command>VBoxManage</command> using the following
6791 command:
6792 </para>
6793
6794<screen>VBoxManage controlvm <replaceable>uuid</replaceable>|<replaceable>vmname</replaceable> addencpassword <replaceable>ID</replaceable> <replaceable>password</replaceable> [--removeonsuspend yes|no]</screen>
6795
6796 <para>
6797 <replaceable>ID</replaceable> must be the same as the password
6798 identifier supplied when encrypting the images.
6799 <replaceable>password</replaceable> is the password used when
6800 encrypting the images. Optionally, you can specify
6801 <option>--removeonsuspend yes|no</option> to specify whether to
6802 remove the password from VM memory when the VM is suspended.
6803 Before the VM can be resumed, the user needs to supply the
6804 passwords again. This is useful when a VM is suspended by a host
6805 suspend event and the user does not want the password to remain
6806 in memory.
6807 </para>
6808
6809 </sect2>
6810
6811 <sect2 id="diskencryption-decryption">
6812
6813 <title>Decrypting Encrypted Images</title>
6814
6815 <para>
6816 In some circumstances it might be required to decrypt previously
6817 encrypted images. This can be done in the GUI for a complete VM
6818 or using <command>VBoxManage</command> with the following
6819 command:
6820 </para>
6821
6822<screen>VBoxManage encryptmedium <replaceable>uuid</replaceable>|<replaceable>filename</replaceable> --oldpassword <replaceable>file</replaceable>|-</screen>
6823
6824 <para>
6825 The only required parameter is the password the image was
6826 encrypted with. The options are the same as for encrypting
6827 images.
6828 </para>
6829
6830 </sect2>
6831
6832 </sect1>
6833
6834 <sect1 id="gimdebug">
6835
6836 <title>Paravirtualized Debugging</title>
6837
6838 <para>
6839 This section covers debugging of guest operating systems using
6840 interfaces supported by paravirtualization providers.
6841 </para>
6842
6843 <note>
6844 <para>
6845 Paravirtualized debugging significantly alter guest operating
6846 system behaviour and should only be used by expert users for
6847 debugging and diagnostics.
6848 </para>
6849 </note>
6850
6851 <para>
6852 These debug options are specified as a string of key-value pairs
6853 separated by commas. An empty string disables paravirtualized
6854 debugging.
6855 </para>
6856
6857 <sect2 id="gimdebughyperv">
6858
6859 <title>Hyper-V Debug Options</title>
6860
6861 <para>
6862 All of the options listed below are optional, and thus the
6863 default value specified will be used when the corresponding
6864 key-value pair is not specified.
6865 </para>
6866
6867 <itemizedlist>
6868
6869 <listitem>
6870 <para>
6871 Key:
6872 <emphasis role="bold"><literal>enabled</literal></emphasis>
6873 </para>
6874
6875 <para>
6876 Value: <literal>0</literal> or <literal>1</literal>
6877 </para>
6878
6879 <para>
6880 Default: <literal>0</literal>
6881 </para>
6882
6883 <para>
6884 Specify <literal>1</literal> to enable the Hyper-V debug
6885 interface. If this key-value pair is not specified or the
6886 value is not <literal>1</literal>, the Hyper-V debug
6887 interface is disabled regardless of other key-value pairs
6888 being present.
6889 </para>
6890 </listitem>
6891
6892 <listitem>
6893 <para>
6894 Key:
6895 <emphasis role="bold"><literal>address</literal></emphasis>
6896 </para>
6897
6898 <para>
6899 Value: IPv4 address
6900 </para>
6901
6902 <para>
6903 Default: 127.0.0.1
6904 </para>
6905
6906 <para>
6907 Specify the IPv4 address where the remote debugger is
6908 connected.
6909 </para>
6910 </listitem>
6911
6912 <listitem>
6913 <para>
6914 Key:
6915 <emphasis role="bold"><literal>port</literal></emphasis>
6916 </para>
6917
6918 <para>
6919 Value: UDP port number
6920 </para>
6921
6922 <para>
6923 Default: 50000
6924 </para>
6925
6926 <para>
6927 Specify the UDP port number where the remote debugger is
6928 connected.
6929 </para>
6930 </listitem>
6931
6932 <listitem>
6933 <para>
6934 Key:
6935 <emphasis role="bold"><literal>vendor</literal></emphasis>
6936 </para>
6937
6938 <para>
6939 Value: Hyper-V vendor signature reported by CPUID to the
6940 guest
6941 </para>
6942
6943 <para>
6944 Default: When debugging is enabled: <literal>Microsoft
6945 Hv</literal>, otherwise: <literal>VBoxVBoxVBox</literal>
6946 </para>
6947
6948 <para>
6949 Specify the Hyper-V vendor signature which is exposed to the
6950 guest by CPUID. For debugging Microsoft Windows guests, it
6951 is required the hypervisor reports the Microsoft vendor.
6952 </para>
6953 </listitem>
6954
6955 <listitem>
6956 <para>
6957 Key:
6958 <emphasis role="bold"><literal>hypercallinterface</literal>
6959 </emphasis>
6960 </para>
6961
6962 <para>
6963 Value: <literal>0</literal> or <literal>1</literal>
6964 </para>
6965
6966 <para>
6967 Default: <literal>0</literal>
6968 </para>
6969
6970 <para>
6971 Specify whether hypercalls should be suggested for
6972 initiating debug data transfers between host and guest
6973 rather than MSRs when requested by the guest.
6974 </para>
6975 </listitem>
6976
6977 <listitem>
6978 <para>
6979 Key: <emphasis role="bold"><literal>vsinterface</literal>
6980 </emphasis>
6981 </para>
6982
6983 <para>
6984 Value: <literal>0</literal> or <literal>1</literal>
6985 </para>
6986
6987 <para>
6988 Default: When debugging is enabled, <literal>1</literal>,
6989 otherwise <literal>0</literal>
6990 </para>
6991
6992 <para>
6993 Specify whether to expose the VS#1 virtualization service
6994 interface to the guest. This interface is required for
6995 debugging Microsoft Windows 10 32-bit guests, but is
6996 optional for other Windows versions.
6997 </para>
6998 </listitem>
6999
7000 </itemizedlist>
7001
7002 <sect3 id="gimdebughyperv-windows-setup">
7003
7004 <title>Setting up Windows Guests for Debugging with the Hyper-V
7005 Paravirtualization Provider</title>
7006
7007 <para>
7008 Windows supports debugging over a serial cable, USB, IEEE 1394
7009 Firewire, and Ethernet. USB and IEEE 1394 are not applicable
7010 for virtual machines, and Ethernet requires Windows 8 or
7011 later. While a serial connection is universally usable, it is
7012 slow.
7013 </para>
7014
7015 <para>
7016 Debugging using the Hyper-V debug transport, supported on
7017 Windows Vista and later, offers significant benefits. It
7018 provides excellent performance due to direct host-to-guest
7019 transfers, it is easy to set up and requires minimal support
7020 from the hypervisor. It can be used with the debugger running
7021 on the same host as the VM or with the debugger and VM on
7022 separate machines connected over a network.
7023 </para>
7024
7025 <para>
7026 <emphasis role="bold">Prerequisites</emphasis>
7027 </para>
7028
7029 <itemizedlist>
7030
7031 <listitem>
7032 <para>
7033 A VM configured for Hyper-V paravirtualization running a
7034 Windows Vista or newer Windows guest. You can check the
7035 effective paravirtualization provider for your VM with the
7036 output of the following <command>VBoxManage</command>
7037 command:
7038 </para>
7039
7040<screen>$ VBoxManage showvminfo <replaceable>VM-name</replaceable></screen>
7041 </listitem>
7042
7043 <listitem>
7044 <para>
7045 A sufficiently up-to-date version of the Microsoft WinDbg
7046 debugger required to debug the version of Windows in your
7047 VM.
7048 </para>
7049 </listitem>
7050
7051 <listitem>
7052 <para>
7053 While Windows 8 and newer Windows guests ship with Hyper-V
7054 debug support, Windows 7 and Vista do not. To use Hyper-V
7055 debugging with a Windows 7 or Vista guest, copy the file
7056 <filename>kdvm.dll</filename> from a Windows 8.0
7057 installation. This file is typically located in
7058 <filename>C:\Windows\System32</filename>. Copy it to the
7059 same location in your Windows 7/Vista guest. Make sure you
7060 copy the 32-bit or 64-bit version of the DLL which matches
7061 your guest OS.
7062 </para>
7063
7064 <note>
7065 <para>
7066 Only Windows 8.0 ships <filename>kdvm.dll</filename>.
7067 Windows 8.1 and newer Windows versions do not.
7068 </para>
7069 </note>
7070 </listitem>
7071
7072 </itemizedlist>
7073
7074 <para>
7075 <emphasis role="bold">VM and Guest Configuration</emphasis>
7076 </para>
7077
7078 <orderedlist>
7079
7080 <listitem>
7081 <para>
7082 Power off the VM.
7083 </para>
7084 </listitem>
7085
7086 <listitem>
7087 <para>
7088 Enable the debug options with the following
7089 <command>VBoxManage</command> command:
7090 </para>
7091
7092<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> --paravirt-debug "enabled=1"</screen>
7093
7094 <para>
7095 The above command assumes your debugger will connect to
7096 your host machine on UDP port 50000. However, if you need
7097 to run the debugger on a remote machine you may specify
7098 the remote address and port here. For example:
7099 </para>
7100
7101<screen>$ VBoxManage modifyvm <replaceable>VM-name</replaceable> \
7102--paravirt-debug "enabled=1,address=192.168.32.1,port=55000"</screen>
7103
7104 <para>
7105 See <xref linkend="gimdebughyperv" /> for the complete set
7106 of options.
7107 </para>
7108 </listitem>
7109
7110 <listitem>
7111 <para>
7112 Start the VM.
7113 </para>
7114 </listitem>
7115
7116 <listitem>
7117 <para>
7118 In the guest, start an elevated command prompt and execute
7119 the following commands:
7120 </para>
7121
7122 <itemizedlist>
7123
7124 <listitem>
7125 <para>
7126 For a Windows 8 or newer Windows guest:
7127 </para>
7128
7129<screen>bcdedit /dbgsettings net hostip:5.5.5.5 port:50000 key:1.2.3.4</screen>
7130 </listitem>
7131
7132 <listitem>
7133 <para>
7134 For a Windows 7 or Vista guest:
7135 </para>
7136
7137<screen>bcdedit /set loadoptions host_ip=5.5.5.5,host_port=50000,encryption_key=1.2.3.4</screen>
7138
7139<screen>bcdedit /set dbgtransport kdvm.dll</screen>
7140
7141 <para>
7142 The IP address and port in the
7143 <command>bcdedit</command> command are ignored when
7144 using the Hyper-V debug transport. Any valid IP and a
7145 port number greater than 49151 and lower than 65536
7146 can be entered.
7147 </para>
7148
7149 <para>
7150 The encryption key in the <command>bcdedit</command>
7151 command is relevant and must be valid. The key
7152 "1.2.3.4" used in the above example is valid and may
7153 be used if security is not a concern. If you do not
7154 specify any encryption key, <command>bcdedit</command>
7155 will generate one for you and you will need to copy
7156 this key to later enter in Microsoft WinDbg on the
7157 remote end. This encryption key is used to encrypt the
7158 debug data exchanged between Windows and the debugger.
7159 </para>
7160 </listitem>
7161
7162 <listitem>
7163 <para>
7164 Run one or more of the following commands to enable
7165 debugging for the appropriate phase or component of
7166 your Windows guest:
7167 </para>
7168
7169<screen>bcdedit /set debug on</screen>
7170
7171<screen>bcdedit /set bootdebug on</screen>
7172
7173<screen>bcdedit /set {bootmgr} bootdebug on</screen>
7174
7175 <para>
7176 Please note that the <command>bootdebug</command>
7177 options are only effective on Windows 8 or newer when
7178 using the Hyper-V debug transport. Refer to Microsoft
7179 Windows documentation for detailed explanation of
7180 <command>bcdedit</command> options.
7181 </para>
7182 </listitem>
7183
7184 </itemizedlist>
7185 </listitem>
7186
7187 <listitem>
7188 <para>
7189 Start Microsoft WinDbg on your host machine or remote
7190 host.
7191 </para>
7192
7193 <para>
7194 From the <emphasis role="bold">File</emphasis> menu,
7195 select <emphasis role="bold">Kernel Debug</emphasis>. On
7196 the <emphasis role="bold">NET</emphasis> tab, specify the
7197 UDP port number you used in the
7198 <literal>paravirtdebug</literal> options. If you did not
7199 specify any, leave it as 50000. Ensure that the UDP port
7200 is not blocked by a firewall or other security software.
7201 </para>
7202
7203 <para>
7204 In the <emphasis role="bold">Key</emphasis> field, enter
7205 <literal>1.2.3.4</literal> or the encryption key from the
7206 <command>bcdedit</command> command in your Windows guest.
7207 </para>
7208
7209 <para>
7210 Click <emphasis role="bold">OK</emphasis> to start
7211 listening for connections. Microsoft WinDbg typically
7212 shows a Waiting to Reconnect message during this phase.
7213 </para>
7214
7215 <para>
7216 Alternatively, to directly start a debug session, run
7217 WinDbg from the command line as follows :
7218 </para>
7219
7220<screen>windbg.exe -k net:port=50000,key=1.2.3.4</screen>
7221
7222 <para>
7223 See the WinDbg documentation for the complete command line
7224 syntax.
7225 </para>
7226 </listitem>
7227
7228 <listitem>
7229 <para>
7230 Reboot your Windows guest and it should then connect as a
7231 debuggee with Microsoft WinDbg.
7232 </para>
7233 </listitem>
7234
7235 </orderedlist>
7236
7237 </sect3>
7238
7239 </sect2>
7240
7241 </sect1>
7242
7243 <sect1 id="pcspeaker_passthrough">
7244
7245 <title>PC Speaker Passthrough</title>
7246
7247 <para>
7248 As an experimental feature, primarily due to being limited to
7249 Linux host only and unknown Linux distribution coverage,
7250 &product-name; supports passing through the PC speaker to the
7251 host. The PC speaker, sometimes called the system speaker, is a
7252 way to produce audible feedback such as beeps without the need for
7253 regular audio and sound card support.
7254 </para>
7255
7256 <para>
7257 The PC speaker passthrough feature in &product-name; handles beeps
7258 only. Advanced PC speaker use by the VM, such as PCM audio, will
7259 not work, resulting in undefined host behavior.
7260 </para>
7261
7262 <para>
7263 Producing beeps on Linux is a very complex topic. &product-name;
7264 offers a collection of options, in an attempt to make this work
7265 deterministically and reliably on as many Linux distributions and
7266 system configurations as possible. These are summarized in the
7267 following table.
7268 </para>
7269
7270 <table id="table-pcspeaker-config" tabstyle="oracle-all">
7271 <title>PC Speaker Configuration Options</title>
7272 <tgroup cols="3">
7273 <thead>
7274 <row>
7275 <entry><para>
7276 <emphasis role="bold">Code</emphasis>
7277 </para></entry>
7278 <entry><para>
7279 <emphasis role="bold">Device</emphasis>
7280 </para></entry>
7281 <entry><para>
7282 <emphasis role="bold">Notes</emphasis>
7283 </para></entry>
7284 </row>
7285 </thead>
7286 <tbody>
7287 <row>
7288 <entry><para>
7289 1
7290 </para></entry>
7291 <entry><para>
7292 <filename>/dev/input/by-path/platform-pcspkr-event-spkr</filename>
7293 </para></entry>
7294 <entry><para>
7295 Direct host PC speaker use.
7296 </para></entry>
7297 </row>
7298 <row>
7299 <entry><para>
7300 2
7301 </para></entry>
7302 <entry><filename>/dev/tty</filename></entry>
7303 <entry><para>
7304 Uses the terminal association of the VM process. VM
7305 needs to be started on a virtual console.
7306 </para></entry>
7307 </row>
7308 <row>
7309 <entry><para>
7310 3
7311 </para></entry>
7312 <entry><para>
7313 <filename>/dev/tty0</filename> or
7314 <filename>/dev/vc/0</filename>
7315 </para></entry>
7316 <entry><para>
7317 Can only be used by user <literal>root</literal> or
7318 users with <literal>cap_sys_tty_config</literal>
7319 capability.
7320 </para></entry>
7321 </row>
7322 <row>
7323 <entry><para>
7324 9
7325 </para></entry>
7326 <entry><para>
7327 A user-specified console or evdev device path.
7328 </para></entry>
7329 <entry><para>
7330 As for codes 1 to 3, but with a custom device path.
7331 </para></entry>
7332 </row>
7333 <row>
7334 <entry><para>
7335 70
7336 </para></entry>
7337 <entry><para>
7338 <filename>/dev/tty</filename>
7339 </para></entry>
7340 <entry><para>
7341 Standard beep only. Loses frequency and length. See code
7342 2.
7343 </para></entry>
7344 </row>
7345 <row>
7346 <entry><para>
7347 79
7348 </para></entry>
7349 <entry><para>
7350 A user-specified terminal device path.
7351 </para></entry>
7352 <entry><para>
7353 As for code 70, but with a custom device path.
7354 </para></entry>
7355 </row>
7356 <row>
7357 <entry><para>
7358 100
7359 </para></entry>
7360 <entry><para>
7361 All of the above.
7362 </para></entry>
7363 <entry><para>
7364 Tries all the available codes.
7365 </para></entry>
7366 </row>
7367 </tbody>
7368 </tgroup>
7369 </table>
7370
7371 <para>
7372 To enable PC speaker passthrough use the following command:
7373 </para>
7374
7375<screen>VBoxManage setextradata <replaceable>VM-name</replaceable> "VBoxInternal/Devices/i8254/0/Config/PassthroughSpeaker" <replaceable>N</replaceable></screen>
7376
7377 <para>
7378 Replace <replaceable>N</replaceable> with the code representing
7379 the case you want to use. Changing this setting takes effect when
7380 you next start the VM. It is safe to enable PC speaker passthrough
7381 on all host OSes. It will only have an effect on Linux.
7382 </para>
7383
7384 <para>
7385 The VM log file, <filename>VBox.log</filename>, contains lines
7386 with the prefix <literal>PIT: speaker:</literal> showing the PC
7387 speaker passthrough setup activities. It gives hints which device
7388 it picked or why it failed.
7389 </para>
7390
7391 <para>
7392 Enabling PC speaker passthrough for the VM is usually the simple
7393 part. The real difficulty is making sure that &product-name; can
7394 access the necessary device, because in a typical Linux install
7395 most of them can only be accessed by user <literal>root</literal>.
7396 You should follow the preferred way to persistently change this,
7397 such as by referring to your distribution's documentation. Since
7398 there are countless Linux distribution variants, we can only give
7399 the general hints that there is often a way to give the X11
7400 session user access to additional devices, or you need to find a
7401 working solution using a udev configuration file. If everything
7402 fails you might try setting the permissions using a script which
7403 is run late enough in the host system startup.
7404 </para>
7405
7406 <para>
7407 Sometimes additional rules are applied by the kernel to limit
7408 access. For example, that the VM process must have the same
7409 controlling terminal as the device configured to be used for
7410 beeping, something which is often very difficult to achieve for
7411 GUI applications such as &product-name;. The table above contains
7412 some hints, but in general refer to the Linux documentation.
7413 </para>
7414
7415 <para>
7416 If you have trouble getting any beeps even if the device
7417 permissions are set up and VBox.log confirms that it uses evdev or
7418 console for the PC speaker control, check if your system has a PC
7419 speaker. Some systems do not have one. Other complications can
7420 arise from Linux rerouting the PC speaker output to a sound card.
7421 Check if the beeps are audible if you connect speakers to your
7422 sound card. Today almost all systems have one. Finally, check if
7423 the audio mixer control has a channel named "beep", which could be
7424 hidden in the mixer settings, and that it is not muted.
7425 </para>
7426
7427 </sect1>
7428
7429 <sect1 id="usbip">
7430
7431 <title>Accessing USB devices Exposed Over the Network with USB/IP</title>
7432
7433 <para>
7434 &product-name; supports passing through USB devices which are
7435 exposed over the network using the USB over IP protocol without
7436 the need to configure the client side provided by the kernel and
7437 usbip tools. Furthermore, this feature works with &product-name;
7438 running on any supported host, rather than just Linux alone, as is
7439 the case with the official client.
7440 </para>
7441
7442 <para>
7443 To enable support for passing through USB/IP devices, use the
7444 following command to add the device server that exports the
7445 devices:
7446 </para>
7447
7448<screen>VBoxManage usbdevsource add <replaceable>unique-name</replaceable> --backend <replaceable>USBIP</replaceable> --address <replaceable>device-server</replaceable>[:<replaceable>port</replaceable>]</screen>
7449
7450 <para>
7451 USB devices exported on the device server are then accessible
7452 through the GUI or <command>VBoxManage</command>, like any USB
7453 devices attached locally. This can be used multiple times to
7454 access different device servers.
7455 </para>
7456
7457 <para>
7458 To remove a device server, the following command can be used:
7459 </para>
7460
7461<screen>$ VBoxManage usbdevsource remove <replaceable>unique-name</replaceable></screen>
7462
7463 <sect2 id="usbip-setup-server">
7464
7465 <title>Setting up USB/IP Support on a Linux System</title>
7466
7467 <para>
7468 This section gives a brief overview on how to set up a Linux
7469 based system to act as a USB device server. The system on the
7470 server requires that the <filename>usbip-core.ko</filename> and
7471 <filename>usbip-host.ko</filename> kernel drivers are available,
7472 and that the USB/IP tools package is installed. The particular
7473 installation method for the necessary tools depends on which
7474 distribution is used. For example, for Debian based systems, use
7475 the following command to install the required tools:
7476 </para>
7477
7478<screen>$ apt-get install usbip-utils</screen>
7479
7480 <para>
7481 To check whether the necessary tools are already installed use
7482 the following command:
7483 </para>
7484
7485<screen>
7486$ usbip list -l
7487 </screen>
7488
7489 <para>
7490 This should produce output similar to that shown in the example
7491 below:
7492 </para>
7493
7494<screen>
7495 - busid 4-2 (0bda:0301)
7496 Realtek Semiconductor Corp. : multicard reader (0bda:0301)
7497
7498 - busid 5-1 (046d:c52b)
7499 Logitech, Inc. : Unifying Receiver (046d:c52b)
7500 </screen>
7501
7502 <para>
7503 If everything is installed, the USB/IP server needs to be
7504 started as <literal>root</literal> using the following command:
7505 </para>
7506
7507<screen># usbipd -D</screen>
7508
7509 <para>
7510 See the documentation for the installed distribution to
7511 determine how to start the service when the system boots.
7512 </para>
7513
7514 <para>
7515 By default, no device on the server is exported. This must be
7516 done manually for each device. To export a device use the
7517 following command:
7518 </para>
7519
7520<screen># usbip bind -b "bus identifier"</screen>
7521
7522 <para>
7523 To export the multicard reader in the previous example:
7524 </para>
7525
7526<screen># usbip bind -b 4-2</screen>
7527
7528 </sect2>
7529
7530 <sect2 id="usbip-security">
7531
7532 <title>Security Considerations</title>
7533
7534 <para>
7535 The communication between the server and client is unencrypted
7536 and there is no authorization required to access exported
7537 devices. An attacker might sniff sensitive data or gain control
7538 over a device. To mitigate this risk, the device should be
7539 exposed over a local network to which only trusted clients have
7540 access. To access the device remotely over a public network, a
7541 VPN solution should be used to provide the required level of
7542 security protection.
7543 </para>
7544
7545 </sect2>
7546
7547 </sect1>
7548
7549 <sect1 id="hyperv-support">
7550
7551 <title>Using Hyper-V with &product-name;</title>
7552
7553 <para>
7554 &product-name; can be used on a Windows host where Hyper-V is
7555 running. This is an experimental feature.
7556 </para>
7557
7558 <para>
7559 No configuration is required. &product-name; detects Hyper-V
7560 automatically and uses Hyper-V as the virtualization engine for
7561 the host system. The CPU icon in the VM window status bar
7562 indicates that Hyper-V is being used.
7563 </para>
7564
7565 <note>
7566 <para>
7567 When using this feature, some host systems might experience
7568 significant &product-name; performance degradation.
7569 </para>
7570 </note>
7571
7572 </sect1>
7573
7574 <sect1 id="nested-virt">
7575
7576 <title>Nested Virtualization</title>
7577
7578 <para>
7579 &product-name; supports <emphasis>nested
7580 virtualization</emphasis>. This feature enables the passthrough of
7581 hardware virtualization functions to the guest VM. That means that
7582 you can install a hypervisor, such as &product-name;, Oracle VM
7583 Server or KVM, on an &product-name; guest. You can then create and
7584 run VMs within the guest VM.
7585 </para>
7586
7587 <para>
7588 Hardware virtualization features not present on the host CPU will
7589 not be exposed to the guest. In addition, some features such as
7590 nested paging are not yet supported for passthrough to the guest.
7591 </para>
7592
7593 <para>
7594 You can enable the nested virtualization feature in one of the
7595 following ways:
7596 </para>
7597
7598 <itemizedlist>
7599
7600 <listitem>
7601 <para>
7602 From the VirtualBox Manager, select the
7603 <emphasis role="bold">Enable Nested VT-x/AMD-V</emphasis>
7604 check box on the <emphasis role="bold">Processor</emphasis>
7605 tab. To disable the feature, deselect the check box.
7606 </para>
7607 </listitem>
7608
7609 <listitem>
7610 <para>
7611 Use the <option>--nested-hw-virt</option> option of the
7612 <command>VBoxManage modifyvm</command> command to enable or
7613 disable nested virtualization. See
7614 <xref linkend="vboxmanage-modifyvm"/>.
7615 </para>
7616 </listitem>
7617
7618 </itemizedlist>
7619
7620 </sect1>
7621
7622 <sect1 id="vboxsvc-session-0">
7623
7624 <title>VBoxSVC running in Windows session 0</title>
7625
7626 <para>
7627 &product-name; supports executing the VBoxSVC in Windows session 0.
7628 This allows VBoxSVC to run like a regular Windows service, which in turn
7629 enables headless VMs to continue running even if the user logs out.
7630 <note>
7631 <para>This feature currently is marked as being <emphasis role="bold">experimental</emphasis>!</para>
7632 </note>
7633 </para>
7634
7635 <para>
7636 The feature is disabled by default and can be enabled by creating a REG_DWORD
7637 value <literal>ServerSession0</literal> in the key
7638 <literal>HKEY_LOCAL_MACHINE\Software\Oracle\VirtualBox\VBoxSDS</literal> of the
7639 Windows registry. Specifying <literal>1</literal> as the value's data to
7640 enable the feature, or <literal>0</literal> to disable the feature again.
7641 A host reboot is needed in order to make the change effective.
7642 </para>
7643
7644 <sect2 id="vboxsvc-session-0-known-issues">
7645
7646 <title>Known issues</title>
7647
7648 <itemizedlist>
7649 <listitem>
7650 <para>
7651 Due to different Windows sessions having their own set of resources,
7652 there might be some issues with accessing network shares created in
7653 the interactive user session when at least one of &product-name;
7654 processes are running in session 0.
7655 </para>
7656 <para>
7657 For accessing network shares within session 0, a possible workaround
7658 is to establish permanent access to the share and restart the host after that.
7659 This might change in the future, however.
7660 </para>
7661 </listitem>
7662 </itemizedlist>
7663 </sect2>
7664
7665 </sect1>
7666
7667 <xi:include href="user_isomakercmd-man.xml" xpointer="element(/1)" xmlns:xi="http://www.w3.org/2001/XInclude" />
7668
7669</chapter>
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette