Come posso sostituire l'icona di notifica a bassa risoluzione di Google Chrome?


15

Google Chrome è stato recentemente aggiornato alla versione 35.0.1916.114 sulla mia installazione di Ubuntu 14.04.

Da allora l'icona di notifica ha iniziato a comparire sulla barra delle applicazioni. Tuttavia sembra che stia usando un'icona a bassa risoluzione - sembra distorto:

inserisci qui la descrizione dell'immagine

Come posso ripararlo / sostituirlo?


1
Le icone sono memorizzate /usr/share/icons, se questo aiuta
MrVaykadji

@MrVaykadji: grazie per l'aiuto! Ho cercato in quella directory ma non sono riuscito a trovare alcuna icona di notifica di Google Chrome. Immagino che siano in una directory diversa.
fabiomaia,

1
forse /opt? Ecco dove sono installati i binari di Google.
MrVaykadji,

2
Dannazione. E Google-Chrome non è open source, quindi se questo è hardcoded (ovvero all'interno dei binari), non sarai in grado di cambiare quell'icona. Forse puoi provare a dare un'occhiata a tutti i file che hanno "chrome" nel loro nome, catfishad esempio, o altri metodi che ti consentono di effettuare ricerche su tutto il disco.
MrVaykadji,

1
Questa icona di notifica è errata in almeno 3 punti: non rispetta le preferenze dell'utente; non rispetta i colori di Ubuntu; sta usando una risoluzione molto bassa.
Rael Gugelmin Cunha,

Risposte:


14

Modifica: vedi sotto per l'aggiornamento sulla sostituzione dell'icona di notifica

Se sei binari Chrome installati nella posizione tipica, li troverai in /opt/google/chrome. In quella cartella dovresti trovare il file chrome_100_percent.pakche contiene l'icona di notifica. Ecco i passaggi che ho usato per estrarlo, usando le informazioni da questa domanda di overflow dello stack :

  1. Controlla il codice per il progetto grit-i18n con

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

  2. Questo ti darà una cartella nel tuo CWD chiamata grit-i18n-read-only. CD in questa cartella

    cd grit-i18n-read-only

  3. Copia il modulo python data_pack in questa cartella

    cp grit/format/data_pack.py .

  4. Modifica data_pack.pynel tuo editor preferito. Dopo le importazioni iniziali, aggiungi la seguente riga:

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

  5. Verso la fine del file nella mainfunzione, rimuovere la linea

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

    (la risposta Stack Overflow afferma che ciò si verifica alla riga 160, nella mia esperienza la versione corrente ha alla riga 201)

  6. Al suo posto, inserire le seguenti righe rientrate in modo appropriato (3 volte):

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

    file.write(text)

  7. Esegui l' data_pack.pyutilità sul file Chrome Pak (l'ho copiato prima nella grit-i18n-read-onlycartella):

    ./data_pack.py ../chrome_100_percent.pak

Ciò comporterà molti nuovi file nella directory corrente, tutti denominati come numeri senza estensione. Il tuo browser di file (ad es. Nautilus) dovrebbe essere in grado di determinare i tipi di file e mostrare le miniature delle immagini. Ho trovato le icone di notifica denominate 6866 e 6867.


modificare

Mentre ci sono alcune risposte più semplici qui sotto, sono riuscito a incidere un po 'di codice per reimballare le risorse che potresti provare dopo aver modificato le icone. Ciò produrrebbe un nuovo .pakfile, che non ho tentato di utilizzare me stesso, quindi non posso dire con certezza che ciò comporterebbe correttamente nuove icone di notifica.

Nella funzione principale in data_pack.py, ho commentato tutto il codice nel elseblocco e ho aggiunto le seguenti righe:

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

Quindi, corri e basta ./data_pack.py. Ciò presuppone che chrome_100_percent.paksi trovi nella directory corrente e dovrebbe fornire un nuovo chrome_100_percent_new.pakfile su cui è possibile tentare di copiarlo /opt/google/chrome/chrome_100_percent.pak.

Credo che siano state identificate alcune icone aggiuntive nel pacchetto di risorse relative all'icona di notifica; la modifica di quanto sopra per includerli dovrebbe essere piuttosto semplice.


Modifica finale

Ora che sono tornato a casa e ho avuto la possibilità di lavorarci ancora un po ', sono riuscito a sostituire con successo l'icona di notifica di Chrome. Come notato da @Glutanimate, sei bloccato con una risoluzione 16x16, quindi non sono sicuro di quanti miglioramenti puoi effettivamente ottenere, ma suppongo che sia soggettivo.

Ho semplicemente aperto le suddette icone (6864 - 6867) in GIMP, che le hanno rilevate come PNG in scala di grigi. Ho incollato una nuova icona nello stesso file in GIMP, tentando così di mantenere le stesse proprietà dell'immagine (ad es. Scala di grigi). Ho quindi esportato questi come PNG, deselezionando TUTTE le opzioni offerte da GIMP ma mantenendo un livello di compressione di 9. I file risultanti avevano estensioni .png, quindi ho rimosso quelli e sostituito gli originali. Ho quindi rieseguito data_pack.py, avendo già apportato le modifiche sopra descritte.

Ho tenuto una copia di backup del pacchetto originale con mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bake ho spostato il mio file .pak modificato al suo posto. Mi assicurerei che Chrome sia chiuso mentre lo faccio e ricontrollo che non ci siano processi Chrome in esecuzione, e credo che Chrome abbia una nuova impostazione per consentire i processi in background anche quando il browser è chiuso per impostazione predefinita ora.

Ecco, le mie icone di notifica in Unity riflettono le mie modifiche.

Final-Final Edit: OK, ho mentito - ho provato un PNG 32x32 e sembra aver funzionato bene. Quindi, eccoti. Ecco alcuni screenshot dei risultati.

  • Icona originale: probabilmente riconoscerai l'icona predefinita "nessuna notifica non letta" nel mio pannello tra la mia casella personale e le icone meteo:

Icona originale

  • Nuova icona: la mia versione modificata 32x32px nella stessa posizione:

Nuova icona

(Fonte: icone batch di Adam Whitcroft)


Grazie per l'aggiornamento! Posso confermare che le icone 32px funzionano bene con data_pack.py. Ho modificato lo snippet che hai pubblicato per tenere conto di tutte le icone di notifica. Spero non ti dispiaccia.
Glutanimate,

1
FWIW, puoi anche usare questo metodo per rimuovere completamente l'indicatore senza disabilitare il sistema di notifiche (vedi askubuntu.com/a/473416/81372 ).
Glutanimate,

Amico, sarei felice se pulissi un po 'il tutorial ... Sono necessarie tutte le modifiche a data.py? Sono un po 'confuso. Senza offesa, voglio solo seguirlo.
decollo

1
Bel trucco. Solo per aggiungere, puoi trovare più icone qui thenounproject.com/search/?q=bell
gc5

Con Chrome 36+ ora le icone sono 6894 ... 6897
gc5,

8

Modificare:

Sembra che il problema riguardasse node-chrome-pak. Il modificato di rocketman10404 data_pack.pyfunziona bene, anche con icone a 32px:

inserisci qui la descrizione dell'immagine

Si prega di usare le sue istruzioni invece.


Risposta originale :

L'eccellente risposta di @ rocketman10404 mi porta a node-chrome-pak , uno script node.js che può comprimere, decomprimere e sostituire risorse specifiche nei file di Chrome / ium .pak.

Anche se sono riuscito a sostituire le icone di notifica chrome_100_percent.pakcon questo strumento, devo segnalare che non sono stato in grado di rendere visibili le modifiche. Penso comunque che valga la pena fare uno sforzo per delineare i passi che ho fatto per ottenere questo punto. Spero che qualcun altro lo riprenda e troverà un modo per farlo funzionare davvero.

Installazione di node.js

node-chrome-pakavrà bisogno di node.js per funzionare. È possibile installare la versione più recente aggiungendo il nodejs PPA di Chris Lea:

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

Download dello script e decompressione delle risorse di Chrome

Scarica lo script:

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

Copia il tuo locale chrome_100_percent.paksopra:

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

Decomprimi il .pakfile:

node ./main.js unpack chrome_100_percent.pak

Identificazione e modifica delle icone di notifica

L'ultima azione avrà creato una nuova cartella chiamata ./extracted. In esso troverai tutte le risorse contenute nel file pak. Prendono il nome dal loro ID risorsa. Dovrai preservare questo nome poiché è importante per il riconfezionamento dei file.

La parte difficile ora sta nell'identificare le icone corrette. Se non sbaglio completamente, i seguenti file dovrebbero essere quelli utilizzati nel systray:

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

Dopo aver identificato le icone che stavi cercando, puoi procedere a modificarle e sostituirle. Se vuoi puoi usare le icone che ho creato per questo scopo:

      

      

I file sorgente e i messaggi esportati .pngin diverse risoluzioni sono ospitati su GitHub .

Ecco la prima limitazione che ho riscontrato: se si sostituiscono le icone con un'immagine con una risoluzione superiore a quella di Google Chrome originale si corromperà e smetterà di funzionare correttamente . Per questo particolare progetto dovrai rimanere con una risoluzione 16x16. In effetti questo significa che non saresti in grado di migliorare in modo significativo le icone del systray corrente, anche se dovessi far funzionare questo metodo.

Naturalmente c'è la possibilità che questa limitazione sia stata introdotta dal modo in cui è node-chrome-pakstata progettata. Potrebbe essere possibile sostituire le icone con icone più grandi se si crea uno script Python personalizzato basato sulla risposta di @ rocketman10404.

Reimballaggio delle risorse e sostituzione di quelle esistenti

Dopo aver modificato / sostituito le icone esistenti dovrai creare un pakfile aggiornato ...

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

... e usalo per sostituire quello esistente:

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

Il punto cruciale di questo metodo

Nei miei tentativi non sono stato in grado di far visualizzare a Chrome le icone aggiornate. Anche se mi sono assicurato che tutte le icone fossero state sostituite correttamente e effettivamente presenti nel pakfile modificato (scompattandolo di nuovo), non ero ancora in grado di sostituire l'icona reale nel systray.

Sfortunatamente non ho idea del perché.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.