Как заменить значок уведомления в Google Chrome с низким разрешением?


15

Google Chrome был недавно обновлен до версии 35.0.1916.114 в моей установке Ubuntu 14.04.

С тех пор значок уведомлений начал появляться на панели задач. Однако кажется, что он использует значок низкого разрешения - он выглядит искаженным:

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

Как я могу это исправить / заменить?


1
Значки хранятся в /usr/share/icons, если это поможет
MrVaykadji

@MrVaykadji: Спасибо за помощь! Я посмотрел в этом каталоге, но не смог найти значки уведомлений Google Chrome. Я предполагаю, что они находятся в другом каталоге.
Фабиомая

1
может быть /opt? Вот где установлены двоичные файлы Google.
Мр

2
Черт. А Google-Chrome не является открытым исходным кодом, поэтому, если он жестко запрограммирован (имеется в виду внутри двоичных файлов), вы не сможете изменить этот значок. Может быть, вы можете попытаться взглянуть на все файлы с именем "chrome", catfishнапример, или другими способами, позволяющими осуществлять поиск по всему диску.
Вайкаджи

1
Этот значок уведомления неверен как минимум в 3 точках: он не учитывает предпочтения пользователя; это не уважает цвета Ubuntu; он использует действительно низкое разрешение.
Раэль Гугельмин Кунья

Ответы:


14

Изменить: см. Ниже обновление для замены значка уведомления

Если у вас установлены хромированные двоичные файлы в типичном месте, вы найдете их в /opt/google/chrome. В этой папке вы должны найти файл, chrome_100_percent.pakкоторый содержит значок уведомления. Вот шаги, которые я использовал для его извлечения, используя информацию из этого вопроса переполнения стека :

  1. Получите код для проекта grit-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)

    (ответ Stack Overflow утверждает, что это происходит в строке 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.

Я полагаю, что некоторые дополнительные значки в пакете ресурсов, связанные со значком уведомления, были идентифицированы; редактирование вышеупомянутого, чтобы включить те, должно быть довольно простым.


Окончательное редактирование

Теперь, когда я вернулся домой и имел возможность еще немного поработать над этим, мне удалось успешно заменить значок уведомления Chrome. Как заметил @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 закрыт, и еще раз проверить, не запущены ли процессы chrome, и я считаю, что в chrome есть новый параметр, разрешающий фоновые процессы, даже если браузер по умолчанию закрыт сейчас.

И вот, мои значки уведомлений в Unity отражают мои изменения.

Окончательно-финальное редактирование: ОК, я солгал - я попытался 32x32 PNG, и, похоже, он работал нормально. Итак, поехали. Вот некоторые результаты скриншотов.

  • Исходная иконка: Вы, вероятно, узнаете иконку по умолчанию «нет непрочитанных уведомлений» на моей панели между иконками выпадающего меню и погодой:

Оригинальная иконка

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

Новая иконка

(Источник: пакетные иконки от Адама Уиткрофта)


Спасибо за обновление! Я могу подтвердить, что значки 32px работают нормально с data_pack.py. Я изменил фрагмент, который вы разместили, чтобы учесть все значки уведомлений. Надеюсь, ты не против.
Glutanimate

1
Кстати, вы также можете использовать этот метод, чтобы полностью удалить индикатор без отключения системы уведомлений (см. Askubuntu.com/a/473416/81372 ).
Glutanimate

Мате, я был бы рад, если ты немного очистишь учебник ... Нужны ли все модификации data.py? Я немного смущен. Без обид, значит, я просто хочу этим следовать.
deckoff

1
Хороший хак. Просто чтобы добавить, вы можете найти больше значков здесь тогдаounounproject.com
search/?

В Chrome 36+ значки теперь 6894 ... 6897
gc5

8

Редактировать:

Похоже, проблема была с node-chrome-pak. Модификация rocketman10404 data_pack.pyработает нормально, даже с иконками 32px:

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

Пожалуйста, используйте его инструкции вместо этого.


Оригинальный ответ :

Отличный ответ @ 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. В нем вы найдете все ресурсы, содержащиеся в пак-файле. Они названы в честь их идентификатора ресурса. Вы захотите сохранить это имя, так как оно важно для переупаковки файлов.

Трудная часть сейчас заключается в определении правильных значков. Если я не полностью ошибаюсь, следующие файлы должны быть те, которые используются в systray:

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

Определив значки, которые вы искали, вы можете приступить к их изменению и замене. Если вы хотите, вы можете использовать иконки, которые я создал для этой цели:

      

      

Исходные файлы и экспортированные файлы .pngв разных разрешениях размещаются на GitHub .

Вот первое ограничение, которое я обнаружил: если вы замените значки изображением с любым разрешением, превышающим исходное, Google Chrome будет поврежден и перестанет работать должным образом . Для этого конкретного проекта вам придется остаться с разрешением 16x16. По сути, это означает, что вы не сможете значительно улучшить текущие значки системного окна, даже если этот метод будет работать.

Конечно, есть вероятность, что это ограничение было введено так, как node-chrome-pakбыло задумано. Возможно, можно будет заменить значки на более крупные, если вы создадите собственный скрипт на python, основанный на ответе @ 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файле (распаковав его снова), я все равно не смог бы заменить действительный значок в системном окне.

К сожалению, я понятия не имею, почему это так.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.