2021-05-25 09:43:34 +00:00
|
|
|
|
.. _installing:
|
|
|
|
|
|
2021-05-04 05:35:38 +00:00
|
|
|
|
Installation
|
|
|
|
|
############
|
|
|
|
|
|
2022-09-18 02:17:05 +00:00
|
|
|
|
.. _host_install:
|
|
|
|
|
|
|
|
|
|
Host Application
|
|
|
|
|
----------------
|
|
|
|
|
|
|
|
|
|
The Looking Glass Host application captures frames from the guest OS using a
|
|
|
|
|
capture API, and sends them to the
|
|
|
|
|
:ref:`Client <client_install>`—be it on the host OS (hypervisor) or another
|
|
|
|
|
Virtual Machine—through a low-latency transfer protocol over shared memory.
|
|
|
|
|
|
|
|
|
|
You can get the host program in two ways:
|
|
|
|
|
|
|
|
|
|
- Download a pre-built binary from https://looking-glass.io/downloads
|
|
|
|
|
(**recommended**)
|
|
|
|
|
|
|
|
|
|
- Download the source code as described in :ref:`building`, then
|
|
|
|
|
:ref:`build the host <host_building>`.
|
|
|
|
|
|
|
|
|
|
.. _host_install_windows:
|
|
|
|
|
|
|
|
|
|
Windows
|
|
|
|
|
~~~~~~~
|
|
|
|
|
|
|
|
|
|
To begin, you must first run the Windows VM with the changes noted above in
|
|
|
|
|
either the :ref:`client_libvirt_configuration` or :ref:`client_qemu_commands`
|
|
|
|
|
sections.
|
|
|
|
|
|
|
|
|
|
.. _installing_the_ivshmem_driver:
|
|
|
|
|
|
|
|
|
|
Installing the IVSHMEM Driver
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
Since B6 the host installer available on the official Looking Glass website
|
|
|
|
|
comes with the IVSHMEM driver and will install this for you. If you are running
|
|
|
|
|
an older verison of Looking Glass please refer to the documentation for your
|
|
|
|
|
version.
|
|
|
|
|
|
|
|
|
|
.. _host_install_service:
|
|
|
|
|
|
|
|
|
|
Installing the Looking Glass Service
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
After installing your IVSHMEM driver, we can now install the Looking Glass Host
|
|
|
|
|
onto our Windows Virtual Machine.
|
|
|
|
|
|
|
|
|
|
1. First, run ``looking-glass-host-setup.exe`` as an administrator
|
|
|
|
|
(:ref:`Why? <faq_host_admin_privs>`)
|
|
|
|
|
2. You will be greeted by an intro screen. Press ``Next`` to continue.
|
|
|
|
|
3. You are presented with the |license| license. Please read and agree to the
|
|
|
|
|
license by pressing ``Agree``.
|
|
|
|
|
4. You can change the install path if you wish, otherwise press ``Next`` to
|
|
|
|
|
continue.
|
|
|
|
|
5. You may enable or disable options on this screen to configure the
|
|
|
|
|
installation. The default values are recommended for most users.
|
|
|
|
|
Press ``Install`` to begin installation.
|
|
|
|
|
6. After a few moments, installation will complete, and you will have a
|
|
|
|
|
running instance of Looking Glass. If you experience failures, you can
|
|
|
|
|
see them in the install log appearing in the middle of the window.
|
|
|
|
|
7. Press ``Close`` to exit the installer.
|
|
|
|
|
|
|
|
|
|
Command line users can run ``looking-glass-host-setup.exe /S`` to execute a
|
|
|
|
|
silent install with default options selected. Further configuration from the
|
|
|
|
|
command line can be done with flags. You can list all available flags by
|
|
|
|
|
running ``looking-glass-host-setup.exe /?``.
|
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_install:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
Client
|
|
|
|
|
------
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-09-01 21:05:39 +00:00
|
|
|
|
The Looking Glass Client receives frames from the :ref:`Host <host_install>` to
|
2021-05-25 09:43:34 +00:00
|
|
|
|
display on your screen. It also handles input, and can optionally share the
|
|
|
|
|
system clipboard with your guest OS through Spice.
|
2021-05-04 07:49:01 +00:00
|
|
|
|
|
2022-04-16 02:15:38 +00:00
|
|
|
|
First you must build the client from source, see :ref:`building`. Once you have
|
|
|
|
|
built the client, you can install it. Run the following as root::
|
|
|
|
|
|
|
|
|
|
make install
|
|
|
|
|
|
|
|
|
|
To install for the local user only, run::
|
|
|
|
|
|
|
|
|
|
cmake -DCMAKE_INSTALL_PREFIX=~/.local .. && make install
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_libvirt_configuration:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
libvirt Configuration
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
This article assumes you already have a fully functional libvirt domain with
|
|
|
|
|
PCI passthrough working on a dedicated monitor.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
If you use virt-manager, this guide also applies to you, since virt-manager uses
|
|
|
|
|
libvirt as its back-end.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
**If you are using QEMU directly, this does not apply to you.**
|
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
Add the following to your libvirt machine configuration inside the
|
|
|
|
|
'devices' section by running ``virsh edit <VM>`` where ``<VM>`` is the name of
|
2021-05-04 05:35:38 +00:00
|
|
|
|
your virtual machine.
|
|
|
|
|
|
|
|
|
|
.. code:: xml
|
|
|
|
|
|
|
|
|
|
<shmem name='looking-glass'>
|
|
|
|
|
<model type='ivshmem-plain'/>
|
|
|
|
|
<size unit='M'>32</size>
|
|
|
|
|
</shmem>
|
|
|
|
|
|
|
|
|
|
The memory size (show as 32 in the example above) may need to be
|
2021-05-25 09:43:34 +00:00
|
|
|
|
adjusted as per the :ref:`Determining Memory <client_determining_memory>` section.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_spice_server:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
Spice Server
|
|
|
|
|
^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
If you would like to use Spice to give you keyboard and mouse input
|
|
|
|
|
along with clipboard sync support, make sure you have a
|
|
|
|
|
``<graphics type='spice'>`` device, then:
|
|
|
|
|
|
|
|
|
|
- Find your ``<video>`` device, and set ``<model type='none'/>``
|
|
|
|
|
|
|
|
|
|
- If you can't find it, make sure you have a ``<graphics>``
|
|
|
|
|
device, save and edit again
|
|
|
|
|
- On older libvirt versions, just disable the device in Windows
|
|
|
|
|
Device Manager
|
|
|
|
|
|
|
|
|
|
- Remove the ``<input type='tablet'/>`` device, if you have one
|
|
|
|
|
- Create an ``<input type='mouse'/>`` device, if you don't already have one
|
|
|
|
|
- Create an ``<input type='keyboard' bus='virtio'/>`` device to improve
|
|
|
|
|
keyboard usage
|
|
|
|
|
|
|
|
|
|
- This requires the *vioinput* driver from
|
|
|
|
|
`virtio-win <https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/>`_
|
|
|
|
|
to be installed in the guest
|
|
|
|
|
|
|
|
|
|
If you want clipboard synchronization please see
|
2021-07-05 17:45:07 +00:00
|
|
|
|
:ref:`client_clipboard_synchronization`
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_apparmor:
|
|
|
|
|
|
2021-05-04 05:35:38 +00:00
|
|
|
|
AppArmor
|
|
|
|
|
^^^^^^^^
|
|
|
|
|
|
|
|
|
|
For libvirt versions before **5.10.0**, if you are using AppArmor, you
|
|
|
|
|
need to add permissions for QEMU to access the shared memory file. This
|
|
|
|
|
can be done by adding the following to
|
2021-07-05 14:05:15 +00:00
|
|
|
|
``/etc/apparmor.d/local/abstractions/libvirt-qemu``::
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-07-05 14:05:15 +00:00
|
|
|
|
/dev/shm/looking-glass rw,
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-07-05 16:23:22 +00:00
|
|
|
|
then, restart AppArmor.
|
|
|
|
|
|
|
|
|
|
.. code:: bash
|
|
|
|
|
|
|
|
|
|
sudo systemctl restart apparmor
|
|
|
|
|
|
2021-10-20 21:33:47 +00:00
|
|
|
|
.. _client_memballoon_tweak:
|
|
|
|
|
|
|
|
|
|
Memballoon
|
|
|
|
|
^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
The VirtIO memballoon device enables the host to dynamically reclaim memory
|
|
|
|
|
from your VM by growing the balloon inside the guest, reserving reclaimed
|
|
|
|
|
memory. Libvirt adds this device to guests by default.
|
|
|
|
|
|
|
|
|
|
However, this device causes major performance issues with VFIO passthrough
|
|
|
|
|
setups, and should be disabled.
|
|
|
|
|
|
|
|
|
|
Find the ``<memballoon>`` tag and set its type to ``none``:
|
|
|
|
|
|
|
|
|
|
.. code:: xml
|
|
|
|
|
|
|
|
|
|
<memballoon model="none"/>
|
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_qemu_commands:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-09-01 21:05:39 +00:00
|
|
|
|
QEMU Commands
|
2021-05-04 05:35:38 +00:00
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
**If you are using libvirt/virt-manager, then this does not apply to you.**
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
Add the following to the commands to your QEMU command line, adjusting
|
2021-05-04 20:20:01 +00:00
|
|
|
|
the ``bus`` parameter to suit your particular configuration:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
.. code:: bash
|
|
|
|
|
|
|
|
|
|
-device ivshmem-plain,memdev=ivshmem,bus=pcie.0 \
|
|
|
|
|
-object memory-backend-file,id=ivshmem,share=on,mem-path=/dev/shm/looking-glass,size=32M
|
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
The memory size (shown as 32M in the example above) may need to be
|
2021-05-25 09:43:34 +00:00
|
|
|
|
adjusted as per :ref:`Determining Memory <client_determining_memory>` section.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_determining_memory:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
Determining Memory
|
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
You will need to adjust the memory size to be suitable for
|
|
|
|
|
your desired maximum resolution, with the following formula:
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
``width x height x 4 x 2 = total bytes``
|
|
|
|
|
|
2021-05-04 09:31:38 +00:00
|
|
|
|
``total bytes / 1024 / 1024 = total megabytes + 10``
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
For example, for a resolution of 1920x1080 (1080p):
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
``1920 x 1080 x 4 x 2 = 16,588,800 bytes``
|
|
|
|
|
|
2021-07-05 14:05:15 +00:00
|
|
|
|
``16,588,800 / 1024 / 1024 = 15.82 MB + 10 = 25.82 MB``
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
You must round this value up to the nearest power of two, which for the
|
|
|
|
|
provided example is 32MB.
|
|
|
|
|
|
2021-05-25 09:43:34 +00:00
|
|
|
|
.. _client_shmfile_permissions:
|
2021-05-04 20:20:01 +00:00
|
|
|
|
|
|
|
|
|
Shared Memory File Permissions
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
The shared memory file used by IVSHMEM is found in ``/dev/shm/looking-glass``.
|
|
|
|
|
By default, it is owned by QEMU, and does not give read/write permissions to
|
|
|
|
|
your user, which are required for Looking Glass to run properly.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
You can use `systemd-tmpfiles` to create the file before running your VM,
|
|
|
|
|
granting the necessary permissions which allow Looking Glass to use the file
|
|
|
|
|
properly.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
Create a new file ``/etc/tmpfiles.d/10-looking-glass.conf``, and populate it
|
|
|
|
|
with the following::
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
#Type Path Mode UID GID Age Argument
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
|
|
|
|
f /dev/shm/looking-glass 0660 user kvm -
|
|
|
|
|
|
2021-05-04 20:20:01 +00:00
|
|
|
|
Change ``UID`` to the user name you will run Looking Glass with, usually your
|
|
|
|
|
own.
|
2021-05-04 05:35:38 +00:00
|
|
|
|
|
2021-07-05 17:45:07 +00:00
|
|
|
|
.. _client_clipboard_synchronization:
|
|
|
|
|
|
|
|
|
|
Clipboard Synchronization
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Looking Glass can synchronize the clipboard between the host and guest using
|
|
|
|
|
the SPICE guest agent.
|
|
|
|
|
|
|
|
|
|
1. Install the SPICE guest tools from
|
|
|
|
|
https://www.spice-space.org/download.html#windows-binaries.
|
|
|
|
|
|
|
|
|
|
2. Configure your VM to enable the SPICE guest agent:
|
|
|
|
|
|
|
|
|
|
- QEMU
|
|
|
|
|
|
|
|
|
|
.. code:: bash
|
|
|
|
|
|
|
|
|
|
-device virtio-serial-pci \
|
|
|
|
|
-chardev spicevmc,id=vdagent,name=vdagent \
|
|
|
|
|
-device virtserialport,chardev=vdagent,name=com.redhat.spice.0
|
|
|
|
|
|
|
|
|
|
- libvirt
|
|
|
|
|
|
|
|
|
|
.. code:: xml
|
|
|
|
|
|
|
|
|
|
<channel type="spicevmc">
|
|
|
|
|
<target type="virtio" name="com.redhat.spice.0"/>
|
|
|
|
|
<address type="virtio-serial" controller="0" bus="0" port="1"/>
|
|
|
|
|
</channel>
|
|
|
|
|
<!-- No need to add a VirtIO Serial device, it will be added automatically -->
|