Bagaimana mencegah aplikasi Java membuat ikon baki?

16

Dengan Ubuntu 13.04 kemungkinan untuk membuat daftar putih (dan akibatnya membuat daftar hitam) aplikasi tertentu dari membuat ikon baki hilang. Sejak saat itu ikon baki aplikasi Java dan ikon Wine di-hardcode dan selalu terlihat.

Meskipun ada beberapa ppas tertentu, yang menyediakan tambalan kesatuan dengan mengembalikan systray.whitelist (belum untuk 14,04), saya ingin tahu apakah ada cara lain untuk menyembunyikan baki-ikon aplikasi java (mis. JDownloader)

Saya tahu bahwa ada cara untuk melakukannya untuk aplikasi qt dengan menerapkan profil apparmor yang menolak akses baca ke paket sni-qt (misalnya untuk Skype, atau Spotify)

Apakah ada cara untuk mengimplementasikan profil apparmor atau yang serupa untuk aplikasi Java dan / atau aplikasi Wine?

Terima kasih

wa4557
sumber
1
Anda dapat mengakses ikon mereka, dan mengubahnya menjadi transparan dan kecil, sehingga hampir tidak memakan ruang dan tidak terlihat?
Tim
2
Ide bagus, tapi tidak. Tempat 16x16 tampaknya dicadangkan untuk aplikasi java. Dengan mengubah ke svg 1px yang tidak terlihat, ikon masih 16x16 tidak transparan
wa4557
1
OK, itu memalukan ...
Tim

Jawaban:

2

Untuk Aplikasi Java:

  • Sebenarnya untuk kasus JDownloader, Ini desain modular. Ikon baki datang sebagai plugin yang dapat dinonaktifkan dari:

    JDownloader → Addons → Addon Manager → Extensions → Hapus centang Aktifkan kotak untuk JD Light Tray

  • Untuk kasus umum aplikasi Java, Dimungkinkan untuk menggunakan manajer keamanan Java dengan menulis aturan kebijakan khusus.

    1. Buat java.policyfile dalam ~/.jdownloaderberisi:

      grant codeBase "file:/home/user/.jdownloader/-" {
      
      // full access
      //    permission java.security.AllPermission;
      
      // AWTPermission full or only selected elements from it
      //    permission java.awt.AWTPermission "*";
      
          permission java.awt.AWTPermission "accessClipboard";
          permission java.awt.AWTPermission "accessEventQueue";
      //    permission java.awt.AWTPermission "accessSystemTray";
          permission java.awt.AWTPermission "createRobot";
          permission java.awt.AWTPermission "fullScreenExclusive";
          permission java.awt.AWTPermission "listenToAllAWTEvents";
          permission java.awt.AWTPermission "readDisplayPixels";
          permission java.awt.AWTPermission "replaceKeyboardFocusManager";
          permission java.awt.AWTPermission "setAppletStub";
          permission java.awt.AWTPermission "setWindowAlwaysOnTop";
          permission java.awt.AWTPermission "showWindowWithoutWarningBanner";
          permission java.awt.AWTPermission "toolkitModality";
          permission java.awt.AWTPermission "watchMousePointer";
      
      // Added by try and learn
          permission java.io.FilePermission "/-", "read,write,delete";
          permission java.util.PropertyPermission "*", "read,write";
          permission java.util.logging.LoggingPermission "control";
          permission java.lang.RuntimePermission "*";
          permission java.net.NetPermission "*";
          permission java.security.SecurityPermission "*";
          permission javax.net.ssl.SSLPermission "*";
          permission java.net.SocketPermission "*", "connect,resolve";
          permission java.lang.reflect.ReflectPermission "*";
      };
    2. Ubah jdownloaderskrip peluncuran untuk menggunakan kebijakan khusus

      sudo nano /usr/bin/jdownloader

      Tambahkan: -Djava.security.manager -Djava.security.policy=java.policyke panggilan perintah java:

      exec java ${JAVA_OPTIONS}  -Djava.security.manager -Djava.security.policy=java.policy -jar JDownloader.jar $*

Ini adalah aturan minimum yang memungkinkan saya untuk meluncurkan jdownloader. Anda mungkin perlu menambahkan lebih banyak izin. Karena tidak ada denypilihan Anda harus menulis semua grantaturan yang diperlukan .

Referensi:

BTW, cobalah mengomentari salah satu aturan dengan menambahkan //ke awal baris; Jadi, Anda dapat melihat bagaimana kesalahan dari izin yang ditolak terlihat. Ini memberi tahu Anda izin mana yang harus Anda tambahkan. Juga perhatikan bahwa saya telah menggunakan banyak -& *mencoba untuk memperluas aturan karena saya mencari solusi cepat (standarnya AllPermissionsih) dan saya tidak mencari untuk memenjarakan aplikasi.

Ini adalah templat untuk memulai, mencoba memberikan semua izin yang mungkin:

grant codeBase "file:/home/user/.jdownloader/-" {

//    permission java.security.AllPermission;

//    permission java.awt.AWTPermission "*";

    permission java.awt.AWTPermission "accessClipboard";
    permission java.awt.AWTPermission "accessEventQueue";
//    permission java.awt.AWTPermission "accessSystemTray";
    permission java.awt.AWTPermission "createRobot";
    permission java.awt.AWTPermission "fullScreenExclusive";
    permission java.awt.AWTPermission "listenToAllAWTEvents";
    permission java.awt.AWTPermission "readDisplayPixels";
    permission java.awt.AWTPermission "replaceKeyboardFocusManager";
    permission java.awt.AWTPermission "setAppletStub";
    permission java.awt.AWTPermission "setWindowAlwaysOnTop";
    permission java.awt.AWTPermission "showWindowWithoutWarningBanner";
    permission java.awt.AWTPermission "toolkitModality";
    permission java.awt.AWTPermission "watchMousePointer";


    permission javax.sound.sampled.AudioPermission "*";
    permission javax.security.auth.AuthPermission "*";
//    permission javax.security.auth.kerberos.DelegationPermission "";
    permission javax.xml.bind.JAXBPermission "*";
    permission java.nio.file.LinkPermission "hard";
    permission java.nio.file.LinkPermission "symbolic";
    permission java.util.logging.LoggingPermission "control";
//    permission java.lang.management.ManagementPermission "*";
    permission javax.management.MBeanServerPermission "*";
    permission javax.management.MBeanTrustPermission "*";
    permission java.net.NetPermission "*";
    permission java.util.PropertyPermission "*", "read,write";
    permission java.lang.reflect.ReflectPermission "*";
    permission java.lang.RuntimePermission "*";
    permission java.security.SecurityPermission "*";
    permission java.io.SerializablePermission "*";
    permission java.sql.SQLPermission "*";
    permission javax.net.ssl.SSLPermission "*";
    permission javax.management.remote.SubjectDelegationPermission "*";
    permission javax.xml.ws.WebServicePermission "*";
//    permission  "*";

    permission java.io.FilePermission "/-", "read,write,execute,delete,readlink";
    permission javax.management.MBeanPermission "*", "*";
//    permission javax.security.auth.PrivateCredentialPermission "", "read";
    permission javax.security.auth.kerberos.ServicePermission "*", "initiate,accept";
    permission java.net.SocketPermission "*", "accept,connect,listen,resolve";
    permission java.net.URLPermission "*";
};

Catatan :

Java Policy Tools adalah alat GUI untuk mengedit file kebijakan. Itu membuatnya lebih mudah untuk mengetahui semua opsi yang tersedia dari drop box. Seharusnya sudah menginstal dengan paket Java.

masukkan deskripsi gambar di sini

user.dz
sumber
1

Meskipun jawaban Sneetshers sempurna, saya menemukan solusi yang lebih sederhana (dan jelas). Pendekatan ini berfungsi dengan JDownloader, tetapi juga harus bekerja dengan semua program Java lainnya.

Hapus saja logo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.pngdan kemudian buat ikon png yang tidak valid dengantouch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Dengan menggunakan pendekatan ini, seseorang masih dapat menggunakan plugin TrayIcon (berguna untuk meminimalkan ke baki) tanpa ikon java jelek

wa4557
sumber
0

Karena saya tidak melihat solusi yang lebih baik, mungkin ini akan membantu:

Anda bisa menyingkirkan nampan sama sekali!

  • menonaktifkannya, jika mungkin
  • atau ganti seluruh panel dengan yang lain yang dapat Anda konfigurasi secara manual, hanya saja tidak menambahkan elemen baki. (Saya suka xfce4-panelhal-hal semacam ini)

Jika Anda akan kehilangan fitur berbasis baki sekarang, sebagian besar harus dapat diganti kasus demi kasus, seperti skrip yang menampilkan pemberitahuan desktop pada beberapa acara.

Volker Siegel
sumber
1
Ok terima kasih, tapi ini jelas bukan yang saya inginkan. Saya suka baki persatuan, saya hanya tidak suka beberapa ikon baki
wa4557
1
Ya, itu lebih merupakan kesempatan dalam gelap, dalam hal mengetahui penggunaan dasar Anda. Untuk mesin bergaya 'alat', jalankan satu aplikasi tetap, ditambah bilah desktop hanya untuk menu dasar. metodenya bahkan akan bekerja :) [Tapi saya ingat saya pernah melihat pesan dari beberapa program yang menolak untuk memulai tanpa panel ...]
Volker Siegel
0

Jika Anda ingin semua aplikasi yang menggunakan ikon baki untuk dapat memanfaatkannya di Ubuntu 14.04, Anda dapat menggunakan PPA yang disertakan dengan Unity patched untuk mengaktifkan kembali daftar putih systray. Untuk melakukan ini, buka terminal dan jalankan perintah berikut:

sudo add-apt-repository ppa:gurqn/systray-trusty
sudo apt-get update
sudo apt-get upgrade

Kemudian, restart Unity dengan menekan ALT + F2 dan memasukkan "unity" atau dengan logout. PPA sekarang secara otomatis memasukkan daftar putih semua aplikasi sehingga tidak perlu secara manual membuat daftar putih masing-masing aplikasi untuk dapat menggunakan systray.

Mengembalikan perubahan

Jika Anda ingin mengembalikan perubahan dan kembali ke paket Unity default dari repositori Ubuntu, gunakan perintah di bawah ini untuk membersihkan PPA daftar putih whystist Unity:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:gurqn/systray-trusty

Dari http://www.webupd8.org/2013/05/how-to-get-systray-whitelist-back-in.html

anonamo
sumber
1
Selamat Datang di Tanya Ubuntu Stak Exchange! Harap sertakan bagian penting tautan dalam jawaban Anda untuk mencegah kerusakan setelah tautan mati.
enedil
2
Itu daftar putih global, yang berarti bahwa semua program masuk daftar putih. Program-program daftar hitam (seperti anggur dan program-program Jawa) adalah kebalikannya dan tidak bekerja dengan versi persatuan ini juga
wa4557