Wie kann ich verhindern, dass Java-Anwendungen Tray-Symbole erstellen?

16

Mit Ubuntu 13.04 ist die Möglichkeit, bestimmte Anwendungen von der Erstellung eines Tray-Icons aus auf die Whitelist (und damit auf die Blacklist) zu setzen, weggefallen. Seitdem sind die Taskleistensymbole von Java-Anwendungen und Wine-Symbole fest codiert und immer sichtbar.

Obwohl es bestimmte ppas gibt, die einen Unity-Patch bereitstellen, indem sie die systray.whitelist zurückgeben (allerdings noch nicht für 14.04), würde ich gerne wissen, ob es andere Möglichkeiten gibt, die Tray-Icons von Java-Apps auszublenden (z. B. JDownloader).

Ich weiß, dass es für qt-Anwendungen eine Möglichkeit gibt, Apparmor-Profile zu implementieren, die den Lesezugriff auf das sni-qt-Paket verweigern (z. B. für Skype oder Spotify).

Gibt es eine Möglichkeit, Apparmor-Profile oder ähnliches für Java- und / oder Wine-Anwendungen zu implementieren?

Vielen Dank

wa4557
quelle
1
Sie könnten auf ihre Symbole zugreifen und sie so ändern, dass sie transparent und klein sind, sodass sie fast keinen Platz einnehmen und unsichtbar sind.
Tim
2
Gute Idee, aber nein. Der Platz 16x16 scheint für Java-Anwendungen reserviert zu sein. Wenn man zu einer unsichtbaren 1px-Svg wechselt, erhält man immer noch ein nicht transparentes
16x16-
1
OK, das ist eine Schande ...
Tim

Antworten:

2

Für Java Apps:

  • Eigentlich für JDownloader Fall ist es ein modularer Aufbau. Das Tray Icon ist ein Plugin, das deaktiviert werden kann unter:

    JDownloader → Addons → Addon-Manager → Erweiterungen → Deaktivieren Sie das Kontrollkästchen " Aktivieren " für JD Light Tray

  • Im allgemeinen Fall von Java-Anwendungen können Sie den Java-Sicherheitsmanager verwenden, indem Sie benutzerdefinierte Richtlinienregeln schreiben.

    1. java.policyDatei erstellen in ~/.jdownloaderenthält:

      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. Ändern Sie jdownloaderdas Startskript, um die benutzerdefinierte Richtlinie zu verwenden

      sudo nano /usr/bin/jdownloader

      Hinzufügen: -Djava.security.manager -Djava.security.policy=java.policyzu Java-Befehlsaufruf:

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

Dies sind die Mindestregeln, nach denen ich jdownloader starten konnte. Möglicherweise müssen Sie weitere Berechtigungen hinzufügen. Da es keine denyOption gibt, müssen Sie alle erforderlichen grantRegeln schreiben .

Verweise:

Übrigens: Versuchen Sie, eine der Regeln zu kommentieren, indem Sie //sie am Zeilenanfang einfügen. So können Sie sehen, wie der Fehler verweigerter Berechtigungen aussieht. Hier erfahren Sie, welche Berechtigung Sie hinzufügen sollten. Beachten Sie auch, dass ich viele Regeln verwendet -und *versucht habe, diese zu erweitern, da ich nach einer schnellen Lösung suche (die Standardeinstellung war AllPermissionsowieso) und die Anwendung nicht ins Gefängnis bringen möchte.

Hier ist zunächst eine Vorlage, die versucht, alle möglichen Berechtigungen zu erteilen:

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

Hinweis :

Java Policy Tools ist ein GUI-Tool zum Bearbeiten von Richtliniendateien. Dies macht es einfacher, alle verfügbaren Optionen in der Dropbox zu finden. Es sollte bereits mit Java-Paket installiert sein.

Bildbeschreibung hier eingeben

user.dz
quelle
1

Obwohl Sneetshers Antwort perfekt ist, habe ich eine einfachere (und naheliegende) Lösung gefunden. Dieser Ansatz funktioniert mit JDownloader, sollte aber auch mit allen anderen Java-Programmen funktionieren.

Entfernen Sie einfach das Logo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.pngund erstellen Sie anschließend ein ungültiges PNG-Symbol mittouch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Mit diesem Ansatz kann das TrayIcon-Plugin (nützlich zum Minimieren auf Tray) auch ohne das hässliche Java-Symbol verwendet werden

wa4557
quelle
0

Da ich keine offensichtlich besseren Lösungen sehe, ist es möglich, dass dies hilft:

Sie könnten das Tablett insgesamt loswerden!

  • entweder deaktivieren Sie es, wenn möglich
  • oder ersetzen Sie das gesamte Bedienfeld durch ein anderes, das Sie manuell konfigurieren können, ohne ein Tray-Element hinzuzufügen. (Ich mag xfce4-panelfür diese Art von Dingen)

Wenn Sie jetzt auf Funktionen verzichten, die auf der Taskleiste basieren, sollten die meisten Funktionen von Fall zu Fall ersetzt werden können, z.

Volker Siegel
quelle
1
Ok danke, aber das ist offensichtlich nicht das, was ich wollte. Ich mag das Unity-Tray, ich mag nur einige der Tray-Icons
wa4557
1
Ja, das war eher ein Schuss in die Dunkelheit, wenn man den zugrunde liegenden Verwendungszweck kennt. Bei einem Gerät im Appliance-Stil, auf dem eine feste Anwendung ausgeführt wird, sowie die Desktop-Leiste nur für Grundmenüs. Die Methode würde sogar funktionieren :) [Aber ich erinnere mich, ich habe einmal eine Nachricht von einem Programm gesehen, das sich weigerte, ohne Panel zu starten ...]
Volker Siegel
0

Wenn Sie möchten, dass alle Anwendungen, die ein Tray-Symbol verwenden, es in Ubuntu 14.04 verwenden können, können Sie einen PPA verwenden, der mit Unity-Patches geliefert wird, um die Whitelist für Systrays wieder zu aktivieren. Öffnen Sie dazu ein Terminal und führen Sie die folgenden Befehle aus:

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

Starten Sie anschließend Unity neu, indem Sie ALT + F2 drücken und "unity" eingeben oder sich abmelden. Die PPA listet jetzt automatisch alle Anwendungen auf, sodass keine manuelle Whitelist für einzelne Anwendungen erforderlich ist, um den Systray verwenden zu können.

Änderungen rückgängig machen

Wenn Sie die Änderungen rückgängig machen und von den Ubuntu-Repositorys zu den Standard-Unity-Paketen zurückkehren möchten, verwenden Sie die folgenden Befehle, um die PPA-Whitelist für Unity-Systray zu löschen:

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

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

anonamos
quelle
1
Willkommen bei Ask Ubuntu Stak Exchange! Bitte füge einen wesentlichen Teil des Links in deine Antwort ein, um zu verhindern, dass der Beitrag nach dem Abbruch des Links abbricht.
17.
2
Das ist eine globale Whitelist, was bedeutet, dass alle Programme auf der Whitelist stehen. Programme auf die
schwarze