diff --git a/user/troubleshooting/app-menu-shortcut-troubleshooting.md b/user/troubleshooting/app-menu-shortcut-troubleshooting.md index 8d66d937..a64a5d00 100644 --- a/user/troubleshooting/app-menu-shortcut-troubleshooting.md +++ b/user/troubleshooting/app-menu-shortcut-troubleshooting.md @@ -29,7 +29,7 @@ The above image shows that Windows HVMs are also supported (provided that Qubes What if my application has not been automatically included in the list of available apps? ----------------------------------------------------------------------------------------- -Some times applications may not have included a `.desktop` file and may not be detected by `qvm-sync-appmenus`. +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. @@ -101,8 +101,8 @@ $ rm -i ~/.local/share/applications/my-old-vm-* Behind the scenes ----------------- -`qvm-sync-appmenus` works by invoking *GetAppMenus* [Qubes service](/doc/qrexec/) in the target domain. -This service enumerates installed applications 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. +`qvm-sync-appmenus` works by invoking the *GetAppMenus* [Qubes service](/doc/qrexec/) in the target domain. +This service enumerates applications installed in that VM 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 VMs the service script is in `/etc/qubes-rpc/qubes.GetAppMenus`. In Windows it's a PowerShell script located in `c:\Program Files\Invisible Things Lab\Qubes OS Windows Tools\qubes-rpc-services\get-appmenus.ps1` by default. @@ -111,7 +111,11 @@ The list of installed applications for each app qube is stored in dom0's `~/.loc 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//apps`. -Actual command lines for the menu shortcuts involve `qvm-run` command which starts a process in another domain. +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`. +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 VM 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 strcuture used by *wine* is stored under `~/.wine`, which is part of the persistent data of the AppVM and not inherited from its template.