You're probably familiar with the Unity HUD, or Head-Up Display, which lets you search through and application's menu. Thanks to Rafael Bocquet's i3-hud-menu (and J.A. McNaughton's fork), you can use this menu search feature in pretty much any desktop environment (and in any Linux distribution in which you can install unity-gtk-module).
i3-hud-menu allows searching and navigating through an application's menu using the keyboard, with the use of dmenu (dmenu doesn't have mouse support by default). Here's how it looks like in Xubuntu 16.04:
And in Linux Mint 17.3 Cinnamon:
i3-hud-menu works with GTK2, GTK3 (but not client-side decorated apps) and Qt4 applications.
i3-hud-menu works with GTK2, GTK3 (but not client-side decorated apps) and Qt4 applications.
The tool is buggy with Qt5 applications as well as LibreOffice - see the limitations / issues section below for more information.
Update: Ubuntu MATE 16.04 Yakkety Yak will ship with a fork of i3-menu-hud installed (but not enabled) by default.
Update: Ubuntu MATE 16.04 Yakkety Yak will ship with a fork of i3-menu-hud installed (but not enabled) by default.
Important: issues and limitations
i3-hud-menu has quite a few issues / limitations but I decided to post an article about it anyway since some of you might still find it useful.
Also, I'm hoping someone reading this article might be able to fix or at least come up with some workarounds for some of the issues below. If you do, please let us know in the comments!
i3-hud-menu limitations / issues:
- it doesn't work with client-side decorated applications;
- it doesn't work with Firefox or Thunderbird;
- it doesn't work with Qt5 apps (make sure appmenu-qt5 and libdbusmenu-qt5 are not installed or else you won't have a menu for Qt5 apps, such as VLC in Ubuntu 16.04 - if you do install those packages, you can use the menu via i3-hud-menu, but the actual menu won't be visible in the application);
- using it, LibreOffice no longer has a menu if the "libreoffice-gtk" package is installed - this package is used for GTK+ integration (though using i3-hud-menu, you can search the menu, but actually using the menu items doesn't work for some reason);
- to get i3-hud-menu to work with Java swing applications, you'll need JAyatana;
- probably more.
It appears that the LibreOffice and the Qt5 applications issue occur because "APPMENU_DISPLAY_BOTH=1" is not respected. Furthermore, using "UBUNTU_MENUPROXY=" (for example, using "UBUNTU_MENUPROXY= libreoffice --writer") or blacklisting it via Dconf Editor (com > canonical > unity-gtk-module > blacklist) doesn't get the LibreOffice menu to show up.
On Arch Linux (possibly in other Linux distributions as well), which requires the unity-gtk-module-standalone-bzr package, you need to run the following command (or change this via Dconf Editor: com > canonical > unity-gtk-module, set gtk2-shell-shows-menubar to "false") and reboot to ensure that menus are displayed in GTK applications:
gsettings set com.canonical.unity-gtk-module gtk2-shell-shows-menubar false
Install and configure i3-hud-menu
Important note: I included exact instructions for Xubuntu, Ubuntu MATE and Linux Mint Cinnamon edition, but this should work with any Ubuntu or Linux Mint flavor (14.04 and newer only). It may also work in other Linux distributions, as long as you can install unity-gtk-module and appmenu-qt.
1. Install the required dependencies: python3, python-dbus, dmenu, appmenu-qt and unity-gtk-module.
In Ubuntu (14.04 and newer), use the following command (will also install "wget", required under step 2):
sudo apt install python3 python-dbus dmenu appmenu-qt unity-gtk2-module unity-gtk3-module wget
2. Download and install i3-hud-menu
To download and install J.A. McNaughton's i3-hud-menu fork from the command line, use the following commands:
cd /tmp
wget https://github.com/jamcnaughton/i3-hud-menu/archive/master.tar.gz
tar -xvf master.tar.gz
sudo mkdir -p /opt/i3-hud-menu
sudo cp -r i3-hud-menu-master/* /opt/i3-hud-menu/
If you want to install it yourself, grab the code from GitHub (but note that the instructions below assume that you've installed i3-hud-menu in /opt/i3-hud-menu/)
3. Load the Unity gtk module
Open ~/.profile with a text editor (".profile" is a hidden file in your home folder so use Ctrl + H to see hidden files in your gile manager), paste the following at the end of the file:
export APPMENU_DISPLAY_BOTH=1
if [ -n "$GTK_MODULES" ]
then
GTK_MODULES="$GTK_MODULES:unity-gtk-module"
else
GTK_MODULES="unity-gtk-module"
fi
if [ -z "$UBUNTU_MENUPROXY" ]
then
UBUNTU_MENUPROXY=1
fi
export GTK_MODULES
export UBUNTU_MENUPROXY
... and save the file.If after completing all the steps below, i3-hud-menu doesn't work, you can try to paste the lines above in ~/.bashrc instead of ~/.profile.
4. Add i3-appmenu-service.py to startup
The next step is to add i3-appmenu-service.py to the system startup. If you've installed i3-hud-menu using the commands above, this file should be located in /opt/i3-hud-menu/
Xubuntu: To add i3-appmenu-service.py to startup, launch Session and Startup from the menu / System Settings, and on the "Application Autostart" tab click "Add", enter "i3 menu service" under "Name", and "/opt/i3-hud-menu/i3-appmenu-service.py" (without the quotes) under "Command":
Ubuntu MATE: launch Control Center and open Startup Applications, click "Add", use "i3 menu service" under "Name", and "/opt/i3-hud-menu/i3-appmenu-service.py" (without the quotes) under "Command", and click "Add":
Update: Ubuntu MATE 16.04 Yakkety Yak will ship with a fork of i3-menu-hud installed (but not enabled) by default.
Linux Mint (Cinnamon): launch Startup Applications from the menu, click Add > Custom Command, use "i3 menu service" under "Name", and "/opt/i3-hud-menu/i3-appmenu-service.py" (without the quotes) under "Command", and click "Add":
5. Assign a keyboard shortcut to i3-hud-menu.py
The keyboard shortcut you assign to i3-hud-menu.py will be used to open i3-hud-menu and search through an application's menu. Here's how to configure it in some Ubuntu flavors and Linux Mint (Cinnamon).
Xubuntu: open "Keyboard" from the menu / System Settings, and on the "Application Shortcuts" tab, click "Add". Use "/opt/i3-hud-menu/i3-hud-menu.py" (without the quotes; if you've installed i3-hud-menu to a different location, make sure you use the correct path) for the command, click "OK:
... and assign it a keyboard shortcut:
You can even use "Alt", like in Ubuntu (with Unity), but I don't recommend it as you won't be able to use other shortcuts that use Alt. You can use something like Alt + 1 or any other keyboard shortcut that's not already in use.
Ubuntu MATE: from Control Center open Keyboard Shortcuts, click "Add", under "Name" enter "i3-hud-menu" (without the quotes), and use "/opt/i3-hud-menu/i3-hud-menu.py" (without the quotes; if you've installed i3-hud-menu to a different location, make sure you use the correct path) for "Command":
... and assign it a keyboard shortcut. Note that unlike Xubuntu, Ubuntu MATE doesn't allow assigning Alt as a shortcut. You can use something like Alt + 1 or whatever other keyboard shortcut you want, but make sure it's not already in use.
Linux Mint (Cinnamon): launch Keyboard from the menu, click "Add custom shortcut", enter "i3-hud-menu" (without the quotes) under "Name", "/opt/i3-hud-menu/i3-hud-menu.py" (without the quotes; if you've installed i3-hud-menu to a different location, make sure you use the correct path) under "Command" and click "Add":
... and assign it a keyboard shortcut.
6. And finally, restart the session (logout/login), focus an application and use the keyboard shortcut you set in step 5 to open i3-hud-menu.
via / further reference:
- Reddit (thanks to JaZoray)
- jamcnaughton.com