Introduction
In order to group several instances of a given application under one icon in the desktop launcher (I am using Ubuntu 17.04) they must have the same appName property of the WM_CLASS string. For example, if I run emacs
twice:
$ emacs &
$ emacs &
Both instances will show up under the Emacs icon in the desktop launchbar. The reason is that both instances have the same WM_CLASS string. We can check this string using
$ xprop WM_CLASS
and then click on the Emacs window. It then shows:
WM_CLASS(STRING) = "emacs", "Emacs"
Here "emacs" is the resource (appName), and "Emacs" is the className, see xdotool: what are “class” and “classname” for a window? for more information.
Question
Consider this program (my-tkapp.py
):
#! /usr/bin/env python
import tkinter as tk
root = tk.Tk(className='myTkApp')
label = tk.Label(root, text="Hello World")
label.pack()
root.mainloop()
If I run this program twice:
$ my-tkapp.py &
$ my-tkapp.py &
and then run xprop
to check the WM_CLASS
property of both windows,
the first window gives:
WM_CLASS(STRING) = "myTkApp", "Mytkapp"
whereas the second gives:
WM_CLASS(STRING) = "myTkApp #2", "Mytkapp"
Note that tkinter
has added a #2
suffix to the app name property. This is not desired. It makes the window manager group the two windows under separate icons in the desktop launch bar.
How can I keep the same appName property of the WM_CLASS string for different instances of my application?