¿Cómo puedo reemplazar el ícono de notificación de baja resolución de Google Chrome?

15

Google Chrome se actualizó recientemente a la versión 35.0.1916.114 en mi instalación de Ubuntu 14.04.

Desde entonces, el icono de notificación ha comenzado a aparecer en la bandeja del sistema. Sin embargo, parece que está usando un ícono de baja resolución; parece distorsionado:

ingrese la descripción de la imagen aquí

¿Cómo puedo arreglarlo / reemplazarlo?

fabiomaia
fuente
1
Los iconos se almacenan en /usr/share/icons, si eso ayuda
MrVaykadji
@ MrVaykadji: ¡Gracias por la ayuda! Miré debajo de ese directorio pero no pude encontrar ningún ícono de notificación de Google Chrome. Supongo que están en un directorio diferente.
fabiomaia
1
tal vez /opt? Ahí es donde están instalados los binarios de google.
MrVaykadji
2
Maldición. Y Google-Chrome no es de código abierto, por lo que si está codificado (es decir, dentro de los archivos binarios), no podrá cambiar ese icono. Quizás pueda intentar echar un vistazo a todos los archivos que tienen "Chrome" en su nombre, catfishpor ejemplo, u otros métodos que le permitan buscar en todo el disco.
MrVaykadji
1
Este icono de notificación es incorrecto en al menos 3 puntos: no respeta las preferencias del usuario; no respeta los colores de Ubuntu; Está usando una resolución realmente baja.
Rael Gugelmin Cunha

Respuestas:

14

Editar: consulte a continuación la actualización sobre el reemplazo del icono de notificación

Si sus binarios de Chrome están instalados en la ubicación típica, los encontrará en /opt/google/chrome. En esa carpeta, debe encontrar el archivo chrome_100_percent.pakque contiene el icono de notificación. Estos son los pasos que utilicé para extraerlo, utilizando la información de esta pregunta de desbordamiento de pila :

  1. Verifique el código del proyecto grit-i18n con

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

  2. Esto le dará una carpeta en su CWD llamada grit-i18n-read-only. CD en esta carpeta

    cd grit-i18n-read-only

  3. Copie el módulo de python data_pack a esta carpeta

    cp grit/format/data_pack.py .

  4. Edite data_pack.pyen su editor preferido. Después de las importaciones iniciales, agregue la siguiente línea:

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

  5. Hacia el final del archivo en la mainfunción, elimine la línea

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

    (la respuesta de desbordamiento de pila indica que esto ocurre en la línea 160, en mi experiencia, la versión actual lo tiene en la línea 201)

  6. En su lugar, inserte las siguientes líneas sangradas apropiadamente (3 veces):

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

    file.write(text)

  7. Ejecute la data_pack.pyutilidad en el archivo chrome pak (lo copié grit-i18n-read-onlyprimero en la carpeta):

    ./data_pack.py ../chrome_100_percent.pak

Esto dará como resultado muchos archivos nuevos en el directorio actual, todos nombrados como números sin extensión. Su explorador de archivos (por ejemplo, nautilus) debería poder determinar los tipos de archivos y mostrar miniaturas de imágenes. Encontré los iconos de notificación nombrados como 6866 y 6867.


Editar

Si bien hay algunas respuestas más simples a continuación, logré hackear algunos códigos para volver a empaquetar los recursos que podrías intentar después de editar los íconos. Esto produciría un nuevo .pakarchivo, que no he intentado usar yo mismo, por lo que no puedo decir con certeza que esto resulte exitosamente en nuevos iconos de notificación.

En la función principal en data_pack.py, comenté todo el código en el elsebloque y agregué las siguientes líneas:

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

Entonces, solo corre ./data_pack.py. Esto supone que chrome_100_percent.pakestá en el directorio actual y debería darle un nuevo chrome_100_percent_new.pakarchivo que podría intentar copiar /opt/google/chrome/chrome_100_percent.pak.

Creo que se han identificado algunos íconos adicionales en el paquete de recursos relacionados con el ícono de notificación; editar lo anterior para incluirlos debería ser bastante sencillo.


Edición final

Ahora que estoy en casa y tuve la oportunidad de trabajar en esto un poco más, logré reemplazar con éxito el ícono de notificación de Chrome. Como señaló @Glutanimate, está atascado con una resolución de 16x16, por lo que no estoy seguro de cuánta mejora puede lograr realmente, pero supongo que es subjetivo.

Simplemente abrí los iconos antes mencionados (6864 - 6867) en GIMP, que los detectó como PNG en escala de grises. Pegué un nuevo icono en el mismo archivo en GIMP, intentando así mantener las mismas propiedades de imagen (por ejemplo, escala de grises). Luego los exporté como PNG, desmarcando TODAS las opciones que ofrece GIMP pero manteniendo un nivel de compresión de 9. Los archivos resultantes tenían extensiones .png, así que las eliminé y reemplacé las originales. Luego volví a correr data_pack.py, ya había hecho las modificaciones detalladas anteriormente.

Mantuve una copia de seguridad del mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bakpaquete original con y moví mi archivo .pak modificado en su lugar. Me aseguraría de que Chrome esté cerrado al hacer esto, y verifique dos veces que no hay procesos de Chrome en ejecución, y creo que Chrome tiene una nueva configuración para permitir procesos en segundo plano incluso cuando el navegador está cerrado de forma predeterminada ahora.

He aquí que mis iconos de notificación en Unity reflejan mis cambios.

Finalmente-Edición final: OK, mentí - Intenté un PNG de 32x32 y parece haber funcionado bien. Ahí vas. Aquí algunas capturas de pantalla de resultados.

  • Ícono original: Probablemente reconocerá el ícono predeterminado de 'no notificaciones no leídas' en mi panel aquí entre mi dropbox y los íconos del clima:

Ícono original

  • Nuevo icono: Mi versión modificada de 32x32px en la misma ubicación:

Nuevo icono

(Fuente: iconos de lote de Adam Whitcroft)

rocketman10404
fuente
¡Gracias por la actualización! Puedo confirmar que los íconos de 32px funcionan bien con data_pack.py. Modifiqué el fragmento que publicaste para tener en cuenta todos los íconos de notificación. Espero que no te moleste.
Glutanimate
1
FWIW, también puede usar este método para eliminar por completo el indicador sin desactivar el sistema de notificaciones ( consulte askubuntu.com/a/473416/81372 ).
Glutanimate
Compañero, me gustaría que limpie un poco el tutorial ... ¿Son necesarias todas las modificaciones en data.py? Estoy un poco confundido. Sin ofender, solo quiero seguirlo.
deckoff
1
Buen truco. Solo para agregar, puede encontrar más íconos aquí thenounproject.com/search/?q=bell
gc5
Con Chrome 36+ ahora los iconos son 6894 ... 6897
gc5
8

Editar:

Parece que el problema fue con node-chrome-pak. La modificación de rocketman10404 data_pack.pyfunciona bien, incluso con iconos de 32px:

ingrese la descripción de la imagen aquí

Por favor use sus instrucciones en su lugar.


Respuesta original :

La excelente respuesta de @ rocketman10404 me llevó a node-chrome-pak , un script de node.js que puede empaquetar, desempaquetar y reemplazar recursos específicos en los .pakarchivos de Chrome / ium .

Aunque logré reemplazar los íconos de notificación chrome_100_percent.pakcon esta herramienta, debo informar que no pude hacer visibles los cambios. Aún así, creo que vale la pena resumir los pasos que tomé para llegar a este punto. Esperemos que alguien más tome esto y encuentre una manera de hacerlo funcionar.

Instalar node.js

node-chrome-paknecesitará node.js para ejecutarse. Puede instalar la última versión agregando el PPA nodejs de Chris Lea:

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

Descargando el script y desempacando los recursos de Chrome

Descargar el guión:

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

Copie su local chrome_100_percent.paksobre:

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

Descomprima el .pakarchivo:

node ./main.js unpack chrome_100_percent.pak

Identificar y modificar los íconos de notificación

La última acción habrá creado una nueva carpeta llamada ./extracted. En él encontrará todos los recursos contenidos en el archivo pak. Se nombran después de su ID de recurso. Deberá conservar este nombre, ya que es importante para volver a empaquetar los archivos.

La parte difícil ahora radica en identificar los íconos correctos. Si no estoy completamente equivocado, los siguientes archivos deberían ser los que se usan en la bandeja del sistema:

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

Una vez identificados los iconos que estaba buscando, puede proceder a modificarlos y reemplazarlos. Si lo desea, puede usar los iconos que creé para este propósito:

      

      

Los archivos de origen y los correos .pngelectrónicos exportados en diferentes resoluciones se alojan en GitHub .

Aquí viene la primera limitación que encontré: si reemplaza los iconos con una imagen en una resolución superior a la original, Google Chrome se dañará y dejará de funcionar correctamente . Para este proyecto en particular, tendrá que quedarse con una resolución de 16x16. En efecto, esto significa que no podría mejorar significativamente los iconos de la bandeja del sistema actual, incluso si tuviera que hacer funcionar este método.

Por supuesto, existe la posibilidad de que esta limitación se introdujera por la forma en que node-chrome-pakfue diseñada. Es posible reemplazar los íconos por otros más grandes si crea un script de Python personalizado basado en la respuesta de @ rocketman10404.

Reempaquetar los recursos y reemplazar los existentes.

Después de modificar / reemplazar los iconos existentes, tendrá que crear un pakarchivo actualizado ...

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

... y úsalo para reemplazar el existente:

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

El quid de este método

En mis intentos, no he podido hacer que Chrome muestre los íconos actualizados. Incluso si me aseguré de que todos los íconos se reemplazaran correctamente y realmente estuvieran presentes en el pakarchivo modificado (al desempaquetarlo nuevamente) aún no podía reemplazar el ícono real en la bandeja del sistema.

Lamentablemente no tengo idea de por qué es esto.

Glutanimato
fuente