web-dev-qa-db-fra.com

Comment empêcher les applications Java de créer une icône de barre des tâches?

Avec Ubuntu 13.04, la possibilité d’ajouter à la liste blanche (et donc à la liste noire) certaines applications de la création d’une icône de barre des tâches a disparu. Depuis lors, les icônes de la barre des applications Java et des icônes Wine sont codées en dur et sont toujours visibles.

Bien qu'il existe certains ppas, ils fournissent un patch d'unité en rendant la liste systray.whitelist (pas pour le 14.04 cependant), j'aimerais savoir s'il existe d'autres moyens de masquer les icônes de la barre d'état de Java applications (par exemple, JDownloader)

Je sais qu'il est possible de le faire pour qt-applications en implémentant des profils apparmor qui refusent l'accès en lecture au paquetage sni-qt (par exemple pour Skype ou Spotify).

Existe-t-il un moyen d'implémenter des profils apparmor ou quelque chose de similaire pour les applications Javaet/ou Wine?

merci

16
wa4557

Bien que la réponse de Sneetshers soit parfaite, j'ai découvert une solution plus simple (et évidente). Cette approche fonctionne avec JDownloader, mais devrait également fonctionner avec tous les autres programmes Java.

Supprimez simplement le logo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.png et créez ensuite une icône png non valide avec touch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png.

En utilisant cette approche, on peut toujours utiliser le plugin TrayIcon (utile pour réduire au minimum dans le plateau) sans l'icône laide Java

1
wa4557

Pour Java Apps:

  • En fait, pour le boîtier JDownloader, il s’agit d’une conception modulaire. L'icône de la barre des tâches se présente sous la forme d'un plugin pouvant être désactivé à partir de:

    JDownloader → Modules → Gestionnaire d’addons → Extensions → Décocher Activer la case pour JD Light Tray

  • Pour le cas général des applications Java, il est possible d'utiliser le gestionnaire de sécurité Java en écrivant des règles de stratégie personnalisées.

    1. Créer le fichier Java.policy dans ~/.jdownloader contient:

      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. Modifier le script de lancement jdownloader pour utiliser la stratégie personnalisée

      Sudo nano /usr/bin/jdownloader
      

      Ajoutez: -Djava.security.manager -Djava.security.policy=Java.policy à Java appel de commande:

      exec Java ${Java_OPTIONS}  -Djava.security.manager -Djava.security.policy=Java.policy -jar JDownloader.jar $*
      

Ce sont les règles minimales qui m'ont permis de lancer jdownloader. Vous devrez peut-être ajouter d'autres autorisations. Comme il n'y a pas d'option deny, vous devez écrire toutes les règles grant nécessaires.

Références:

BTW, essayez de commenter l'une des règles en ajoutant // au début de la ligne; Vous pouvez donc voir à quoi ressemble l'erreur des autorisations refusées. Il vous indique quelle permission vous devez ajouter. Notez également que j’ai utilisé de nombreuses - & * pour essayer d’étendre les règles car je cherchais une solution rapide (_ était par défaut AllPermission de toute façon) et je ne cherchais pas à emprisonner le application.

Voici un modèle pour commencer, en essayant d’accorder toutes les autorisations possibles:

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 "*";
};

Remarque :

Java Policy Tools est un outil graphique permettant de modifier les fichiers de stratégie. Il est plus facile de trouver toutes les options disponibles dans la boîte de dépôt. Il devrait déjà être installé avec le package Java.

enter image description here

2
user.dz

Comme je ne vois pas de solution évidente, il est possible que cela aide:

Vous pourriez vous débarrasser complètement du plateau!

  • soit le désactiver, si possible
  • ou remplacez tout le panneau par un autre que vous pouvez configurer manuellement, sans ajouter d'élément de plateau. (J'aime bien xfce4-panel pour ce genre de choses)

Si vous manquez maintenant des fonctionnalités basées sur les bacs, la plupart devraient être remplaçables au cas par cas, comme un script affichant des notifications de bureau pour certains événements.

0
Volker Siegel

Si vous souhaitez que toutes les applications qui utilisent une icône de barre d'état puissent l'utiliser dans Ubuntu 14.04, vous pouvez utiliser un PPA fourni avec Unity corrigé pour réactiver la liste blanche de la barre des tâches. Pour ce faire, ouvrez un terminal et exécutez les commandes suivantes:

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

Ensuite, redémarrez Unity en appuyant sur ALT + F2 et en entrant "Unity" ou en vous déconnectant. Le PPA ajoute désormais automatiquement la liste blanche à toutes les applications. Il n'est donc pas nécessaire de répertorier manuellement les applications individuelles pour pouvoir utiliser le système.

Annulation des modifications

Si vous souhaitez annuler les modifications et revenir aux packages Unity par défaut à partir des référentiels Ubuntu, utilisez les commandes ci-dessous pour purger le fichier PPA de la liste blanche de la liste des systèmes Unity:

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

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

0
anonamos