Bagaimana saya bisa mengganti ikon pemberitahuan resolusi rendah Google Chrome?

15

Google Chrome baru-baru ini ditingkatkan ke versi 35.0.1916.114 pada instalasi Ubuntu 14.04 saya.

Sejak itu ikon pemberitahuan mulai muncul di baki sistem. Namun tampaknya itu menggunakan ikon resolusi rendah - terlihat terdistorsi:

masukkan deskripsi gambar di sini

Bagaimana saya bisa memperbaiki / menggantinya?

fabiomaia
sumber
1
Ikon disimpan di /usr/share/icons, jika itu membantu
MrVaykadji
@MrVaykadji: Terima kasih atas bantuannya! Saya mencari di bawah direktori itu tetapi saya tidak dapat menemukan ikon pemberitahuan Google Chrome. Saya menduga mereka berada di direktori yang berbeda.
fabiomaia
1
mungkin /opt? Di situlah google binari diinstal.
MrVaykadji
2
Sial. Dan Google-Chrome bukan open source, jadi jika ini adalah kode-keras (artinya di dalam binari), Anda tidak akan dapat mengubah ikon itu. Mungkin Anda dapat mencoba melihat semua file yang memiliki "chrome" di namanya, catfishmisalnya, atau metode lain yang memungkinkan Anda mencari di seluruh disk.
MrVaykadji
1
Ikon pemberitahuan ini salah dalam setidaknya 3 poin: tidak menghormati preferensi pengguna; itu tidak menghormati warna Ubuntu; itu menggunakan resolusi yang sangat rendah.
Rael Gugelmin Cunha

Jawaban:

14

Sunting: lihat di bawah untuk pembaruan tentang penggantian ikon pemberitahuan

Jika binari chrome Anda dipasang di lokasi tipikal, Anda akan menemukannya /opt/google/chrome. Di folder itu Anda harus menemukan filechrome_100_percent.pak yang berisi ikon notifikasi. Inilah langkah-langkah yang saya gunakan untuk mengekstraknya, menggunakan informasi dari pertanyaan stack overflow ini :

  1. Periksa kode ke grit-i18n dengan

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

  2. Ini akan memberi Anda folder di CWD Anda yang disebut grit-i18n-read-only. CD ke dalam folder ini

    cd grit-i18n-read-only

  3. Salin modul data_pack python ke folder ini

    cp grit/format/data_pack.py .

  4. Edit data_pack.py dalam editor pilihan Anda. Setelah impor awal, tambahkan baris berikut:

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

  5. Menjelang akhir file dalam main fungsi, hapus baris

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

    (jawaban Stack Overflow menyatakan ini terjadi di baris 160, menurut pengalaman saya, versi saat ini ada di baris 201)

  6. Sebagai gantinya, masukkan baris berikut indentasi dengan benar (3 kali):

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

    file.write(text)

  7. Jalankan data_pack.pyutilitas pada file chrome pak (saya salin ke grit-i18n-read-onlyfolder terlebih dahulu):

    ./data_pack.py ../chrome_100_percent.pak

Ini akan menghasilkan banyak file baru di direktori saat ini, semua dinamai sebagai angka tanpa ekstensi. Peramban file Anda (misalnya nautilus) harus dapat menentukan jenis file dan menampilkan thumbnail gambar. Saya menemukan ikon pemberitahuan bernama 6866 & 6867.


Edit

Meskipun ada beberapa jawaban sederhana di bawah ini, saya berhasil meretas beberapa kode untuk mengemas ulang sumber daya yang dapat Anda coba setelah mengedit ikon. Ini akan menghasilkan yang baru.pak file , yang belum saya coba gunakan sendiri, jadi saya tidak bisa mengatakan dengan pasti ini akan berhasil menghasilkan ikon pemberitahuan baru.

Dalam fungsi utama data_pack.py, saya berkomentar semua kode di elseblok dan menambahkan baris berikut:

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

Kemudian, jalankan saja ./data_pack.py. Asumsi chrome_100_percent.pakini ada di direktori saat ini, dan akan memberi Anda chrome_100_percent_new.pakfile baru yang dapat Anda coba salin /opt/google/chrome/chrome_100_percent.pak.

Saya percaya beberapa ikon tambahan di pak sumber daya terkait dengan ikon pemberitahuan telah diidentifikasi; mengedit di atas untuk memasukkan mereka harus cukup mudah.


Edit Terakhir

Sekarang saya kembali ke rumah dan berkesempatan untuk mengerjakan ini lagi, saya berhasil mengganti ikon pemberitahuan chrome. Seperti yang dicatat oleh @Glutanimate, Anda terjebak dengan resolusi 16x16, jadi saya tidak yakin berapa banyak perbaikan yang dapat Anda capai, tapi saya rasa itu subjektif.

Saya hanya membuka ikon yang disebutkan di atas (6864 - 6867) di GIMP, yang mendeteksi mereka sebagai Grayscale PNGs. Saya menempelkan ikon baru ke file yang sama di GIMP, sehingga berusaha untuk menjaga properti gambar yang sama (misalnya skala abu-abu). Saya kemudian mengekspor ini sebagai PNG, tidak menandai SEMUA opsi yang ditawarkan GIMP tetapi mempertahankan tingkat kompresi 9. File yang dihasilkan memiliki ekstensi .png, jadi saya menghapusnya dan mengganti yang asli. Saya kemudian berlari kembali data_pack.py, setelah membuat modifikasi rinci di atas.

Saya menyimpan salinan cadangan pak asli mv /opt/google/chrome/chrome_100_percent.pak /opt/google/chrome/chrome_100_percent.bak dan memindahkan file .pak saya yang sudah dimodifikasi. Saya akan memastikan chrome ditutup saat melakukan ini, dan periksa kembali bahwa tidak ada proses chrome yang berjalan, dan saya percaya chrome memiliki pengaturan baru untuk memungkinkan proses latar belakang bahkan ketika browser ditutup secara default sekarang.

Lihatlah, ikon notifikasi saya di Unity mencerminkan perubahan saya.

Sunting Terakhir-Final: Oke, saya bohong - Saya mencoba PNG 32x32 dan sepertinya berfungsi dengan baik. Jadi, begitulah. Berikut beberapa screenshot hasil.

  • Ikon Asli: Anda mungkin akan mengenali ikon 'notifikasi belum dibaca' default di panel saya di sini antara dropbox saya dan ikon cuaca:

Ikon Asli

  • Ikon Baru: Versi saya yang dimodifikasi 32x32px di lokasi yang sama:

Ikon Baru

(Sumber: Ikon batch dari Adam Whitcroft)

rocketman10404
sumber
Terima kasih atas pembaruannya! Saya dapat mengonfirmasi bahwa ikon 32px berfungsi baik dengan data_pack.py. Saya memodifikasi cuplikan yang Anda poskan ke akun untuk semua ikon pemberitahuan. Saya harap kamu tidak keberatan.
Glutanimate
1
FWIW, Anda juga dapat menggunakan metode ini untuk menghapus indikator sepenuhnya tanpa menonaktifkan sistem pemberitahuan (lih. Askubuntu.com/a/473416/81372 ).
Glutanimate
Mate, saya akan senang jika Anda sedikit membersihkan tutorial ... Apakah semua modifikasi data.py diperlukan? Saya sedikit bingung. Bukan bermaksud tersinggung, saya hanya ingin mengikutinya.
deckoff
1
Retas yang bagus. Hanya untuk menambahkan, Anda dapat menemukan lebih banyak ikon di sini thenounproject.com/search/?q=bell
gc5
Dengan Chrome 36+ sekarang ikonnya adalah 6894 ... 6897
gc5
8

Edit:

Sepertinya masalah itu dengan node-chrome-pak. rocketman10404 yang dimodifikasi data_pack.pyberfungsi dengan baik, bahkan dengan ikon 32px:

masukkan deskripsi gambar di sini

Silakan gunakan instruksinya sebagai gantinya.


Jawaban asli :

Jawaban luar biasa @ rocketman10404 membawa saya ke node-chrome-pak , script node.js yang dapat mengemas, membongkar dan mengganti sumber daya tertentu dalam .pakfile Chrome / ium .

Meskipun saya telah berhasil mengganti ikon pemberitahuan chrome_100_percent.pakdengan alat ini, saya harus melaporkan bahwa saya tidak dapat membuat perubahan terlihat. Namun saya pikir perlu upaya untuk menguraikan langkah-langkah yang saya ambil untuk mendapatkan poin ini. Semoga orang lain akan mengambil ini dan menemukan cara untuk benar-benar membuatnya bekerja.

Menginstal node.js

node-chrome-pakakan membutuhkan node.js untuk dijalankan. Anda dapat menginstal versi terbaru dengan menambahkan NPA Chris Lea:

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

Mengunduh skrip dan membongkar sumber daya Chrome

Unduh skripnya:

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

Salin lokal Anda chrome_100_percent.pakke:

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

Buka paket .pakfile:

node ./main.js unpack chrome_100_percent.pak

Mengidentifikasi dan memodifikasi ikon notifikasi

Tindakan terakhir akan membuat folder baru bernama ./extracted. Di dalamnya Anda akan menemukan semua sumber daya yang terkandung dalam file pak. Mereka dinamai berdasarkan ID sumber daya mereka. Anda akan ingin mempertahankan nama ini karena penting untuk mengemas ulang file.

Bagian yang sulit sekarang terletak pada mengidentifikasi ikon yang benar. Jika saya tidak sepenuhnya salah, file-file berikut ini haruslah yang digunakan dalam systray:

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

Setelah mengidentifikasi ikon yang Anda cari, Anda dapat melanjutkan untuk memodifikasi dan menggantinya. Jika mau, Anda dapat menggunakan ikon yang saya buat untuk tujuan ini:

      

      

File sumber dan yang diekspor .pngdalam resolusi berbeda dihosting di GitHub .

Inilah batasan pertama yang saya temukan: Jika Anda mengganti ikon dengan gambar dalam resolusi lebih tinggi dari Google Chrome asli akan rusak dan berhenti bekerja dengan baik . Untuk proyek khusus ini Anda harus tetap dengan resolusi 16x16. Akibatnya ini berarti Anda tidak akan dapat meningkatkan ikon systray saat ini secara signifikan, bahkan jika Anda ingin agar metode ini berfungsi.

Tentu saja ada kemungkinan bahwa batasan ini diperkenalkan dengan cara node-chrome-pakdirancang. Dimungkinkan untuk mengganti ikon dengan yang lebih besar jika Anda membuat skrip python khusus berdasarkan jawaban @ rocketman10404.

Mengemas ulang sumber daya dan mengganti yang sudah ada

Setelah memodifikasi / mengganti ikon yang ada, Anda harus membuat pakfile yang diperbarui ...

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

... dan gunakan untuk mengganti yang sudah ada:

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

Inti dari metode ini

Dalam upaya saya, saya belum bisa membuat Chrome menampilkan ikon yang diperbarui. Bahkan jika saya memastikan bahwa semua ikon diganti dengan benar dan benar-benar ada dalam pakfile yang dimodifikasi (dengan membongkar lagi), saya masih tidak dapat mengganti ikon yang sebenarnya di systray.

Sayangnya saya tidak tahu mengapa ini terjadi.

Glutanimate
sumber