Fildem is a global menu and HUD for GNOME Shell. It was forked from the GNOME HUD project, and then made to also support adding a global menu to GNOME Shell. This article explains how to install this on Debian / Ubuntu, Fedora and Arch Linux / Manjaro.
Using this, the menu that’s usually built into the application window is displayed on the top GNOME Shell panel. Thanks to the HUD functionality (which is brought up by using the
Alt + Space keyboard shortcut), you can also use this to search through the application menu, very useful for applications with vast menus, like GIMP for example.
The Fildem global menu is set to automatically hide and only become visible on mouse over, but this can be changed, so you can have an always visible global menu if you want.
This GNOME Shell global menu and HUD implementation is not perfect, and you WILL find bugs. It also doesn’t work with every application. However, Fildem is still work in progress, so hopefully it will improve with time.
A few more Fildem GNOME Shell global menu and HUD screenshots:
|Fildem HUD (searchable menu) for VLC|
|Fildem global menu on Manjaro with Audacious (Qt interface)|
|Fildem global menu on Fedora (Wayland) with LibreOffice|
|Fildem global menu on Ubuntu 20.10 with VLC|
Fildem application compatibility
Fildem Global Menu works on both X11 and Wayland. However, on Wayland, you’ll need to create a global shortcut in system settings to access the HUD, because it’s not possible to create a shortcut from the application. Also, on Wayland, there’s an issue with the menu not closing when clicking outside of the menu – you’ll need to click the menu item again to close it.
Even though this is made for GNOME Shell, it doesn’t actually show a global menu or allow searching the menus for applications that respect the GNOME 3 design guidelines, and use an hamburger menu (like the default GNOME applications). For this to work, the application needs to have a traditional menu displayed under the application title bar. So the global menu and HUD won’t work with GNOME applications like Nautilus (Files), Gedit, etc.
So using this, the menu will be shown in the top panel for supported applications, and in the application window (either as a traditional menu – there are still cases where that doesn’t work with Fildem -, or as a GNOME hamburger menu).
But even without a global menu, the application menus don’t have a consistent look, so I guess you’re not missing much, while the advantage is that you can maximize an application that’s supported by Fildem and have the menu on the panel, maximizing the screen real estate which is great for laptops with small screens, as well as searchable menus.
Fildem Global Menu supports:
- GTK3 (as long as they have a traditional menu), GTK2 and Qt5 applications
- Flatpak, Snap and AppImage applications, as long as they meet the other criteria (I tested this with Kdenlive in all 3 cases and it worked, Gimp built with GTK3 installed from a flatpak package didn’t work for me though)
- Electron applications
- LibreOffice, Sublime Text / Merge (with this only working on X11), Jetbrain IDEs (you have to install the plugin JavaFX Runtime for Plugins), etc.
Firefox and Thunderbird are not supported, unless you use the patched firefox-appmenu and thunderbird-appmenu (available for example on AUR for Arch Linux / Manjaro).
You can see a list of applications known to work or not work on the Fildem wiki. Also check out this Fildem bug report which contains reports of applications for which the global menu and HUD don’t work.
The wiki list shows Google Chrome as working, but it didn’t work for me. Also, on the wiki, it’s mentioned that the global menu / HUD doesn’t work on Manjaro for Qt5 applications however, it did work for me (tested with Audacious Qt interface and KDiskMark).
How to install Fildem Global Menu and HUD for GNOME Shell
Installing Fildem Global Menu and HUD is not hard, and it doesn’t even require building anything from source. However, it’s somewhat time consuming because it’s a bit like a puzzle at this stage. Also, before trying to install it, make sure you read the complete description on GitHub, as well as the known issues.
The Fildem Global Menu should work with GNOME 3.36 (as it’s set in the extension metadata.json) and GNOME 3.38 (tested by me). It probably doesn’t work on older GNOME versions, so make sure you use one of these two GNOME versions before proceeding.
That means this should work on Ubuntu 20.04 and 20.10, Debian Bullseye and Sid, and Fedora 32 and 33. And obviously on Arch Linux / Manjaro until GNOME 4.0 is released and added to the Arch Linux repositories.
1. Install the required dependencies.
sudo apt install bamfdaemon gir1.2-bamf-3 libbamf3-2 libkeybinder-3.0-0 gir1.2-keybinder-3.0 appmenu-gtk2-module appmenu-gtk3-module unity-gtk-module-common python3-pip git
- Fedora (there are no
appmenu-gtk*-modulepackages on Fedora, so we’re going to install the
unity-gtk*-modulepackages instead, I’ve tried this and it works):
sudo dnf install bamf bamf-daemon keybinder3 unity-gtk2-module unity-gtk3-module appmenu-qt5 appmenu-qt5-profile.d python3-pip git
sudo pacman -S bamf appmenu-gtk-module libkeybinder3 libdbusmenu-gtk2 libdbusmenu-gtk3 libdbusmenu-qt5 git python-pip
For all these Linux distributions, you’ll also need to install a package via
python3 -m pip install --user fuzzysearch
2. Clone the Fildem Global Menu GitHub repository, install the GNOME Shell extension in
~/.local/share/gnome-shell/extensions and move the Fildem folder to
git clone https://github.com/gonzaarcr/Fildem
mkdir -p ~/.local/share/gnome-shell/extensions
mv Fildem/fildemGMenu@gonza.com ~/.local/share/gnome-shell/extensionssudo mv Fildem /opt/fildem
3. Load the required GTK modules on login.
To get GTK2 applications to work with Fildem Global Menu (and HUD), open
~/.gtkrc-2.0 with a text editor, for example we’ll use Gedit:
And in this file, add the following line (yes, you can use
appmenu-gtk-module on Fedora, even though we’ve installed
To get GTK3 applications to work with Fildem Global Menu (and HUD), open
~/.config/gtk-3.0/settings.ini with a text editor, for example we’ll use Gedit:
And in this file, if it’s empty, paste:
If the file is not empty, and it already has a
[Settings] section, paste
Note that even if this file doesn’t exist, if you run the Gedit commands I mentioned above to open those files, Gedit will create the files when saving.
4. Enable the Fildem GNOME Shell extension.
Open GNOME Tweaks or Extensions apps and enable the “Fildem global menu” extension. Don’t restart GNOME Shell yet since you’ll need to log out and re-login anyway in the next step.
5. Logout and re-login. Restarting GNOME Shell is not enough since the new GTK modules need to be loaded for this to work.
6. Run Fildem and see if it works properly for you.
Open a terminal and type the following command to run Fildem:
Now open one of the applications I mentioned above as being supported by Fildem. If you’re satisfied with Fildem GNOME Shell global menu and HUD, you can proceed to the 8th step to automatically run it on startup.
7. Fix the Fildem global menu padding.
Fildem draws the global menu on top of the GNOME Shell panel, and then makes this menu transparent so it looks like it’s part of the panel. Due to this, the displayed menu items from the top panel and the actual menu items may not correspond (see screenshots a bit further down this article).
The Fildem project page has a workaround for this spacing / padding issue, but this didn’t work for me. So below I’ll tell you what I did to fix this.
Since the menu that’s drawn on top of the GNOME Shell panel is transparent, you can’t exactly make out where each menu item actually is. To make it easier to get the actual menu and the menu text from the top panel to correspond, we’ll need to temporarily disable the Fildem global menu transparency.
This can be done by editing the
/opt/fildem/handlers/global_menu.py file with a text editor (as root):
Scroll down to the end of the file and comment out (place a
# at the beginning of the line) the last line (
Next, kill Fildem or logout and re-login, then run Fildem:
Now open the Fildem GNOME Shell extension file with a text editor, e.g. using Gedit:
extension.js file you’ll need to change the
NAT_PADDING (it’s near the top of the file) value so that the menu items from the top panel match the Fildem global menu. I can’t tell you what to use here, since this depends on the font used, GNOME Shell theme, etc.
You won’t be able to do this in one go, so try different values here, and reload GNOME Shell after editing the
extension.js file. I recommend testing this with VLC’s menu, since it seems this is affects VLC more than say LibreOffice.
Once you’re satisfied with this, open the
/opt/fildem/handlers/global_menu.py file once again and uncomment the last line, to make the menu transparent again.
Unfortunately I couldn’t find a better way to fix this.
This is Fildem global menu with VLC using the default
NAT_PADDING of 10 on my GNOME Shell 3.38 desktop (Ubuntu 20.10), with the menu transparency disabled:
After tweaking the
NAT_PADDING value (I’ve used a value of 0 here, but this may be different for you), the Fildem global menu now corresponds to the actual menu text from the top GNOME Shell panel:
8. Add Fildem Global Menu to startup.
If you’re satisfied with how Fildem works, you can add it to startup so it starts automatically when you login.
On Ubuntu, open Startup Applications and add a new item with
/opt/fildem/run.sh as the startup command.
For Debian, Fedora and Arch Linux / Manjaro, if you don’t have a GUI to add new startup commands (Tweaks only supports adding applications, and not commands), you can create a file called
~/.config/autostart, e.g. open this file for editing with Gedit:
And add this to the
Comment[en_US]=Fildem Global Menu and HUD
Comment=Fildem Global Menu and HUD
9. For Wayland users only: set a global keyboard shortcut to open the Fildem HUD (searchable menu).
If you’re using Wayland (for example, Fedora uses Wayland by default), the HUD keyboard shortcut (
Alt + Space) won’t work out of the box. You’ll need to open
Settings, click on
Keyboard Shortcuts on the left-hand side, then scroll down to the bottom of the
Keyboard Shortcuts settings window and click the
+ button to add a new custom keyboard shortcut.
/opt/fildem/inithud.sh as the shortcut command, and set any shortcut you want for it. You can use
Alt + Space like Fildem sets for non-Wayland users, since HUD includes window actions, which this shortcut replaces.
inithud.sh is not executable, so let’s make it so:
sudo chmod +x /opt/fildem/inithud.sh
The Fildem developer is actively working on this. In case something doesn’t work, check out the Fildem repository page and see if something has changed (and please let me know!). Due to this, Fildem may also break while the developer is working on it.
How to configure Fildem Global Menu and HUD
A. Always show the global menu.
By default, the global menu is only shown on mouse over, but you can set it to always be visible. To do this, open
~/.local/share/gnome-shell/extensions/fildemGMenu@gonza.com/extension.js with a text editor, e.g. open this file in Gedit using:
And in this file, change the value of
true, then save the file and restart GNOME Shell (if you’re on X11, press
Alt + F2, then type
r and press
Enter to restart GNOME Shell; if you’re on Wayland you’ll need to log out and re-login).
B. Menu is too long and the text gets truncated.
If the menu is too long and its text is truncated on the top GNOME Shell panel, you can install an extension such as Unite, which can be used to move the Date / Time widget from the middle of the top GNOME Shell panel to the right-hand side of the panel. This extension can also be used to hide the window titlebars when maximized and show the window buttons in the top bar.
C. Show or hide the GNOME AppMenu.
Another Fildem Global Menu option allows showing or hiding the GNOME AppMenu (the menu that shows the application name) from the top panel. For me though, this changed the AppMenu button from having an icon only, to having an icon and text. I’m not sure if this is due to some recent changes and the wiki was not updated or something else. However, after installing the Unite GNOME Shell extension, this option worked as expected.
Anyway, you can change this option by once again opening the Fildem
extension.js file with a text editor:
And change the value of
true, then save the file.
D. Fix no menu available for Gedit.
Using Fildem Global Menu, Gedit no longer has a menu on Ubuntu 20.04 / 20.10 and Manjaro (this doesn’t happen on Fedora), at least in my test.
This can be fixed by copying the Gedit desktop file to
~/.local/share/applications (so it’s not overwritten on package upgrades, and it only affects your user), and editing the
Exec lines to use
env UBUNTU_MENUPROXY=0 before the actual executable. In the same desktop file, you’ll also need to change
false. You can do all of this using the following commands:
cp /usr/share/applications/org.gnome.gedit.desktop ~/.local/share/applications/
sed -i 's/^Exec=/Exec=env UBUNTU_MENUPROXY=0 /g' ~/.local/share/applications/org.gnome.gedit.desktopsed -i 's/DBusActivatable=.*/DBusActivatable=false/' ~/.local/share/applications/org.gnome.gedit.desktop
It’s worth noting that this makes Gedit use its default hamburger menu, and not a traditional menu (so it won’t show up on the top panel).
In case you’re encountering issues with other applications’ menus, apply the same work-around.
How to remove Fildem global menu
Remove the Fildem GNOME Shell extension using:
rm -r ~/.local/share/gnome-shell/extensions/fildemGMenu@gonza.com
Remove the Fildem files that were installed in
sudo rm -r /opt/fildem
Remove the fildem autostart file (if you’ve named the autostart file
Let’s also remove
~/.config/gtk-3.0/settings.ini by opening these files:
gedit ~/.gtkrc-2.0gedit ~/.config/gtk-3.0/settings.ini
You’ll now need to remove
gtk-modules="appmenu-gtk-module" from these 2 files.
If you’ve used the tweak I mentioned above to fix the Gedit menu, remove the custom Gedit desktop file using:
If you also want to remove the installed dependencies (I’ll only list the appmenu packages in the remove commands below, in case the other packages are still needed). Watch the command output to see if it tries to remove something else (something you need), in which case don’t remove these packages:
sudo apt remove appmenu-gtk2-module appmenu-gtk3-module unity-gtk-module-common
sudo dnf remove unity-gtk2-module unity-gtk3-module appmenu-qt5 appmenu-qt5-profile.d
sudo pacman -Rs appmenu-gtk-module libdbusmenu-gtk2 libdbusmenu-gtk3 libdbusmenu-qt5