Bagaimana saya bisa menghapus ikon duplikat untuk program java "diluncurkan" di peluncur?

45

Saat meluncurkan program java (seperti IntelliJ IDEA dan Crashplan) di Natty's Unity launcher, ikon duplikat ditampilkan (lihat gambar). Untuk IntelliJ saya membuat file .desktop, untuk Crashplan file .desktop disertakan dengan aplikasi. Apakah ada sesuatu yang dapat diubah di file .desktop (atau di tempat lain) yang dapat mencegah hal ini terjadi? Saya tidak dapat menemukan laporan bug untuk persatuan itu sendiri tetapi program-program seperti Gnome-Do / Docky memiliki laporan bug dan harus membuat perubahan internal pada aplikasi mereka untuk mencegah hal ini.

Ikon GandakanDalam gambar ini ikon 1 adalah yang dibuat dari file .desktop dan ikon kedua adalah setelah meluncurkannya. Ikon kedua hilang saat menutup aplikasi.

File .desktop IntelliJ khusus

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[en_US]=/opt/idea/bin/idea128.png
Name[en_US]=IntelliJ IDEA
Exec=/opt/idea/bin/idea.sh
Name=IntelliJ IDEA
Icon=/opt/idea/bin/idea128.png
StartupNotify=true

Crashplan menyediakan file .desktop

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=CrashPlan
Categories=;
Comment=CrashPlan Desktop UI
Comment[en_CA]=CrashPlan Desktop UI
Exec=/usr/local/crashplan/bin/CrashPlanDesktop
Icon=/usr/local/crashplan/skin/icon_app_64x64.png
Hidden=false
Terminal=false
Type=Application
GenericName[en_CA]=
Tim
sumber
1
Saya mengalami masalah serupa ketika meluncurkan Minecraft in Unity
Marco Ceppi
2
Terima kasih Tuhan masalahnya akan mempengaruhi pengguna utama (dulu hanya masalah bagi AWN dan penggemar dock lainnya) akhirnya. Saya harap pengembang aplikasi Java (dan bukan hanya Java) akan mempertimbangkan untuk memperbaikinya sekarang. Omong-omong, Eclipse tampaknya tidak memiliki masalah seperti itu, sementara saya belum pernah berhasil memperbaikinya untuk MySQL Workbench dan OpenOffice.org (dicoba ketika saya menggunakan AWN, sebelum LibreOffice muncul).
Ivan
Masalahnya adalah tentang aplikasi untuk menggunakan nama WM_CLASS bodoh yang tidak dapat diidentifikasi sejauh yang saya ingat.
Ivan
Jika tidak ada masalah seperti itu, saya pasti akan menggunakan Unity atau AWN. Tapi sejauh tidak semua aplikasi mendukung mereka dengan sempurna, saya lebih suka taskbar tradisional (karena saya benci setengah solusi).
Ivan

Jawaban:

47

Tambahkan string StartupWMClass ke file .desktop Anda. Gunakan xpropperintah untuk mendapatkan kelas ini. Sebagai contoh :

$ xprop|grep WM_CLASS
 WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"

$ cat /usr/share/applications/PHPStorm.desktop | grep StartupWM
StartupWMClass=sun-awt-X11-XFramePeer

Lebih banyak deatils di utas ini (ini tentang AWN, tetapi juga berlaku untuk Unity)

451F
sumber
1
Ini berfungsi baik untuk Crashplan StartupWMClass=CrashPlantetapi IntelliJ perlu sedikit lebih meyakinkan. Saya harus menggunakan info dari ini ( blog.jteam.nl/2011/01/09/… ) untuk membuatnya berfungsi dengan baik.
Tim
Sebagai tambahan kecil untuk memperbarui IntelliJ saya memodifikasi ide.vmoptions bukan skrip idea.sh secara langsung. Tambahkan -javaagent:agent.jar=IntelliJ_IDEAke file.
Tim
1
Dengan IntelliJ 11, agent.jar tidak lagi diperlukan. StartupWMClass = jetbrains-idea
Tim
Dan jetbrains-idea-ceuntuk Edisi Komunitas. PS, terima kasih banyak Tim, 451F.
Synesso
2
@Van: Anda tidak harus menggunakan keduanya, Anda bisa menggunakan keduanya . Jadi jika jetbrains-ideaadalah salah satu yang unik, yang Anda inginkan, menggunakannya sebagai pengganti darisun-awt-X11-XFramePeer
MestreLion
9

Untuk Intellij Idea 11 di bawah Ubuntu 11.10 perlu ditambahkan di file .desktop ide berikut:

StartupWMClass=jetbrains-idea
topr
sumber
4

Saya dapat memperbaiki ini untuk SQLDeveloper, yang merupakan program java:

Menggunakan xprop (dan kemudian mengklik pada jendela SQLDeveloper), saya menemukan baris output berikut:

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "oracle-ide-boot-Launcher"

Berdasarkan komentar yang ditemukan di atas dan di https://bugs.launchpad.net/unity/+bug/757991 , saya menambahkan baris berikut ke file sqldeveloper.desktop lokal saya:

StartupWMClass=oracle-ide-boot-Launcher
Corey
sumber
1
Dalam SQLDeveloper versi 4 WM_CLASS berubah menjadi "sun-awt-X11-XFramePeer", "oracle-ide-osgi-boot-OracleIdeLauncher", sehingga parameter .desktop harus diubah menjadi: StartupWMClass = oracle-ide-osgi-boot-OracleIdeLauncher
Pisu
2

Saya telah mendokumentasikan perbaikan untuk Eclipse 4.x dan 3.x di sini .

Solusi ini untuk glx-dock alias Cairo-dock tetapi berfungsi untuk semua bilah tugas yang diandalkan WM_CLASS.

Dalam kasus gerhana, peluncuran adalah proses dua langkah juga.

        masukkan deskripsi gambar di sini

Pada dasarnya, yang perlu Anda lakukan adalah mengidentifikasi Eclipse branding plugin.xml yang berlaku untuk versi Eclipse Anda dan memodifikasi application nameproperti. Ketika jendela utama meja kerja dibuat, Jface akan memanggil SWT Display.setNamedan ini akan membuat Anda WM_CLASS. Jika ini adalah WM_CLASS yang dideklarasikan untuk launcher Anda, maka instance yang berjalan akan menemukan launcher dock mereka.

Jangan lupa lakukan eclipse -cleanpada saat pertama.

Menabrak juga jauh lebih baik.

masukkan deskripsi gambar di sini

Menghapus
sumber
0

IntelliJ IDEA dimulai dengan skrip ($ IDEA_HOME / bin / idea.sh). Ketika peluncurnya diklik, skrip dieksekusi, yang memulai eksekusi java dan segera keluar. Unity pemberitahuan bahwa aplikasi yang Anda mulai (skrip) sudah keluar - itu sebabnya tidak ada indikator pada ikon IDEA pertama. Namun, ada aplikasi lain (dari yang dapat dijalankan dimulai oleh peluncur) yang sedang berjalan saat ini - dan itulah sebabnya ikon IDEA kedua ditampilkan.

Saya berharap perbaikan untuk perilaku ini akan segera diimplementasikan - tetapi ini tidak langsung. Itu harus melibatkan daftar asosiasi yang dipelihara dengan tangan antara jendela dan peluncur yang harus dikaitkan.

Aneh di bawah ini
sumber
0

Untuk CrashPlan, Anda dapat mencoba memindahkan file aplikasi CrashPlan.desktop ke / usr / share / aplikasi. Hanya aplikasi yang tinggal di sana yang bisa dikunci ke peluncur.

sudo mv ~/Desktop/CrashPlan.desktop /usr/share/applications/.

Kemudian coba gunakan tanda hubung untuk menjalankan CrashPlan.

Anda mungkin dapat melakukan sesuatu yang mirip dengan IntelliJ IDEA, tetapi karena menjalankan skrip, saya tidak yakin apakah itu akan berfungsi dengan benar.

idbrii
sumber
Saya memiliki kedua file .desktop di ~ / .local / share / aplikasi dan tidak memiliki masalah mengunci mereka ke peluncur. Saya berasumsi bahwa Anda berarti tersedia untuk diluncurkan dari Launcher tetapi belum diluncurkan ketika Anda mengatakan terkunci ...
Tim
Hm Saya tidak dapat menempatkannya di peluncur. Saya membuat milik saya dengan alacarte (Menu Editor). Mungkin itu karena saya telah ~ / .lokal ditautkan ke tempat lain ... Apakah aplikasi Anda menampilkan segitiga berjalan (sisi kiri) dan segitiga aktif (sisi kanan)?
idbrii
Untuk ikon versi "diluncurkan", ya. Anda dapat melihat lari segitiga di tembakan pertama. Saya melakukan penelitian lebih lanjut dan berpikir saya memiliki solusi untuk ikon duplikat. Akan memposting jawaban di sini.
Tim
@ 451F mengalahkan saya pada jawaban, saya menambahkan sedikit pada jawabannya dalam komentar saya tentang bagaimana membuat IntelliJ bekerja lebih baik.
Tim
0

Tidak ada jawaban lain yang bekerja untuk saya, tetapi pada akhirnya saya benar-benar menemukan solusi yang lebih sederhana.

Buka Intellij-Idea, dan pada bilah atas temukan menu dropdown alat . Kemudian, pilih tombol Create Desktop Entry . Ini akan membuat entri .desktop yang berfungsi dengan baik di .local/share/applicationsfolder Anda , yang seharusnya dikenali oleh lingkungan desktop apa pun yang Anda gunakan. Itu tidak membuat ikon duplikat, dan Anda bahkan dapat mengubah ikon jika Anda mau.

Sayangnya, menggunakan nosplashargumen mengembalikan masalah ikon duplikat, jadi saya tidak yakin bagaimana cara memperbaikinya.

rins
sumber
0

Setelah menginstal IntelliJ IDEA 2017.2.5 di bawah Ubuntu 17.04 (dengan ikon Numix) saya harus mengubah baris StartupWMClass=jetbrains-ideake StartupWMClass=jetbrains-idea-cedalam file .desktop program sehingga ikon duplikat akan hilang.

Saya kira "ce" adalah singkatan dari Community Edition yang saya miliki, jadi saya tidak tahu mengapa nilai properti ini dalam file .desktop pada awalnya tidak memiliki akhiran "ce".

tom
sumber