Comment empêcher les applications Java de créer une icône de barre d'état?

16

Avec Ubuntu 13.04, la possibilité de mettre sur liste blanche (et par conséquent sur liste noire) certaines applications de créer une icône de plateau a disparu. Depuis lors, les icônes de la barre des applications Java et les icônes Wine sont codées en dur et toujours visibles.

Bien qu'il existe certains ppas, qui fournissent un patch d'unité en redonnant la liste systray.whitelist (pas pour le 14.04 cependant), j'aimerais savoir s'il existe d'autres façons de masquer les icônes de plateau des applications java (par exemple JDownloader)

Je sais qu'il existe un moyen de le faire pour les applications qt en implémentant des profils d'apparmeur qui refusent l'accès en lecture au package sni-qt (par exemple pour Skype ou Spotify)

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

Merci

wa4557
la source
1
Vous pouvez accéder à leurs icônes et les modifier pour qu'elles soient transparentes et petites, de sorte qu'elles ne prennent presque pas de place et sont invisibles?
Tim
2
Bonne idée, mais non. La place 16x16 semble être réservée aux applications java. En changeant en un svg 1px invisible, on obtient toujours une icône 16x16 non transparente
wa4557
1
OK, c'est dommage ...
Tim

Réponses:

2

Pour les applications Java:

  • En fait pour le boîtier JDownloader, c'est une conception modulaire. L'icône de la barre des tâches est un plugin qui peut être désactivé à partir de:

    JDownloader → Modules complémentaires → Gestionnaire de modules complémentaires → Extensions → Décochez la case Activer pour JD Light Tray

  • Pour les applications Java cas général, il est possible d'utiliser le gestionnaire de sécurité Java en écrivant une règle de politique personnalisée.

    1. Créer un java.policyfichier dans ~/.jdownloadercontient:

      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 jdownloaderscript de lancement pour utiliser une stratégie personnalisée

      sudo nano /usr/bin/jdownloader

      Ajouter: -Djava.security.manager -Djava.security.policy=java.policyà l'appel de commande java:

      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. Parce qu'il n'y a pas d' denyoption, vous devez écrire toutes les grantrègles nécessaires .

Les 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 autorisation vous devez ajouter. Notez également que j'en ai utilisé beaucoup -et que *j'essaie d'étendre les règles car je cherche une solution rapide (par défaut c'était AllPermissionquand même) et je ne cherche pas à emprisonner l'application.

Voici un modèle pour commencer, 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 d'interface graphique pour modifier les fichiers de stratégie. Il est plus facile de découvrir toutes les options disponibles dans la boîte de dépôt. Il doit être déjà installé avec le package Java.

entrez la description de l'image ici

user.dz
la source
1

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.pnget créez ensuite une icône png non valide avectouch ~/.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 le plateau) sans l'icône java laide

wa4557
la source
0

Comme je ne vois pas de meilleures solutions évidentes, il est possible que cela aide:

Vous pourriez vous débarrasser du plateau tous ensemble!

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

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

Volker Siegel
la source
1
Ok merci, mais ce n'est évidemment pas ce que je voulais. J'aime l'unité-plateau, je n'aime pas certaines icônes de plateau
wa4557
1
Oui, c'était plus un coup dans le noir, en termes de connaissance de votre cas d'utilisation sous-jacent. Pour une machine de type «appareil», exécutez une application fixe, plus la barre de bureau pour les menus de base uniquement. la méthode fonctionnerait même :) [Mais je me souviens avoir vu une fois un message d'un programme refusant de commencer sans panneau ...]
Volker Siegel
0

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 patché pour réactiver la liste blanche de la barre d'état système. 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 "unité" ou en vous déconnectant. Le PPA met désormais automatiquement en liste blanche toutes les applications, il n'est donc pas nécessaire de mettre manuellement en liste blanche 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 des référentiels Ubuntu, utilisez les commandes ci-dessous pour purger la liste blanche PPA de la liste système Unity:

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

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

anonamos
la source
1
Bienvenue sur Ask Ubuntu Stak Exchange! Veuillez inclure une partie essentielle du lien dans votre réponse pour éviter de casser la publication après la mort du lien.
enedil
2
C'est une liste blanche globale, ce qui signifie que tous les programmes sont sur liste blanche. Les programmes de mise sur liste noire (comme les programmes wine et Java) sont tout le contraire et ne fonctionnent pas non plus avec cette version d'unité
wa4557