Sorry, aber ich halte Deine Vorgehensweise nicht für richtig. Du änderst den Inhalt einer Datei, die nur indirekt referenziert wird und erwartest, dass diese Änderung vom System sofort erkannt wird. Wenn Du willst, dass Änderungen erkannt werden sollen, dann wenigstens nur bei der Datei, die das System auch prüft. Für das Icon eines Programmstarters wäre das die entsprechende Konfigurationsdatei und ich kann jetzt nur für LUbuntu-18.04.2 sprechen mit LXDE-Windowmanager. Bei Deinem System könnte das aber ähnlich sein. In dem Programmstarter steht drin wie das Icon heißt, dass angezeigt werden soll und dort ändert man den Namenseintrag. Wenn ich das bei mir mache, dann wird sofort von der "Desktopverwaltung" die Änderung erkannt und sofort das andere Icon angezeigt. D.h. wenn ich so einen Effekt blau/rot haben möchte, dann müsste ich 2 verschiedene Grafik-Icons anlegen und jeweils den anderen Namen für die gewünschte Änderung in der Programmstarterdatei (was eine einfache Textdatei ist) eintragen (das lässt sich aus dem ablaufenden shell-script per einfachem perl-Befehl erreichen).
Ein Einzeiler in perl, der den Icon-Eintrag im Programmstarter von der Starterdatei cpufreq.desktop auf dem Schreibstisch bei mir umsetzt, so dass der Desktop diese Änderung sofort anzeigt, sieht bei mir z.B. so aus:
# tausche das mainboard-Icon gegen Texteditor-Icon aus:
# -i steht bei perl dafür die Änderung direkt in der Datei vorzunehmen, d.h. die wird direkt überschrieben!
perl -p -i -e 's/hardinfo/accessories-text-editor/' ~/Schreibtisch/cpufreq.desktop
# und wieder zurück tauschen
perl -p -i -e 's/accessories-text-editor/hardinfo/' ~/Schreibtisch/cpufreq.desktop
diese Änderungen werden bei mir sofort angezeigt, da offenbar erkannt wird, dass sich der Zustand dieser Programmstarterdatei auf dem Desktop geändert hat.