Progress Update.
- 25 qube icons are uploaded to the repository.
- Back to GraphicsMagick and resolving the rendering bug
- Window Buttons (Running Apps) Icon Effects. icon-receiver daemon
- Trying to learn from History.
Qube Icons (Help Needed)
25 qube icons suitable to be used with qubes-label-tweak-tool
are now uploaded to the repository. You could see them all together on Github page if you scroll down the page. Please be advised that some icons include optical illusions which might trigger CNS disorders in some people. Original Qubes OS Vector Perfect Qute Sushi icons are linked directly from Qubes Artwork repository for reference.
Some of those icons are my own sketches. Some include design elements from other designers. Proper attribution to original designers (like @ninvavizz) is added to README.md file as well as SVG metadata. I really appreciate your feedback specially if you find any trademarks policy violation. Receiving a Github take-down notice is the last thing I want at this stage.
While reading Trademarks policies of various Distros, I realized that most of them are very restrictive and prohibitive and disallow performing any kind of modifications on their logos. Some explicitly advise against overlaying their logo on any non-square shaped background. The only relax ones are Debian and Gentoo. So I ditched the whole idea of overlaying Distro logos on qubes icons. An independent table of Distro logos which are linked directly from their websites is included in the README.md file. This table includes official color codes as well as links to the Distro artwork policy pages (if available). I appreciate if anyone has spare time to read Distros’ artwork trademarks policies and inform me if it would be OK to include their unmodified icons directly in the repository.
For people who want to design their own qube icons, Rubik’s qube and Webcolors qube SVGs include Inkscape guides which will facilitate your design. Just do not forget to update the Metadata of svg in file properties and add your own name/license/…
Proper Makefile with label creation targets is included. You could use it after installing qubes-label-tweak-tool
to automatically create all or just one category of default TT labels. Run make
in the icons directory for more information.
Switching back to GraphicsMagick
After educating myself on GM internals, it became obvious that Vector to Raster conversion is performed in multiple stages. Not only special modifiers is required but also the order of command line options is important. So we are back to GM because of multiple reasons. GraphicsMagick is significantly faster than ImageMagick for png icon generation. 5,303 milliseconds for GM vs 42,907 milliseconds for IM to convert 25 SVG icons to 512x512 PNGs. Not even close. Render output is a little bit different between the two. See screenshot (pay attention to dice, sticky notes and qube-square3 icons):
Even ignoring the performance difference, IM is known to switch between several different licenses in the past and ended up on Apache license. More info on GM FAQ. So if you have installed ImageMagick to use with qubes-label-tweak-tool
, please remove it. Just run dnf history
and find ImageMagick and all its related weak dependencies and purge them.
If you create your own icons, it is advisable to check them with both GM and IM conversions:
gm convert -background transparent -density 512x512 -size 512x512 svgfile -size 512x512 pngoutput
convert +antialias -background transparent -density 512x512 -size 512x512 svgfile -size 512x512 pngoutput
And do not forget to cleanse up your SVG icons in Inkscape using cleanup option in the file menu.
Icon Receiver daemon.
Qubes OS VM icons are transferred to dom0/GUIVM in 3 different ways.
- Via TemplateVM package manager post-install hooks and permanently stored in GUIVM. I have already finished writing alternate effects for these icons via
qvm-appmenus-tweak-tool
.
- Icons of running apps in
Windows Buttons
area next to Qubes Application Menu. These icons could be dynamically generated by the source app. They persist in RAM. Qubes uses icon-receiver
daemon of window-icon-updater
which is a part of qubes-gui-daemon repository. Fortunately it is not necessary to touch the original daemon and perform invasive plastic surgery on it. It loads via an XDG autostart .desktop file. It could be suppressed via a .desktop file at ~/.config/autostart
with Hidden=true
tag. And the Tweak Tool version will be loaded via a separate .desktop file at the same location. So everything runs in user space without requiring root privileges or sudo. The original icon-updater
will be used as a Python library and alternate effects will be overloaded on it. I have tested it and it works fine. I have to refactor and cleanse it to because worthy of peer review. BTW, there might be a minor bug in the icon-receiver
daemon. If you logoff and logon without shutting down a VM, icon-receiver
daemon does not re-register it. Maybe I could spend some time on it and fix it.
- The Systray Icons (WiFi/Network Icon, sys-whonix systray icon, …) effects use a totally different code base. It is again a part of
qubes-gui-daemon
repository under gui-daemon
sup-directory and is written in C code. That is why Systray icons have independent style config in Qubes Global Config
settings. I will discuss it further in next session.
Learning from History
I have to carefully study the history of split path of Systray and Windows Buttons icon effects. As was once said wisely:
Ideally Icon receiver should merely sanitize them against malicious code injection and the (tint or other) effects should be performed on the front-end via Freedesktops CSS or similar technics. Currently all icons are sanitized and rasterized, then tint effect is performed in the backend via CPU. The current Vector to Raster conversion approach might hinder adoption of users with HiDPI screens. Sanitizing SVGs against script code injection requires XML interpreters and will be an enormous task to accomplish. But it might become a necessity in the future. CSS effects might be much faster due to GPU acceleration. If Freedesktop CSS theme per label could be implemented, UIUX people could do their magic touch instead of limited hard coded effects in the back-end.