Window Managers




In jgmenurc, set tint2_look = 1 to make jgmenu look like tint2 (i.e. colour, font, margin, padding and position). Other config variables in jgmenurc will overrule any tint2 settings, so start with all other lines commented out.

The button plugin was designed for jgmenu, and is therefore the preferred method. Take the following steps to insert a button plugin:

Add the letter P to panel_items in tint2rc. For example panel_items = PTSBC.

Add the following to tint2rc:

button = new
button_icon = /path/to/favourite_icon.png
button_lclick_command = jgmenu_run

An exec plugin (E) or launcher plugin (L) can also be used. See man tint2 for implementation details.

Note: The tint2 launcher plugin is significantly slower than button and exec plugins.

In order to avoid startup notification (spinning hour-glass after clicking button or launcher), set the following in ~/.config/tint2/tint2rc:

startup_notifications = 0

tint2 respects the StartupNotify= key in the .desktop files, so if you want to have a menu button wihtout SN and other launchers with SN, you would have to set startup_notification = 1 in tint2rc and use a launcher plugin for your jgmenu button.


Add “jgmenu” to one of “modules-{left,center,right} in the”[bar/foo]" section.

For example:

modules-left = jgmenu bspwm i3

Also add:

type = custom/text
content-padding = 2
content = menu
click-left = "jgmenu_run >/dev/null 2>&1 &"


The installation process creates a desktop-file in $prefix/share/applications (or ~/.local/share/applications if $prefix is set to $HOME).

If using default desktop file (which simply executes jgmenu_run) in Ubuntu’s Unity panel, the launcher will flash for 5-7 seconds and you will not be able to click it again during this time.

To prevent this from happening, prepend the Exec= command with env JGMENU_UNITY=1. For example:

Exec=env JGMENU_UNITY=1 jgmenu_run


Add the jgmenu launcher by dragging to the dock.

By default, cairo-dock is setup to prevent the user clicking multiple times in quick succession on the same icon. In order to achieve menu-like behaviour, carry out the following steps:


In your file manager, navigate to /usr/share/applications/ (or similar path depending on where .desktop files are installed on your system).

Drag the jgmenu launcher onto the panel.

On early versions of plank, the full icon path name was needed in the .desktop file. Please edit manually if this is the case on your system.

Window Managers


To bind jgmenu_run to a keyboard shortcut (ctrl-escape in this case), add the following to the <keyboard></keyboard> section of ~/.config/openbox/rc.xml

<keybind key="C-Escape">
  <action name="Execute">

To bind jgmenu_run to a mouse event (right click on root window in this case), add the following to the <mouse><context name="Root"></context></mouse> section of ~/.config/openbox/rc.xml

<mousebind button="Right" action="Release">
  <action name="Execute">

Note: action="Press" can be used instead of action="Release"


In i3 it would probably seem most natural to bind a key-combination to jgmenu. For example, like this:

bindsym $mod+z exec jgmenu_run

i3 provides no way to access the root window, a right-click can be bound on the status bar like this.

bar {
        bindsym button3 exec --no-startup-id jgmenu_run


To associate jgmenu with a keyboard shortcut (alt-F1 in this case), add the following to the keys[] array in config.h

{ MODKEY, XK_F1, spawn, {.v = jgmenucmd } },

In the /* commands */ section, add

static const char *jgmenucmd[]  = { "jgmenu_run", NULL };

Example jgmenurc to suit dwm:

tint2_look          = 0
menu_width          = 120
menu_margin_y       = 17
menu_margin_x       = 0
menu_padding_top    = 0
menu_padding_right  = 0
menu_padding_bottom = 0
menu_padding_left   = 0
menu_radius         = 1
menu_valign         = top
sub_spacing         = 0
item_margin_x       = 1
item_margin_y       = 1
item_height         = 17
sep_height          = 4
icon_size           = 0
arrow_width         = 8

To launch jgmenu on background right click or window title click, add the following to the buttons[] array:

{ ClkWinTitle, 0, Button1, spawn, {.v = jgmenucmd } },
{ ClkWinTitle, 0, Button3, spawn, {.v = jgmenucmd } },
{ ClkRootWin,  0, Button3, spawn, {.v = jgmenucmd } },

and add the following to jgmenurc

at_pointer          = 1


Start in background

To start jgmenu in the background during the boot process, use the following command:

(sleep 2s; jgmenu --hide-on-startup) &

Note: If started in this way, _NET_WORKAREA may not be read correctly


The X11 properties WM_NAME and WM_CLASS are set for jgmenu windows.

For example, in order to avoid jgmenu shadows, add one of these lines to ~/.config/compton.conf:

shadow-exclude = [ "name = 'jgmenu'" ];
shadow-exclude = [ "class_g = 'jgmenu'" ];

For a snappier experience, avoid fade by adding:

fade-exclude = [ "name = 'jgmenu'" ];


obmenu-generator produces menu data in openbox XML format. It can be integrated with with jgmenu in a number of ways.

For a short-lived menu, run this from a terminal:

jgmenu --csv-cmd="jgmenu_run ob --cmd='obmenu-generator -i'" --simple

To run jgmenu as a long-running application, set the following in your ~/.config/jgmenu/jgmenurc:

csv_cmd = jgmenu_run ob --cmd='obmenu-generator -i'

For installation of obmenu-generator, see


In order to bind jgmenu to the super-key, take the following steps:

  1. Bind jgmenu_run to a key combination. The method for doing this depends on your system and is outside the scope of this guide. For the next step, let’s assume that you have bound Control + Escape to jgmenu_run

  2. Install xcape and run the following: xcape -e 'Super_L=Control_L|Escape'

ksuperkey is a very similar package and can be used instead of xcape

GTK theme

Add the code below to ~/.config/jgmenu/startup and make the file executable:


gtktheme () {
    while IFS='=' read -r key value; do
        if [ "${key}" = "gtk-theme-name" ]; then
            printf '%s' "${value}"
            return 0
    done < "$HOME/.config/gtk-3.0/settings.ini"

old=$(cat ~/.cache/jgmenu/.last-gtktheme)

if ! [ "${old}" = "${new}" ]; then
    printf '%b
' "info: change gtk theme from ${old} to ${new}"
    jgmenu_run gtktheme

Add the following to ~/.config/jgmenu/hooks:

~/.config/gtk-3.0/settings.ini,jgmenu_run gtktheme