ฉันจะแทนที่ไอคอนการแจ้งเตือนที่มีความละเอียดต่ำของ Google Chrome ได้อย่างไร


15

Google Chrome เพิ่งอัพเกรดเป็นเวอร์ชั่น 35.0.1916.114 ในการติดตั้ง Ubuntu 14.04 ของฉัน

ตั้งแต่นั้นไอคอนการแจ้งเตือนเริ่มปรากฏขึ้นบนถาดระบบ อย่างไรก็ตามดูเหมือนว่าจะใช้ไอคอนความละเอียดต่ำ - ดูบิดเบี้ยว:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจะแก้ไข / แทนที่มันได้อย่างไร?


1
ไอคอนจะถูกเก็บไว้/usr/share/iconsถ้ามันช่วยได้
MrVaykadji

@MrVaykadji: ขอบคุณสำหรับความช่วยเหลือ! ฉันดูในไดเรกทอรีนั้น แต่ไม่พบไอคอนการแจ้งเตือนของ Google Chrome ฉันเดาว่ามันอยู่ในสารบบอื่น
fabiomaia

1
อาจจะ/opt? นั่นคือที่ติดตั้งไบนารีของ Google
MrVaykadji

2
ประณาม. และ Google-Chrome ไม่ใช่โอเพ่นซอร์สดังนั้นหากนี่เป็นฮาร์ดโค้ด (ความหมายภายในไบนารี) คุณจะไม่สามารถเปลี่ยนไอคอนนั้นได้ บางทีคุณสามารถลองดูไฟล์ทั้งหมดที่มี "chrome" ในชื่อไฟล์catfishตัวอย่างหรือวิธีอื่นที่ช่วยให้คุณค้นหาทั่วทั้งดิสก์ได้
MrVaykadji

1
ไอคอนการแจ้งเตือนนี้ผิดอย่างน้อย 3 คะแนน: มันไม่เป็นไปตามการตั้งค่าของผู้ใช้ ไม่เคารพสีอูบุนตู มันใช้ความละเอียดต่ำมาก
Rael Gugelmin Cunha

คำตอบ:


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 grit-i18n-read-only

  3. คัดลอกโมดูล data_pack python ไปยังโฟลเดอร์นี้

    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ได้

ฉันเชื่อว่าไอคอนเพิ่มเติมบางอย่างใน pak ทรัพยากรที่เกี่ยวข้องกับไอคอนการแจ้งเตือนถูกระบุ การแก้ไขข้างต้นเพื่อรวมสิ่งเหล่านั้นควรตรงไปตรงมา


การแก้ไขครั้งสุดท้าย

ตอนนี้ฉันกลับถึงบ้านแล้วและมีโอกาสได้ทำงานกับสิ่งนี้อีกต่อไปฉันจัดการเพื่อแทนที่ไอคอนการแจ้งเตือนของ Chrome ได้สำเร็จ ตามที่ @Glutanimate ตั้งข้อสังเกตว่าคุณติดอยู่ที่ความละเอียด 16x16 ดังนั้นฉันไม่แน่ใจว่าคุณจะสามารถปรับปรุงได้มากเพียงใด แต่ฉันคิดว่ามันเป็นอัตนัย

ฉันเพียงแค่เปิดไอคอนดังกล่าว (6864 - 6867) ใน GIMP ซึ่งตรวจพบว่าเป็น PNGs สีเทา ฉันวางไอคอนใหม่ลงในไฟล์เดียวกันใน 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 ที่แก้ไขแล้วไปไว้ที่เดิม ฉันจะตรวจสอบให้แน่ใจว่าโครเมี่ยมปิดอยู่เมื่อทำสิ่งนี้และตรวจสอบอีกครั้งว่าไม่มีกระบวนการของโครเมี่ยมที่ทำงานอยู่และฉันเชื่อว่าโครเมี่ยมมีการตั้งค่าใหม่เพื่อให้กระบวนการพื้นหลังแม้ว่าเบราว์เซอร์จะปิดโดยค่าเริ่มต้นแล้ว

ดูเถิดและดูเถิดไอคอนการแจ้งเตือนของฉันใน Unity สะท้อนถึงการเปลี่ยนแปลงของฉัน

ในที่สุดการแก้ไขครั้งสุดท้าย:ตกลงฉันโกหก - ฉันพยายาม 32x32 PNG และดูเหมือนว่าจะทำงานได้ดี ดังนั้นคุณไป นี่คือภาพหน้าจอของผลลัพธ์

  • ไอคอนดั้งเดิม: คุณอาจจำไอคอน 'ไม่มีการแจ้งเตือนที่เป็นค่าเริ่มต้น' ในแผงของฉันที่นี่ระหว่างไอคอนดรอปบ็อกซ์และสภาพอากาศของฉัน:

ไอคอนดั้งเดิม

  • ไอคอนใหม่: รุ่นที่แก้ไขของฉัน 32x32px ในตำแหน่งเดียวกัน:

ไอคอนใหม่

(ที่มา: ไอคอนแบทช์จาก Adam Whitcroft)


ขอบคุณสำหรับการอัพเดท! ฉันสามารถยืนยันได้ว่าไอคอน 32px ทำงานได้ดีกับ data_pack.py ฉันแก้ไขตัวอย่างที่คุณโพสต์ลงในบัญชีสำหรับไอคอนการแจ้งเตือนทั้งหมด ฉันหวังว่าคุณจะไม่รังเกียจ
Glutanimate

1
FWIW คุณสามารถใช้วิธีนี้เพื่อลบตัวบ่งชี้ได้อย่างสมบูรณ์โดยไม่ต้องปิดการใช้งานระบบการแจ้งเตือน (เช่นaskubuntu.com/a/473416/81372 )
Glutanimate

เพื่อนฉันจะมีความสุขถ้าคุณทำความสะอาดกวดวิชาเล็กน้อย ... จำเป็นต้องมีการปรับเปลี่ยน data.py ทั้งหมดหรือไม่? ฉันสับสนเล็กน้อย ไม่มีความผิดหมายความว่าฉันแค่ต้องการติดตาม
deckoff

1
แฮ็คที่ดี เพียงเพิ่มคุณสามารถหาไอคอนเพิ่มเติมได้ที่นี่แล้วyouounproject.com/search/?q=bell
gc5

ด้วย Chrome 36+ ตอนนี้ไอคอนคือ 6894 ... 6897
gc5

8

แก้ไข:

node-chrome-pakดูเหมือนว่าปัญหาอยู่กับ rocketman10404's แก้ไขแล้วdata_pack.pyทำงานได้ดีแม้จะมีไอคอน 32px:

ป้อนคำอธิบายรูปภาพที่นี่

โปรดใช้คำแนะนำของเขาแทน


คำตอบเดิม :

คำตอบที่ยอดเยี่ยมของ @ rocketman10404 นำฉันไปสู่node-chrome-pakซึ่งเป็นสคริปต์ node.js ที่สามารถแพ็คแกะและแทนที่ทรัพยากรเฉพาะใน.pakไฟล์ของ Chrome / ium

แม้ว่าฉันจะสามารถแทนที่ไอคอนการแจ้งเตือนchrome_100_percent.pakด้วยเครื่องมือนี้ได้ แต่ฉันต้องรายงานว่าฉันไม่สามารถทำการเปลี่ยนแปลงได้ ถึงกระนั้นฉันคิดว่ามันคุ้มค่ากับความพยายามที่จะร่างขั้นตอนที่ฉันทำเพื่อรับประเด็นนี้ หวังว่าคนอื่นจะใช้เวลานี้และหาวิธีที่จะทำให้มันใช้งานได้จริง

การติดตั้ง node.js

node-chrome-pakจะต้องใช้ node.js เพื่อรัน คุณสามารถติดตั้งเวอร์ชันล่าสุดโดยเพิ่ม nodejs PPA ของ Chris Lea:

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การกระทำที่ผ่านมาจะได้สร้างโฟลเดอร์ใหม่ที่เรียกว่า ในนั้นคุณจะพบทรัพยากรทั้งหมดที่มีอยู่ในไฟล์ปาก พวกเขาถูกตั้งชื่อตาม ID ทรัพยากรของพวกเขา คุณจะต้องรักษาชื่อนี้ไว้เพราะมันเป็นสิ่งสำคัญสำหรับการบรรจุไฟล์ใหม่

ตอนนี้ส่วนที่ยากอยู่ในการระบุไอคอนที่ถูกต้อง ถ้าฉันไม่ผิดอย่างสมบูรณ์ไฟล์ต่อไปนี้ควรเป็นไฟล์ที่ใช้ใน systray:

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

เมื่อระบุไอคอนที่คุณต้องการแล้วคุณสามารถทำการแก้ไขและแทนที่พวกเขาได้ หากคุณต้องการคุณสามารถใช้ไอคอนที่ฉันสร้างขึ้นเพื่อจุดประสงค์นี้:

      

      

แฟ้มแหล่งที่มาและส่งออก.pngในความละเอียดที่แตกต่างกันเป็นเจ้าภาพมากกว่าที่GitHub

มาที่นี่ครั้งแรกข้อ จำกัด ที่ฉันพบ: ถ้าคุณแทนที่ไอคอนที่มีภาพในความละเอียดใด ๆ ที่สูงขึ้นกว่าเดิม Google Chrome จะได้รับความเสียหายและหยุดการทำงานอย่างถูกต้อง สำหรับโครงการนี้คุณจะต้องใช้ความละเอียด 16x16 ในกรณีนี้หมายความว่าคุณจะไม่สามารถปรับปรุงไอคอนระบบ systray ปัจจุบันได้อย่างมีนัยสำคัญแม้ว่าคุณจะต้องใช้วิธีการนี้ก็ตาม

แน่นอนว่ามีความเป็นไปได้ที่ข้อ จำกัด นี้ได้รับการแนะนำโดยวิธี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ไฟล์ที่ถูกแก้ไข(โดยการแกะอีกครั้ง) ฉันยังคงไม่สามารถแทนที่ไอคอนจริงใน systray

น่าเสียดายที่ฉันไม่รู้ว่าทำไมถึงเป็นแบบนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.