在我的Ubuntu 14.04安装上,Google Chrome最近升级到了35.0.1916.114版本。
从那时起,通知图标开始出现在系统托盘上。但是,似乎它使用的是低分辨率图标-看上去变形了:
如何修复/更换它?
/opt
吧?那就是安装谷歌二进制文件的地方。
catfish
例如,或通过其他方法来搜索整个磁盘。
在我的Ubuntu 14.04安装上,Google Chrome最近升级到了35.0.1916.114版本。
从那时起,通知图标开始出现在系统托盘上。但是,似乎它使用的是低分辨率图标-看上去变形了:
如何修复/更换它?
/opt
吧?那就是安装谷歌二进制文件的地方。
catfish
例如,或通过其他方法来搜索整个磁盘。
Answers:
编辑:有关更换通知图标的更新,请参见下文
如果您将chrome二进制文件安装在典型位置,则可以在中找到它们/opt/google/chrome
。在该文件夹中,您应该找到chrome_100_percent.pak
包含通知图标的文件。这是我使用此堆栈溢出问题中的信息来提取它的步骤:
代码结帐的砂砾,国际化的项目有
svn checkout http://grit-i18n.googlecode.com/svn/trunk/ grit-i18n-read-only
这将在您的CWD中为您提供一个名为的文件夹grit-i18n-read-only
。CD放入此文件夹
cd grit-i18n-read-only
将data_pack python模块复制到此文件夹
cp grit/format/data_pack.py .
编辑data_pack.py
您的首选编辑器。在初始导入之后,添加以下行:
sys.path.append(os.getcwd())
在main
函数的文件末尾,删除该行
print '%s: %s' % (resource_id, text)
(Stack Overflow答案指出此情况发生在第160行,以我的经验,当前版本在第201行出现)
在其位置上,插入适当缩进的以下行(3次):
file = open(str(resource_id), "wb")
file.write(text)
data_pack.py
在chrome pak文件上运行该实用程序(我grit-i18n-read-only
先将其复制到该文件夹中):
./data_pack.py ../chrome_100_percent.pak
这将在当前目录中产生许多新文件,所有文件都以数字命名,没有扩展名。您的文件浏览器(例如nautilus)应该能够确定文件类型并显示图像缩略图。我发现了名为6866和6867的通知图标。
尽管下面有一些简单的答案,但我设法整理了一些代码来重新打包在编辑图标后可以尝试使用的资源。这将产生一个新.pak
文件,我没有尝试使用自己,所以我不能肯定地说这将成功生成新的通知图标。
在中的main函数中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,所以我不确定您可以实际实现多少改进,但是我认为这是主观的。
我只是在GIMP中打开了上述图标(6864-6867),将其检测为灰度PNG。我将一个新图标粘贴到GIMP的同一文件中,从而尝试保留相同的图像属性(例如灰度)。然后,将它们导出为PNG,取消选中GIMP提供的所有选项,但将压缩级别保持为9。结果文件具有.png扩展名,因此我删除了这些文件并替换了原始文件。然后data_pack.py
,我已经进行了上面详细的修改,然后重新运行。
我保留了原始pak的备份副本,并将mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bak
修改后的.pak文件移到了它的位置。我会确保在执行此操作时关闭了chrome,并再次检查是否没有chrome进程正在运行,并且我相信chrome有一个新设置,即使当前默认关闭浏览器也允许后台进程。
瞧,我在Unity中的通知图标反映了我的更改。
Final-Final Edit:好的,我撒谎了-我尝试了32x32 PNG,看来效果还不错。所以,你去了。这里是一些结果截图。
(来源:Adam Whitcroft的批处理图标)
编辑:
看来问题出在哪里node-chrome-pak
。data_pack.py
即使使用32px图标,rocketman10404的修改也可以正常工作:
请改用他的指示。
原始答案:
@ rocketman10404的出色答案将我引到了node-chrome-pak,这是一个node.js脚本,可以打包,解压缩和替换Chrome / ium .pak
文件中的特定资源。
尽管我已设法chrome_100_percent.pak
用此工具替换了通知图标,但我必须报告我无法使更改可见。尽管如此,我仍然认为值得为概述这一点而采取的步骤。希望其他人可以解决这个问题,并找到一种使之真正起作用的方法。
安装node.js
node-chrome-pak
需要运行node.js。您可以通过添加Chris Lea的nodejs PPA来安装最新版本:
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文件中包含的所有资源。它们以其资源ID命名。您将需要保留此名称,因为它对于重新打包文件很重要。
现在,困难的部分在于识别正确的图标。如果我没有完全弄错,以下文件应该是系统托盘中使用的文件:
6864.png
6865.png
6866.png
6867.png
确定所需图标后,您可以继续修改和替换它们。如果需要,可以使用我为此创建的图标:
源文件和.png
不同分辨率的导出文件托管在GitHub上。
这是我发现的第一个限制:如果将图标替换为比原始Google Chrome更高的分辨率的图像,则会损坏它并停止正常工作。对于此特定项目,您将必须保持16x16分辨率。实际上,这意味着即使您要使此方法正常运行,也无法显着改善当前的系统托盘图标。
当然,这种限制是通过node-chrome-pak
设计方式引入的。如果您基于@ rocketman10404的答案创建自定义python脚本,则可以将图标替换为较大的图标。
重新打包资源并替换现有资源
修改/替换现有图标后,您将必须创建更新的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
文件中(通过再次将其解压缩),我仍然无法替换系统托盘中的实际图标。
不幸的是,我不知道为什么会这样。
/usr/share/icons
,如果有帮助的话