Wie kann ich das Benachrichtigungssymbol für niedrige Auflösung von Google Chrome ersetzen?

15

Google Chrome wurde kürzlich in meiner Ubuntu 14.04-Installation auf Version 35.0.1916.114 aktualisiert.

Seitdem wird das Benachrichtigungssymbol in der Taskleiste angezeigt. Es scheint jedoch, dass ein Symbol mit niedriger Auflösung verwendet wird - es sieht verzerrt aus:

Bildbeschreibung hier eingeben

Wie kann ich es reparieren / ersetzen?

fabiomaia
quelle
1
Icons werden in gespeichert /usr/share/icons, wenn das hilft
MrVaykadji
@ MrVaykadji: Danke für die Hilfe! Ich habe in diesem Verzeichnis gesucht, aber keine Google Chrome-Benachrichtigungssymbole gefunden. Ich vermute, die befinden sich in einem anderen Verzeichnis.
Fabiomaia
1
vielleicht /opt? Hier werden die Google-Binärdateien installiert.
MrVaykadji
2
Verdammt. Und Google-Chrome ist kein Open Source-Programm. Wenn dies also fest codiert ist (dh in den Binärdateien), können Sie dieses Symbol nicht ändern. Vielleicht können Sie versuchen, einen Blick auf alle Dateien zu werfen, deren Name catfishbeispielsweise "chrome" enthält , oder auf andere Arten, mit denen Sie die Suche auf der gesamten Festplatte durchführen können.
MrVaykadji
1
Dieses Benachrichtigungssymbol ist in mindestens drei Punkten falsch: Es berücksichtigt nicht die Benutzereinstellungen. Ubuntu-Farben werden nicht berücksichtigt. Es verwendet eine sehr niedrige Auflösung.
Rael Gugelmin Cunha

Antworten:

14

Bearbeiten: Informationen zum Ersetzen des Benachrichtigungssymbols finden Sie weiter unten

Wenn Ihre Chrome-Binärdateien am typischen Speicherort installiert sind, finden Sie sie in /opt/google/chrome. In diesem Ordner sollte sich die Datei chrome_100_percent.pakbefinden, die das Benachrichtigungssymbol enthält. Hier sind die Schritte zum Extrahieren anhand der Informationen aus dieser Stapelüberlauf-Frage :

  1. Checke den Code zum grit-i18n Projekt mit

    svn checkout http://grit-i18n.googlecode.com/svn/trunk/ grit-i18n-read-only

  2. Dies gibt Ihnen einen Ordner in Ihrem CWD namens grit-i18n-read-only. CD in diesen Ordner

    cd grit-i18n-read-only

  3. Kopieren Sie das Python-Modul data_pack in diesen Ordner

    cp grit/format/data_pack.py .

  4. Bearbeiten Sie data_pack.pyin Ihrem bevorzugten Editor. Fügen Sie nach dem ersten Import die folgende Zeile hinzu:

    sys.path.append(os.getcwd())

  5. mainEntfernen Sie zum Ende der Datei in der Funktion die Zeile

    print '%s: %s' % (resource_id, text)

    (Die Stack Overflow-Antwort besagt, dass dies in Zeile 160 auftritt, meiner Erfahrung nach in der aktuellen Version in Zeile 201)

  6. Fügen Sie stattdessen die folgenden Zeilen ein, die entsprechend eingerückt sind (dreimal):

    file = open(str(resource_id), "wb")

    file.write(text)

  7. Führen Sie das data_pack.pyDienstprogramm in der Chrome-Pak-Datei aus (ich habe es zuerst in den grit-i18n-read-onlyOrdner kopiert ):

    ./data_pack.py ../chrome_100_percent.pak

Dies führt zu vielen neuen Dateien im aktuellen Verzeichnis, die alle als Nummern ohne Erweiterung benannt sind. Ihr Dateibrowser (z. B. Nautilus) sollte in der Lage sein, die Dateitypen zu bestimmen und Miniaturansichten von Bildern anzuzeigen. Ich habe die Benachrichtigungssymbole 6866 und 6867 gefunden.


Bearbeiten

Nachstehend finden Sie einige einfachere Antworten. Ich habe es jedoch geschafft, Code zu hacken, um die Ressourcen neu zu packen, die Sie nach dem Bearbeiten der Symbole verwenden können. Dies würde eine neue .pakDatei erzeugen , die ich nicht selbst verwendet habe. Daher kann ich nicht sicher sagen, dass dies erfolgreich zu neuen Benachrichtigungssymbolen führen würde.

In der Hauptfunktion in habe data_pack.pyich den gesamten Code im elseBlock auskommentiert und die folgenden Zeilen hinzugefügt:

# Read in the modified icon resource files
file = open('6864', 'r')
icon1 = file.read()
file.close()
file = open('6865', 'r')
icon2 = file.read()
file.close()
file = open('6866', 'r')
icon3 = file.read()
file.close()
file = open('6867', 'r')
icon4 = file.read()
file.close()

# Write resource pak of only notification icons
iconData = {6864: icon1, 6865: icon2, 6866: icon3, 6867: icon4}
WriteDataPack(iconData, 'tmp.pak', BINARY)

# Create copy of original pak without notification icons
dataPack = ReadDataPack('chrome_100_percent.pak')
# List of icon resources to remove
toRemove = set([6864,6865,6866,6867])
whiteList = set(dataPack.resources.keys()).difference(toRemove)
whiteListFile = open('whitelist.txt', 'w')
for i in whiteList:
  whiteListFile.write(str(i)+'\n')
whiteListFile.close()
newDataPack = RePack('tmp2.pak', ['chrome_100_percent.pak'], 'whitelist.txt')

# Merge the two paks together
combinedPack = RePack('chrome_100_percent_new.pak', ['tmp2.pak', 'tmp.pak'], None)

Dann renn einfach ./data_pack.py. Dies setzt voraus, dass chrome_100_percent.pakes sich im aktuellen Verzeichnis befindet und dass Sie eine neue chrome_100_percent_new.pakDatei erhalten, über die Sie versuchen können, sie zu kopieren /opt/google/chrome/chrome_100_percent.pak.

Ich glaube, einige zusätzliche Symbole im Ressourcenpaket, die sich auf das Benachrichtigungssymbol beziehen, wurden identifiziert. Das obige zu bearbeiten, um diese einzuschließen, sollte ziemlich einfach sein.


Final Edit

Nachdem ich wieder zu Hause bin und die Gelegenheit hatte, daran weiterzuarbeiten, konnte ich das Benachrichtigungssymbol von Chrome erfolgreich ersetzen. Wie @Glutanimate feststellte, haben Sie keine Auflösung von 16 x 16, daher bin ich mir nicht sicher, wie viel Verbesserung Sie tatsächlich erzielen können, aber ich nehme an, dass dies subjektiv ist.

Ich habe einfach die oben genannten Symbole (6864 - 6867) in GIMP geöffnet, die sie als Graustufen-PNGs erkannt haben. Ich habe ein neues Symbol in dieselbe Datei in GIMP eingefügt und versucht, dieselben Bildeigenschaften (z. B. Graustufen) beizubehalten. Ich habe diese dann als PNGs exportiert und ALLE von GIMP angebotenen Optionen deaktiviert, aber die Komprimierungsstufe 9 beibehalten. Die resultierenden Dateien hatten die Erweiterung .png, daher habe ich diese entfernt und die Originale ersetzt. Ich habe dann erneut ausgeführt data_pack.py, nachdem ich bereits die oben beschriebenen Änderungen vorgenommen habe.

Ich habe eine Sicherungskopie des Originalpakets zusammen mit der mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bakgeänderten .pak-Datei aufbewahrt und an deren Stelle verschoben. Ich würde sicherstellen, dass Chrome geschlossen ist, und überprüfen, dass keine Chrome-Prozesse ausgeführt werden, und ich glaube, dass Chrome eine neue Einstellung hat, um Hintergrundprozesse zuzulassen, auch wenn der Browser jetzt standardmäßig geschlossen ist.

Siehe da, meine Benachrichtigungssymbole in Unity spiegeln meine Änderungen wider.

Final Edit: OK, ich habe gelogen - ich habe es mit einem 32x32 PNG versucht und es scheint gut funktioniert zu haben. Hier bitteschön. Hier einige Ergebnis-Screenshots.

  • Ursprüngliches Symbol: Wahrscheinlich erkennen Sie in meinem Bedienfeld das standardmäßige Symbol "Keine ungelesenen Benachrichtigungen" zwischen meinen Dropbox- und Wettersymbolen:

Ursprüngliche Ikone

  • Neues Icon: Meine 32x32px modifizierte Version am selben Ort:

Neues Symbol

(Quelle: Batch Icons von Adam Whitcroft)

rocketman10404
quelle
Danke für das Update! Ich kann bestätigen, dass 32px-Symbole mit data_pack.py einwandfrei funktionieren. Ich habe das von Ihnen veröffentlichte Snippet so geändert, dass es alle Benachrichtigungssymbole berücksichtigt. Ich hoffe es macht dir nichts aus.
Glutanimate
1
FWIW, Sie können diese Methode auch verwenden, um den Indikator vollständig zu entfernen, ohne das Benachrichtigungssystem zu deaktivieren (vgl. Askubuntu.com/a/473416/81372 ).
Glutanimate
Kumpel, ich würde mich freuen, wenn du das Tutorial ein wenig aufräumst ... Sind alle Änderungen an data.py nötig? Ich bin etwas verwirrt. Nichts für ungut, ich will es nur verfolgen.
Deckoff
1
Netter Hack. Um
gc5
Bei Chrome 36+ sind die Icons jetzt 6894 ... 6897
gc5
8

Bearbeiten:

Sieht aus wie das Problem war mit node-chrome-pak. rocketman10404's modified data_pack.pyfunktioniert auch mit 32px Icons einwandfrei:

Bildbeschreibung hier eingeben

Bitte benutzen Sie stattdessen seine Anweisungen .


Ursprüngliche Antwort :

Die ausgezeichnete Antwort von @ rocketman10404 hat mich zu node- chrome -pak geführt , einem node.js-Skript, das bestimmte Ressourcen in Chrome / ium- .pakDateien packen, entpacken und ersetzen kann .

Obwohl ich es geschafft habe, die Benachrichtigungssymbole chrome_100_percent.pakdurch dieses Tool zu ersetzen , muss ich melden, dass ich die Änderungen nicht sichtbar machen konnte. Trotzdem denke ich, dass es sich lohnt, die Schritte zu skizzieren, die ich unternommen habe, um diesen Punkt zu erreichen. Hoffentlich greift jemand anderes das auf und findet einen Weg, es tatsächlich zum Laufen zu bringen.

Installieren von node.js

node-chrome-pakZum Ausführen wird node.js benötigt. Sie können die neueste Version installieren, indem Sie Chris Leas nodejs PPA hinzufügen:

sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Laden Sie das Skript herunter und entpacken Sie die Chrome-Ressourcen

Laden Sie das Skript herunter:

git clone https://bitbucket.org/hikipro/node-chrome-pak.git
cd node-chrome-pak

Kopieren Sie Ihre lokale chrome_100_percent.paküber:

cp /opt/google/chrome/chrome_100_percent.pak ./chrome_100_percent.pak

Entpacke die .pakDatei:

node ./main.js unpack chrome_100_percent.pak

Identifizieren und Ändern der Benachrichtigungssymbole

Die letzte Aktion hat einen neuen Ordner mit dem Namen erstellt ./extracted. Darin finden Sie alle Ressourcen, die in der Pak-Datei enthalten sind. Sie sind nach ihrer Ressourcen-ID benannt. Sie sollten diesen Namen beibehalten, da er für das erneute Packen der Dateien wichtig ist.

Der schwierige Teil besteht nun darin, die richtigen Symbole zu identifizieren. Wenn ich mich nicht völlig irre, sollten die folgenden Dateien im Systray verwendet werden:

6864.png
6865.png
6866.png
6867.png

Nachdem Sie die gesuchten Symbole identifiziert haben, können Sie sie ändern und ersetzen. Wenn Sie möchten, können Sie die Symbole verwenden, die ich für diesen Zweck erstellt habe:

      

      

Die Quelldateien und exportierten .pngs in verschiedenen Auflösungen werden bei GitHub gehostet .

Hier ist die erste Einschränkung, die ich gefunden habe: Wenn Sie die Symbole durch ein Bild mit einer höheren Auflösung als dem Original ersetzen, wird Google Chrome beschädigt und funktioniert nicht mehr ordnungsgemäß . Für dieses spezielle Projekt müssen Sie eine Auflösung von 16x16 haben. Tatsächlich bedeutet dies, dass Sie die aktuellen Systray-Symbole nicht wesentlich verbessern können, selbst wenn Sie diese Methode zum Laufen bringen.

Natürlich besteht die Möglichkeit, dass diese Einschränkung durch die Art und Weise eingeführt node-chrome-pakwurde, wie sie entworfen wurde. Es ist möglicherweise möglich, die Symbole durch größere zu ersetzen, wenn Sie ein benutzerdefiniertes Python-Skript erstellen, das auf der Antwort von @ rocketman10404 basiert.

Neuverpacken der Ressourcen und Ersetzen der vorhandenen Ressourcen

Nach dem Ändern / Ersetzen der vorhandenen Symbole müssen Sie eine aktualisierte pakDatei erstellen ...

node ./main.js pack ./extracted ./chrome_100_percent_modified.pak

... und benutze es, um das existierende zu ersetzen:

sudo cp ./chrome_100_percent_modified.pak /opt/google/chrome/chrome_100_percent.pak

Der springende Punkt dieser Methode

Bei meinen Versuchen konnte ich Chrome nicht dazu bringen, die aktualisierten Symbole anzuzeigen. Auch wenn ich sichergestellt habe, dass alle Symbole korrekt ersetzt wurden und tatsächlich in der geänderten pakDatei vorhanden sind (durch erneutes Entpacken), konnte ich das eigentliche Symbol im Systray immer noch nicht ersetzen.

Leider habe ich keine Ahnung woran das liegt.

Glutanimate
quelle