Change Application Window Icons Elegantly
The situation ∆
Sometimes you want to change the icon an application displays e.g. in the panel but cannot for some reason.
- Changing the icon theme does not help, and the application has no means of telling it to use another icon.
- Changing the icon referenced in the software's .desktop file (usually installed to /usr/share/applications when the software was installed) doesn't help either.
- Putting a suitable icon inside the icon theme's folders or under, say, /usr/share/pixmaps or /usr/share/icons/hicolor doesn't help either!
The solution ∆
(under Xorg)
If you can get your hands on fbpanel
(for Archlinux users, instead of compiling from source), install it.
We will use it not as a panel, but only for its "icons" plugin that allows to replace troublesome icons with nicer ones.
Save this as ~/.config/fbpanel/default
and edit the Plugin section to your content (the Global section just ensures the panel itself stays invisible):
Global {
edge = bottom
allign = right
margin = 0
widthtype = pixel
heightType = pixel
width = 0
height = 0
transparent = true
alpha = 0
setdocktype = false
setpartialstrut = false
autohide = false
heightWhenHidden = 0
roundcorners = false
layer = below
SetLayer = false
MaxElemHeight = 0
}
# 'icons' plugin lets you customize window icons.
# these changes apply to entire desktop
Plugin {
type = icons
config {
application {
icon = utilities-terminal
#terminal-symbolic
ClassName = URxvt
}
application {
icon = web-browser
ClassName = Firefox
}
application {
icon = extract-archive
ClassName = Engrampa
}
application {
icon = /path/to/icon.png
ClassName = Xmessage
}
application {
icon = accessories-calculator
ClassName = XCalc
}
}
}
As you can see you can use both symbolic names or full paths to image files (just like inside .desktop files).
Applications are identified by their ClassNames, these can be found like so:
xprop|grep WM_CLASS
Now just add
fbpanel &
to your autostart.
There will be no panel, you can still use your other panel! All this does is to magically change icons.
The changes are instant both for running & newly started applications.
More explanation here.
Tell window manager to ignore fbpanel ∆
Otherwise fbpanel might show up in your taskbar.
For openbox, edit rc.xml
:
xml<openbox_config> (...) <applications> (...) <application name="panel" class="fbpanel"> <skip_taskbar>yes</skip_taskbar> <skip_pager>yes</skip_pager> </application> (...) </applications> </openbox_config>
Inferior solution ∆
The application xseticon
essentially does the same, but it has to be activated manually, resulting in ugly hacks like wrapper scripts around executables and a perceptible flicker when the icon changes. But it might be a better solution in some cases.