Jak mogę zastąpić ikonę powiadomienia w niskiej rozdzielczości przeglądarki Google Chrome?

15

Google Chrome został niedawno zaktualizowany do wersji 35.0.1916.114 w mojej instalacji Ubuntu 14.04.

Od tego czasu ikona powiadomień zaczęła pojawiać się na pasku zadań. Wygląda jednak na to, że używa ikony niskiej rozdzielczości - wygląda na zniekształconą:

wprowadź opis zdjęcia tutaj

Jak mogę to naprawić / wymienić?

fabiomaia
źródło
1
Ikony są przechowywane /usr/share/icons, jeśli to pomaga
MrVaykadji
@MrVaykadji: Dzięki za pomoc! Zajrzałem do tego katalogu, ale nie znalazłem żadnych ikon powiadomień Google Chrome. Domyślam się, że są w innym katalogu.
fabiomaia
1
może /opt? To tam są zainstalowane pliki binarne Google.
MrVaykadji
2
Cholera. A Google-Chrome nie jest oprogramowaniem typu open source, więc jeśli jest on zakodowany na stałe (czyli w plikach binarnych), nie będzie można zmienić tej ikony. Może możesz spróbować przyjrzeć się wszystkim plikom mającym „chrome” w nazwie, catfishna przykład, lub innym metodom umożliwiającym przeszukiwanie całego dysku.
MrVaykadji
1
Ta ikona powiadomienia jest błędna w co najmniej 3 punktach: nie respektuje preferencji użytkownika; nie szanuje kolorów Ubuntu; używa naprawdę niskiej rozdzielczości.
Rael Gugelmin Cunha,

Odpowiedzi:

14

Edycja: patrz poniżej, aby zaktualizować informacje o zastępowaniu ikony powiadomienia

Jeśli jesteś chrome, pliki binarne są zainstalowane w typowej lokalizacji, znajdziesz je w /opt/google/chrome. W tym folderze powinieneś znaleźć plik chrome_100_percent.pakzawierający ikonę powiadomienia. Oto kroki, które użyłem, aby go wyodrębnić, używając informacji z tego pytania o przepełnienie stosu :

  1. Pobierz kod do projektu grit-i18n za pomocą

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

  2. To da ci folder w twojej CWD o nazwie grit-i18n-read-only. CD do tego folderu

    cd grit-i18n-read-only

  3. Skopiuj moduł python data_pack do tego folderu

    cp grit/format/data_pack.py .

  4. Edytuj data_pack.pyw preferowanym edytorze. Po początkowym imporcie dodaj następujący wiersz:

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

  5. Pod koniec pliku w mainfunkcji, usuń linię

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

    (odpowiedź Przepełnienie stosu stwierdza, że ​​dzieje się to w wierszu 160, z mojego doświadczenia wynika, że ​​obecna wersja ma to w wierszu 201)

  6. W jego miejsce wstaw odpowiednio następujące wcięcia (3 razy):

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

    file.write(text)

  7. Uruchom data_pack.pynarzędzie na pliku chrome pak ( grit-i18n-read-onlynajpierw skopiowałem go do folderu):

    ./data_pack.py ../chrome_100_percent.pak

Spowoduje to powstanie wielu nowych plików w bieżącym katalogu, wszystkie nazwane liczbami bez rozszerzenia. Twoja przeglądarka plików (np. Nautilus) powinna być w stanie określić typy plików i wyświetlać miniatury obrazów. Znalazłem ikony powiadomień o nazwach 6866 i 6867.


Edytować

Chociaż poniżej znajdują się prostsze odpowiedzi, udało mi się zhakować trochę kodu, aby ponownie spakować zasoby, które możesz spróbować po edycji ikon. Spowoduje to utworzenie nowego .pakpliku, którego sam nie próbowałem użyć, więc nie mogę powiedzieć z całą pewnością, że z powodzeniem pojawią się nowe ikony powiadomień.

W głównej funkcji in data_pack.pyskomentowałem cały kod w elsebloku i dodałem następujące wiersze:

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

Więc po prostu biegnij ./data_pack.py. Zakłada się, że chrome_100_percent.pakznajduje się w bieżącym katalogu i powinien dać ci nowy chrome_100_percent_new.pakplik, który możesz spróbować skopiować /opt/google/chrome/chrome_100_percent.pak.

Uważam, że niektóre dodatkowe ikony w pakiecie zasobów związane z ikoną powiadomienia zostały zidentyfikowane; edycja powyższych elementów w celu włączenia ich powinna być dość prosta.


Ostateczna edycja

Teraz, gdy wróciłem do domu i miałem okazję popracować nad tym, udało mi się z powodzeniem zastąpić ikonę powiadomienia Chrome. Jak zauważył @Glutanimate, utknąłeś w rozdzielczości 16x16, więc nie jestem pewien, ile ulepszeń możesz faktycznie osiągnąć, ale przypuszczam, że to subiektywne.

Po prostu otworzyłem wyżej wymienione ikony (6864 - 6867) w GIMP, które wykryły je jako PNG w skali szarości. Wkleiłem nową ikonę do tego samego pliku w GIMP, próbując w ten sposób zachować te same właściwości obrazu (np. Skalę szarości). Następnie wyeksportowałem je jako pliki PNG, odznaczając WSZYSTKIE opcje oferowane przez GIMP, ale utrzymując poziom kompresji równy 9. Pliki wynikowe miały rozszerzenia .png, więc usunąłem je i zastąpiłem oryginały. Następnie uruchomiłem ponownie data_pack.py, po wprowadzeniu modyfikacji wyszczególnionych powyżej.

Zachowałem kopię zapasową oryginalnego pakietu mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.baki przeniosłem na nią mój zmodyfikowany plik .pak. Upewniam się, że podczas tego procesu Chrome jest zamknięty, i dwukrotnie sprawdź, czy procesy Chrome nie są uruchomione, i uważam, że chrome ma nowe ustawienie, które zezwala na procesy w tle, nawet gdy przeglądarka jest teraz domyślnie zamknięta.

Oto moje ikony powiadomień w Unity odzwierciedlają moje zmiany.

Edycja na koniec: OK, skłamałem - próbowałem PNG 32x32 i wygląda na to, że zadziałało dobrze. A więc proszę bardzo. Oto kilka zrzutów ekranu wyników.

  • Oryginalna ikona: Prawdopodobnie rozpoznasz domyślną ikonę „brak nieprzeczytanych powiadomień” w moim panelu tutaj między moim dropboxem a ikonami pogody:

Oryginalna ikona

  • Nowa ikona: Moja zmodyfikowana wersja 32x32px w tej samej lokalizacji:

Nowa ikona

(Źródło: Ikony partii od Adama Whitcrofta)

rocketman10404
źródło
Dziękuję za aktualizację! Mogę potwierdzić, że ikony 32px działają dobrze z data_pack.py. Zmodyfikowałem opublikowany fragment kodu, aby uwzględnić wszystkie ikony powiadomień. Mam nadzieję, że nie masz nic przeciwko.
Glutanimate
1
FWIW, możesz również użyć tej metody, aby całkowicie usunąć wskaźnik bez wyłączania systemu powiadomień (por. Askubuntu.com/a/473416/81372 ).
Glutanimate
Kolego, byłbym szczęśliwy, jeśli trochę posprzątasz samouczek ... Czy potrzebne są wszystkie modyfikacje data.py? Jestem trochę zmieszany. Żadne przestępstwo nie oznaczało, po prostu chcę go przestrzegać.
Decoff
1
Niezły hack. Aby dodać, możesz znaleźć więcej ikon tutaj thenounproject.com/search/?q=bell
gc5
W Chrome 36+ ikony są teraz 6894 ... 6897
gc5
8

Edytować:

Wygląda na to, że problem dotyczył node-chrome-pak. Zmodyfikowany rocketman10404 data_pack.pydziała dobrze, nawet z ikonami 32px:

wprowadź opis zdjęcia tutaj

Zamiast tego skorzystaj z jego instrukcji .


Oryginalna odpowiedź :

Doskonała odpowiedź @ rocketman10404 zaprowadziła mnie do node-chrome-pak , skryptu node.js, który może pakować, rozpakowywać i zamieniać określone zasoby w .pakplikach Chrome / ium .

Mimo że udało mi się zastąpić ikony powiadomień chrome_100_percent.paktym narzędziem, muszę zgłosić, że nie byłem w stanie pokazać zmian. Nadal uważam, że warto starać się nakreślić kroki, które podjąłem, aby uzyskać ten punkt. Mam nadzieję, że ktoś inny to podejmie i znajdzie sposób, aby faktycznie to zadziałało.

Instalowanie node.js

node-chrome-pakbędzie wymagał uruchomienia node.js. Możesz zainstalować najnowszą wersję, dodając nodejs PPA Chrisa Lei:

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

Pobranie skryptu i rozpakowanie zasobów Chrome

Pobierz skrypt:

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

Skopiuj lokalny chrome_100_percent.pakprzez:

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

Rozpakuj .pak plik:

node ./main.js unpack chrome_100_percent.pak

Identyfikacja i modyfikacja ikon powiadomień

Ostatnia akcja utworzy nowy folder o nazwie ./extracted . W nim znajdziesz wszystkie zasoby zawarte w pliku pak. Są one nazwane na podstawie identyfikatora zasobu. Będziesz chciał zachować tę nazwę, ponieważ jest to ważne przy ponownym pakowaniu plików.

Trudna część polega teraz na zidentyfikowaniu właściwych ikon. Jeśli się nie mylę, następujące pliki powinny być tymi używanymi w zasobniku systemowym:

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

Po zidentyfikowaniu ikon, których szukasz, możesz przystąpić do ich modyfikacji i wymiany. Jeśli chcesz, możesz użyć ikon, które stworzyłem w tym celu:

      

      

Pliki źródłowe i wyeksportowane .pngw różnych rozdzielczościach są hostowane w GitHub .

Oto pierwsze ograniczenie, które znalazłem: jeśli zastąpisz ikony obrazem w dowolnej rozdzielczości wyższej niż oryginalny Google Chrome, zostanie uszkodzony i przestanie działać poprawnie . W przypadku tego konkretnego projektu będziesz musiał zachować rozdzielczość 16x16. W efekcie oznacza to, że nie byłbyś w stanie znacząco poprawić obecnych ikon paska zadań, nawet gdybyś uruchomił tę metodę.

Oczywiście istnieje możliwość, że to ograniczenie zostało wprowadzone przy okazji node-chrome-pak zostało zaprojektowane. Może być możliwe zastąpienie ikon większymi ikonami, jeśli utworzysz niestandardowy skrypt Pythona na podstawie odpowiedzi @ rocketman10404.

Przepakowywanie zasobów i zastępowanie istniejących

Po zmodyfikowaniu / zastąpieniu istniejących ikon musisz utworzyć zaktualizowany pakplik ...

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

... i użyj go, aby zastąpić istniejący:

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

Istota tej metody

Podczas moich prób nie udało mi się wyświetlić Chrome zaktualizowanych ikon. Nawet jeśli upewniłem się, że wszystkie ikony zostały poprawnie zamienione i faktycznie znajdują się w zmodyfikowanym pakpliku (przez rozpakowanie go ponownie), nadal nie byłem w stanie zastąpić rzeczywistej ikony na pasku zadań.

Niestety nie mam pojęcia, dlaczego tak jest.

Glutanimate
źródło