qubes-doc/user/troubleshooting/app-menu-shortcut-troubleshooting.rst
Marek Marczykowski-Górecki b93b3c571e
Convert to RST
2024-05-21 20:59:46 +02:00

186 lines
6.6 KiB
ReStructuredText
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=================================
App menu shortcut troubleshooting
=================================
For ease of use Qubes aggregates shortcuts to applications that are
installed in app qubes and shows them in one application menu (aka “app
menu” or “start menu”) in dom0. Clicking on such shortcut runs the
assigned application in its app qube.
.. figure:: /attachment/doc/r4.0-dom0-menu.png
:alt: dom0-menu.png”
dom0-menu.png”
To make applications newly installed via the OSs package manager show
up in the menu, use the ``qvm-sync-appmenus`` command (Linux qubes do
this automatically):
``qvm-sync-appmenus vmname``
After that, select the *Add more shortcuts* entry in the qubes submenu
to customize which applications are shown:
.. figure:: /attachment/doc/r4.0-dom0-appmenu-select.png
:alt: dom0-appmenu-select.png”
dom0-appmenu-select.png”
The above image shows that Windows HVMs are also supported (provided
that Qubes Tools are installed).
What if my application has not been automatically included in the list of available apps?
-----------------------------------------------------------------------------------------
Sometimes applications may not have included a ``.desktop`` file and may
not be detected by ``qvm-sync-appmenus``. Other times, you may want to
make a web shortcut available from the Qubes start menu.
You can manually create new entries in the “available applications” list
of shortcuts for all app qubes based on a template. To do this:
1. Open a terminal window to the template.
2. Create a custom ``.desktop`` file in ``/usr/share/applications`` (you
may need to first create the subdirectory). Look in
``/usr/share/applications`` for existing examples, or see the full
`file specification <https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html>`__.
It will be something like:
.. code:: bash
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon=/usr/share/icons/Adwaita/256x256/devices/scanner.png
Name=VueScan
GenericName=Scanner
Comment=Scan Documents
Categories=Office;Scanning;
Exec=vuescan
3. In dom0, run ``qvm-sync-appmenus <templateName>``.
4. Go to VM Settings of the app qube(s) to which you want to add the new
shortcut, then the Applications tab. Move the newly created shortcut
to the right under selected.
If you only want to create a shortcut for a single app qube, you can
create a custom menu entry instead:
1. Open a terminal window to Dom0.
2. Create a custom ``.desktop`` file in ``~/.local/share/applications``.
Look in the same directory for existing examples, or see the full
`file specification <https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html>`__.
You may use ``qvm-run`` inside the ``.desktop`` file; see :ref:`Behind the scenes <user/troubleshooting/app-menu-shortcut-troubleshooting:behind the scenes>`
for more details.
3. Edit the ``~/.config/menus/applications-merged/<vmname>-vm.menu``
file for the app qube.
4. Add a custom menu entry referring to your newly created ``.desktop``
file.
.. code:: bash
<Menu>
<Name>Webmail</Name>
<Include>
<Filename>custom.desktop</Filename>
</Include>
</Menu>
What about applications in disposables?
---------------------------------------
:doc:`See here </user/advanced-topics/disposable-customization>`.
Fixing shortcuts
----------------
First, try this in dom0:
.. code:: bash
$ qvm-appmenus --update --force <vm_name>
If that doesnt work, you can manually modify the files in
``~/.local/share/applications/`` or ``/usr/local/share/applications/``.
For example, suppose youve deleted ``my-old-vm``, but there is a
leftover Application Menu shortcut, and you find a related file in
``~/.local/share/applications/``. In dom0:
.. code:: bash
$ rm -i ~/.local/share/applications/my-old-vm-*
Behind the scenes
-----------------
``qvm-sync-appmenus`` works by invoking the *GetAppMenus* :doc:`Qubes service </developer/services/qrexec>` in the target domain. This service enumerates
applications installed in that qube and sends formatted info back to the
dom0 script (``/usr/libexec/qubes-appmenus/qubes-receive-appmenus``)
which creates ``.desktop`` files in the app qube/template directory of
dom0.
For Linux qubes the service script is in
``/etc/qubes-rpc/qubes.GetAppMenus``. In Windows its a PowerShell
script located in
``c:\Program Files\Invisible Things Lab\Qubes OS Windows Tools\qubes-rpc-services\get-appmenus.ps1``
by default.
The list of installed applications for each app qube is stored in dom0s
``~/.local/share/qubes-appmenus/<vmname>/apps.templates``. Each menu
entry is a file that follows the `.desktop file format <https://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html>`__
with some wildcards (*%VMNAME%*, *%VMDIR%*). Applications selected to
appear in the menu are stored in
``~/.local/share/qubes-appmenus/<vmname>/apps``.
Actual command lines for the menu shortcuts involve the ``qvm-run``
command which starts a process in another domain. Examples:
``qvm-run -q -a --service -- %VMNAME% qubes.StartApp+7-Zip-7-Zip_File_Manager``
or ``qvm-run -q -a --service -- %VMNAME% qubes.StartApp+firefox``
Note that you can create a shortcut that points to a ``.desktop`` file
in your app qube with
e.g. ``qvm-run -q -a --service -- personal qubes.StartApp+firefox``.
While this works well for standard applications, creating a menu entry
for Windows applications running under *wine* may need an additional
step in order to establish the necessary environment in *wine*.
Installing software under *wine* will create the needed ``.desktop``
file in the target Linux qube in the directory
``~/.local/share/applications/wine/Programs/`` or a subdirectory
thereof, depending on the Windows menu structure seen under *wine*. If
the name of this file contains spaces, it will not be found, because the
``qvm-run`` command is falsely seen as terminating at this space. The
solution is to remove these spaces by renaming the ``.desktop`` file
accordingly, e.g. by renaming ``Microsoft Excel.desktop`` to
``Excel.desktop``. Refreshing the menu structure will then build working
menu entries.
**Note:** Applications installed under *wine* are installed in AppVMs,
not in the template on which these AppVMs are based, as the file
structure used by *wine* is stored under ``~/.wine``, which is part of
the persistent data of the AppVM and not inherited from its template.