web-dev-qa-db-fra.com

Comment remplacer l'icône de notification basse résolution de Google Chrome?

Google Chrome a récemment été mis à niveau vers la version 35.0.1916.114 sur mon installation Ubuntu 14.04.

Depuis lors, l'icône de notification a commencé à apparaître dans la barre d'état système. Cependant, il semble qu'il utilise une icône basse résolution - il semble déformé:

enter image description here

Comment puis-je le réparer/le remplacer?

15
fabiomaia

Edit: voir ci-dessous la mise à jour sur le remplacement de l'icône de notification

Si vous êtes chrome les binaires sont installés à l'emplacement typique, vous les trouverez dans /opt/google/chrome. Dans ce dossier, vous devriez trouver le fichier chrome_100_percent.pak contenant l’icône de notification. Voici les étapes que j'ai utilisées pour l'extraire, en utilisant les informations de cette question de débordement de pile :

  1. Vérifiez le code à la projet grit-i18n avec

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

  2. Cela vous donnera un dossier dans votre CWD appelé grit-i18n-read-only. CD dans ce dossier

    cd grit-i18n-read-only

  3. Copiez le module data_pack python dans ce dossier.

    cp grit/format/data_pack.py .

  4. Éditez data_pack.py dans votre éditeur préféré. Après les importations initiales, ajoutez la ligne suivante:

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

  5. Vers la fin du fichier dans la fonction main, supprimez la ligne

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

    (La réponse au débordement de pile indique que cela se produit à la ligne 160; d'après mon expérience, la version actuelle l'a à la ligne 201)

  6. A sa place, insérer les lignes suivantes indentées de manière appropriée (3 fois):

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

    file.write(text)

  7. Exécutez l'utilitaire data_pack.py sur le fichier pak chrome (je l'ai d'abord copié dans le dossier grit-i18n-read-only):

    ./data_pack.py ../chrome_100_percent.pak

Cela se traduira par un grand nombre de nouveaux fichiers dans le répertoire en cours, tous nommés comme numéros sans extension. Votre navigateur de fichiers (par exemple, Nautilus) devrait pouvoir déterminer les types de fichiers et afficher les vignettes d’images. J'ai trouvé les icônes de notification nommées 6866 & 6867.


Modifier

Bien qu'il y ait des réponses plus simples ci-dessous, j'ai réussi à pirater du code pour reconditionner les ressources que vous pourriez essayer après avoir édité les icônes. Cela produirait un nouveau fichier .pak, que je n’ai pas essayé d’utiliser moi-même. Je ne peux donc pas affirmer que cela aboutirait à la création de nouvelles icônes de notification.

Dans la fonction principale de data_pack.py, j'ai commenté tout le code du bloc else et ajouté les lignes suivantes:

# 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)

Ensuite, lancez simplement ./data_pack.py. Cela suppose que chrome_100_percent.pak se trouve dans le répertoire en cours et devrait vous donner un nouveau fichier chrome_100_percent_new.pak que vous pouvez copier sur /opt/google/chrome/chrome_100_percent.pak.

Je crois que certaines icônes supplémentaires dans la boîte de ressources associées à l'icône de notification ont été identifiées; éditer ce qui précède pour inclure ceux-ci devrait être assez simple.


Édition finale

Maintenant que je suis rentré chez moi et que j'ai eu la chance de travailler dessus, j'ai réussi à remplacer l'icône de notification de chrome. Comme @Glutanimate l'a noté, vous êtes bloqué avec une résolution 16x16, je ne suis donc pas sûr du niveau d'amélioration que vous pouvez réellement obtenir, mais je suppose que c'est subjectif.

J'ai simplement ouvert les icônes susmentionnées (6864 - 6867) dans GIMP, qui les détectaient en tant que PNG en niveaux de gris. J'ai collé une nouvelle icône dans le même fichier dans GIMP, essayant ainsi de conserver les mêmes propriétés d'image (par exemple, niveaux de gris). J'ai ensuite exporté ces fichiers au format PNG, en décochant TOUTES les options offertes par GIMP mais en maintenant un niveau de compression de 9. Les fichiers résultants avaient des extensions .png; j'ai donc supprimé celles-ci et remplacé les originaux. J'ai alors relancé data_pack.py, après avoir déjà apporté les modifications détaillées ci-dessus.

J'ai gardé une copie de sauvegarde du pak d'origine avec mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bak et j'ai déplacé mon fichier .pak modifié à sa place. Je voudrais m'assurer que chrome est fermé en même temps et vérifier qu'il n'y a aucun processus chrome en cours d'exécution, et je crois que chrome a un nouveau paramètre pour autoriser les processus en arrière-plan même lorsque le navigateur est fermé par défaut maintenant.

Et voilà, mes icônes de notification dans Unity reflètent mes modifications.

Enfin-Final Edit: OK, j’ai menti - j’ai essayé de réaliser un PNG 32x32 et cela semble avoir très bien fonctionné. Alors voilà. Voici quelques images de résultats.

  • Icône d'origine: vous reconnaîtrez probablement l'icône par défaut "Pas de notifications non lues" dans mon panneau, entre les icônes de ma boîte aux lettres et de la météo:

Original Icon

  • Nouvelle icône: Ma version modifiée 32x32px au même endroit:

New Icon

(Source: Icônes de lot de Adam Whitcroft)

14
rocketman10404

Modifier:

On dirait que le problème était avec node-chrome-pak. Le data_pack.py modifié de rocketman10404 fonctionne bien, même avec des icônes de 32 pixels:

enter image description here

Veuillez utiliser ses instructions à la place.


Réponse originale :

L'excellente réponse de @ rocketman10404 m'a conduit à node-chrome-pak , un script node.js capable de compresser, de décompacter et de remplacer des ressources spécifiques dans les fichiers .pak de Chrome/ium.

Bien que j’ai réussi à remplacer les icônes de notification dans chrome_100_percent.pak par cet outil, je dois signaler que je n’ai pas été en mesure de rendre les modifications visibles. Néanmoins, je pense que cela vaut la peine de décrire les mesures que j'ai prises pour atteindre ce point. J'espère que quelqu'un d'autre prendra la relève et trouvera le moyen de le faire fonctionner.

Installation de node.js

node-chrome-pak aura besoin de node.js pour fonctionner. Vous pouvez installer la dernière version en ajoutant le PPA nodejs de Chris Lea:

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

Téléchargement du script et décompression des ressources de Chrome

Téléchargez le script:

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

Copiez votre chrome_100_percent.pak local sur:

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

Décompressez le fichier .pak:

node ./main.js unpack chrome_100_percent.pak

Identification et modification des icônes de notification

La dernière action aura créé un nouveau dossier appelé ./extracted. Vous y trouverez toutes les ressources contenues dans le fichier pak. Ils sont nommés d'après leur identifiant de ressource. Vous voudrez conserver ce nom car il est important pour le reconditionnement des fichiers.

La difficulté réside maintenant dans l'identification des icônes correctes. Si je ne me trompe pas complètement, les fichiers suivants devraient être ceux utilisés dans le systray:

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

Après avoir identifié les icônes que vous recherchiez, vous pouvez les modifier et les remplacer. Si vous le souhaitez, vous pouvez utiliser les icônes que j'ai créées à cet effet:

Les fichiers source et les .pngs exportés dans différentes résolutions sont hébergés sur GitHub .

Voici la première limitation que j'ai trouvée: Si vous remplacez les icônes par une image dont la résolution est supérieure à celle d'origine Google Chrome sera corrompu et cessera de fonctionner correctement . Pour ce projet particulier, vous devrez rester avec une résolution de 16x16. En réalité, cela signifie que vous ne pourriez pas améliorer de manière significative les icônes de systray actuelles, même si cette méthode fonctionnait.

Bien sûr, il est possible que cette limitation ait été introduite de la manière dont node-chrome-pak a été conçu. Il pourrait être possible de remplacer les icônes par des plus grandes si vous créez un script personnalisé python basé sur la réponse de @ rocketman10404.

Reconditionnement des ressources et remplacement des ressources existantes

Après avoir modifié/remplacé les icônes existantes, vous devrez créer un fichier pak mis à jour ...

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

... et utilisez-le pour remplacer celui existant:

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

Le noeud de cette méthode

Lors de mes tentatives, je n’ai pas pu obtenir Chrome afficher les icônes mises à jour. Même si je m'assurais que toutes les icônes étaient remplacées correctement et présentes dans le fichier pak modifié (en le décompressant à nouveau), je ne pouvais toujours pas remplacer l'icône dans la barre des tâches.

Malheureusement, je ne sais pas pourquoi.

8
Glutanimate