Як я можу замінити значок сповіщення про низьку роздільну здатність Google Chrome?


15

Google Chrome нещодавно було оновлено до версії 35.0.1916.114 на моїй установці Ubuntu 14.04.

З цього моменту піктограма сповіщень почала з’являтися на системному треї. Однак здається, що використовується значок низької роздільної здатності - виглядає спотвореним:

введіть тут опис зображення

Як це можна виправити / замінити?


1
Піктограми зберігаються у /usr/share/icons, якщо це допоможе
MrVaykadji

@MrVaykadji: Дякую за допомогу! Я переглянув цей каталог, але не знайшов жодної піктограми сповіщень Google Chrome. Я здогадуюсь, що вони знаходяться в іншому каталозі.
фабіомія

1
можливо /opt? Ось де встановлені бінарні файли google.
MrVaykadji

2
Блін. І Google-Chrome не є відкритим кодом, тому якщо це жорстко закодовано (мається на увазі всередині бінарних файлів), ви не зможете змінити цю піктограму. Можливо, ви можете спробувати ознайомитись з усіма файлами, що мають "chrome" у своєму імені, catfishнаприклад, або іншими методами, що дозволяють шукати на диску все.
Містер Вайкаджі

1
Ця піктограма сповіщення неправильна щонайменше у 3-х пунктах: вона не поважає налаштування користувачів; він не поважає кольори Ubuntu; він використовує дійсно низьку роздільну здатність.
Раель Гугельмін Кунья

Відповіді:


14

Редагувати: див. Нижче для оновлення щодо заміни піктограми сповіщень

Якщо хромовані бінарні файли встановлені в типовому місці, ви їх знайдете /opt/google/chrome. У цій папці ви повинні знайти файл, chrome_100_percent.pakякий містить значок сповіщення. Ось кроки, якими я користувався, щоб отримати його, використовуючи інформацію з цього питання про переповнення стека :

  1. Витягує код в грит-i18n проекту з

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

  2. Це дасть вам папку у вашому CWD grit-i18n-read-only. CD у цю папку

    cd grit-i18n-read-only

  3. Скопіюйте модуль python data_pack у цю папку

    cp grit/format/data_pack.py .

  4. Редагуйте data_pack.pyу вибраному редакторі. Після початкового імпорту додайте наступний рядок:

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

  5. До кінця файла у mainфункції видаліть рядок

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

    (Відповідь на переповнення стека стверджує, що це відбувається у рядку 160, на мій досвід, у поточній версії він є у рядку 201)

  6. На його місце вставити наступні рядки з відступом відповідним чином (3 рази):

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

    file.write(text)

  7. Запустіть data_pack.pyутиліту на файл chrome pak (я grit-i18n-read-onlyспершу скопіював її в папку):

    ./data_pack.py ../chrome_100_percent.pak

Це призведе до появи багатьох нових файлів у поточному каталозі, всі названі як числа без розширення. Ваш браузер файлів (наприклад, nautilus) повинен мати можливість визначати типи файлів і показувати ескізи зображень. Я знайшов піктограми сповіщень з назвою 6866 та 6867.


Редагувати

Хоча нижче є кілька простих відповідей, мені вдалося зламати разом якийсь код, щоб перепакувати ресурси, які ви могли б спробувати після редагування піктограм. Це дало б нове.pak файл, який я не намагався використовувати сам, тому не можу сказати напевно, що це призведе до нових піктограм сповіщень.

У головній функції в data_pack.pyя прокоментував весь код у elseблоці та додав наступні рядки:

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

Тоді просто біжи ./data_pack.py. Це передбачає, що chrome_100_percent.pakзнаходиться у поточному каталозі, і має дати вам новий chrome_100_percent_new.pakфайл, який ви можете спробувати скопіювати /opt/google/chrome/chrome_100_percent.pak.

Я вважаю, що деякі додаткові іконки в пакеті ресурсів, пов’язані з піктограмою сповіщень, виявлені редагування вищезазначеного, щоб включити ці, має бути досить простим.


Остаточна редакція

Тепер, коли я повернувся додому і мав можливість ще трохи попрацювати над цим, мені вдалося успішно замінити значок сповіщення хрому. Як зазначає @Glutanimate, ви застрягли з роздільною здатністю 16x16, тому я не впевнений, скільки поліпшень ви можете реально досягти, але я вважаю, що це суб'єктивно.

Я просто відкрив вищезгадані піктограми (6864 - 6867) у GIMP, які виявили їх як PNG у відтінках сірого. Я вставив нову піктограму в той самий файл GIMP, намагаючись зберегти ті самі властивості зображення (наприклад, масштаб сірого). Потім я експортував їх у вигляді PNG, знімаючи галочки з усіх варіантів, які пропонує GIMP, але підтримуючи рівень стиснення 9. У отриманих файлах були розширення .png, тому я видалив їх і замінив оригінали. Потім я перебіг data_pack.py, вже внісши детально модифікації.

Я зберігав резервну копію оригіналу пак mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bak пакета і перемістив модифікований файл .pak на своє місце. Я б переконався, що хром закритий при цьому, і ще раз перевірте, чи немає хромованих процесів, і я вважаю, що в chrome є нове налаштування, яке дозволяє фонові процеси, навіть коли браузер за замовчуванням закритий.

Ось, ось, мої значки сповіщень в Unity відображають мої зміни.

Нарешті-остаточне редагування: Гаразд, я збрехав - я спробував PNG 32x32, і, здається, він працював чудово. Отже, там ви йдете. Ось кілька скріншотів.

  • Оригінальний значок: Ви, мабуть, розпізнаєте за замовчуванням значок "без непрочитаних сповіщень" на моїй панелі тут, між моїми папками "Піктограма" та погодними значками:

Оригінальний значок

  • Нова ікона: Моя модифікована версія 32x32px у тому самому місці:

Нова ікона

(Джерело: Пакетні іконки від Адама Віткрофта)


Дякуємо за оновлення! Я можу підтвердити, що піктограми 32 пікселів добре працюють із data_pack.py. Я змінив фрагмент, який ви опублікували, для обліку всіх піктограм сповіщень. Сподіваюся, ви не заперечуєте.
Глутанімація

1
FWIW, ви також можете використовувати цей метод для повного видалення індикатора, не вимикаючи систему сповіщень (див. Askubuntu.com/a/473416/81372 ).
Glutanimate

Мате, я був би радий, якщо ви трохи почистите підручник ... Чи потрібні всі модифікації data.py? Я трохи розгублений. Жодне ображення не означало, я просто хочу слідувати за цим.
deckoff

1
Гарний хак. Для додання, ви можете знайти більше піктограм тут thenounproject.com/search/?q=bell
gc5

У Chrome 36+ зараз іконки - 6894 ... 6897
gc5

8

Редагувати:

Схоже, проблема була з node-chrome-pak. модифікований data_pack.pyrocketman10404 працює нормально, навіть із значками 32 пікселів:

введіть тут опис зображення

Будь ласка, використовуйте його інструкції замість цього.


Оригінальна відповідь :

Відмінна відповідь @ rocketman10404 привела мене до node-chrome-pak , сценарію node.js, який може пакувати, розпаковувати та замінювати певні ресурси у .pakфайлах Chrome / ium .

Хоча мені вдалося замінити піктограми сповіщень chrome_100_percent.pakцим інструментом, я мушу повідомити, що я не зміг зробити видимі зміни. І все-таки я думаю, що варто докласти зусиль, щоб окреслити кроки, які я вжив, щоб досягти цієї точки. Сподіваємось, хтось інший візьме це за справу і знайде спосіб насправді змусити його працювати.

Встановлення node.js

node-chrome-pakзнадобиться node.js для запуску. Ви можете встановити найновішу версію, додавши PPA nodejs Кріса Леа:

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

Завантаження сценарію та розпакування ресурсів Chrome

Завантажте сценарій:

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

Скопіюйте свій місцевий chrome_100_percent.pak :

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

Розпакуйте .pakфайл:

node ./main.js unpack chrome_100_percent.pak

Ідентифікація та зміна піктограм сповіщення

Остання дія створить нову папку під назвою ./extracted . У ньому ви знайдете всі ресурси, що містяться у файлі pak. Вони названі на честь свого ідентифікатора ресурсу. Ви хочете зберегти це ім'я, оскільки воно важливе для перепакування файлів.

Зараз важка частина полягає у визначенні правильних іконок. Якщо я не зовсім помиляюся, наступні файли повинні бути тими, що використовуються в systray:

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

Визначивши шукані піктограми, ви можете перейти до їх модифікації та заміни. Якщо ви хочете, ви можете використовувати для цього створені я значки:

      

      

У GitHub.png розміщуються вихідні файли та експортовані s з різною роздільною здатністю .

Ось перше я знайшов обмеження: нами Якщо ви заміните піктограми на зображення в будь-якій роздільній здатності, що перевищує оригінальну Google Chrome, вони зіпсуються і перестануть працювати належним чином . Для цього конкретного проекту вам доведеться дотримуватися резолюції 16x16. Фактично це означає, що ви не зможете значно покращити поточні піктограми systray, навіть якби цей метод спрацював.

Звичайно, існує можливість, що це обмеження було введене до речі node-chrome-pak було розроблено. Ікони можуть бути замінені на більші, якщо створити користувацький сценарій пітона на основі відповіді @ rocketman10404.

Переупаковка ресурсів та заміна існуючих

Після зміни / заміни існуючих піктограм вам доведеться створити оновлений pakфайл ...

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

... і використовувати його для заміни існуючого:

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

Суть цього методу

У своїх спробах мені не вдалося змусити Chrome показати оновлені значки. Навіть якщо я переконався, що всі піктограми були замінені правильно та фактично присутні у модифікованомуpak файлі (шляхом його повторного розпакування), я все одно не зміг замінити фактичну піктограму в systray.

На жаль, я не маю уявлення, чому це так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.