Come impedire alle applicazioni Java di creare l'icona nella barra delle applicazioni?


16

Con Ubuntu 13.04 la possibilità di inserire nella whitelist (e di conseguenza nella blacklist) alcune applicazioni dalla creazione di un'icona nella barra delle applicazioni è sparita. Da allora le icone nella barra delle applicazioni Java e le icone di Wine sono codificate e sempre visibili.

Sebbene ci siano alcuni ppas, che forniscono una patch unitaria restituendo la systray.whitelist (non per il 14.04, tuttavia) Vorrei sapere se ci sono altri modi per nascondere le icone della barra delle applicazioni Java (ad esempio JDownloader)

So che esiste un modo per farlo per le applicazioni qt implementando i profili apparmor che negano l'accesso in lettura al pacchetto sni-qt (ad esempio per Skype o Spotify)

C'è un modo per implementare profili apparmor o qualcosa di simile per le applicazioni Java e / o le applicazioni Wine?

Grazie


1
Potresti accedere alle loro icone e modificarle in modo che siano trasparenti e piccole, in modo che non occupi quasi spazio ed sia invisibile?
Tim

2
Buona idea, ma no. Il posto 16x16 sembra essere riservato per le applicazioni Java. Passando a uno svg 1px invisibile, si ottiene ancora un'icona 16x16 non trasparente
wa4557

1
OK, è un peccato ...
Tim

Risposte:


2

Per le app Java:

  • In realtà per la custodia JDownloader, è un design modulare. L'icona del vassoio viene fornita come un plug-in che può essere disabilitato da:

    JDownloader → Componenti aggiuntivi → Gestione componenti aggiuntivi → Estensioni → Deseleziona Attiva casella per JD Light Tray

  • Per il caso generale delle applicazioni Java, è possibile utilizzare il gestore sicurezza Java scrivendo regole di politica personalizzate.

    1. Crea java.policyfile in ~/.jdownloadercontiene:

      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. Modifica lo jdownloaderscript di avvio per utilizzare la politica personalizzata

      sudo nano /usr/bin/jdownloader

      Aggiungi: -Djava.security.manager -Djava.security.policy=java.policyalla chiamata di comando java:

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

Queste sono le regole minime che mi hanno permesso di avviare jdownloader. Potrebbe essere necessario aggiungere ulteriori autorizzazioni. Poiché non esiste alcuna denyopzione, è necessario scrivere tutte le grantregole necessarie .

Riferimenti:

A proposito, prova a commentare una delle regole aggiungendo //all'inizio della riga; Quindi puoi vedere come appare l'errore delle autorizzazioni negate. Ti dice quale autorizzazione dovresti aggiungere. Nota anche che ne ho usati molti -e *sto provando a estendere le regole mentre cerco una soluzione rapida (il default era AllPermissioncomunque) e non sto cercando di imprigionare l'applicazione.

Ecco un modello per iniziare, cercando di concedere tutte le autorizzazioni possibili:

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

Nota :

Java Policy Tools è uno strumento GUI per modificare i file delle politiche. Rende più facile scoprire tutte le opzioni disponibili dalla casella a discesa. Dovrebbe già essere installato con il pacchetto Java.

inserisci qui la descrizione dell'immagine


1

Sebbene la risposta di Sneetshers sia perfetta, ho scoperto una soluzione più semplice (e ovvia). Questo approccio funziona con JDownloader, ma dovrebbe funzionare anche con tutti gli altri programmi Java.

Basta rimuovere il logo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.pnge successivamente creare un'icona png non valida contouch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Utilizzando questo approccio, è ancora possibile utilizzare il plug-in TrayIcon (utile per ridurre a icona il vassoio) senza la brutta icona java


0

Poiché non vedo soluzioni ovvie migliori, è possibile che ciò possa aiutare:

Potresti sbarazzarti del vassoio del tutto!

  • o disabilitarlo, se possibile
  • o sostituire l'intero pannello con un altro che è possibile configurare manualmente, semplicemente non aggiungendo un elemento del vassoio. (Mi piace xfce4-panelper questo tipo di cose)

Se manchi le funzionalità basate su vassoio ora, la maggior parte dovrebbe essere sostituibile caso per caso in qualche modo, come uno script che mostra le notifiche desktop su alcuni eventi.


1
Ok grazie, ma ovviamente non è quello che volevo. Mi piace l'unità vassoio, non mi piacciono alcune icone del vassoio
wa4557,

1
Sì, è stato più che altro un colpo nel buio, in termini di conoscenza del tuo caso d'uso sottostante. Per una macchina di tipo "appliance", che esegue un'applicazione fissa, oltre alla barra del desktop solo per i menu di base. il metodo funzionerebbe persino :) [Ma ricordo che una volta ho visto un messaggio di un programma che si rifiutava di iniziare senza pannello ...]
Volker Siegel,

0

Se vuoi che tutte le applicazioni che usano un'icona nella barra delle applicazioni possano usarlo in Ubuntu 14.04, puoi usare un PPA fornito con Unity patchato per riattivare la whitelist di systray. Per fare ciò, aprire un terminale ed eseguire i seguenti comandi:

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

Quindi, riavviare Unity premendo ALT + F2 e inserendo "unità" o disconnettendosi. Il PPA ora autorizza automaticamente tutte le applicazioni, quindi non è necessario autorizzare manualmente le singole app per poter utilizzare il systray.

Ripristino delle modifiche

Se si desidera ripristinare le modifiche e tornare ai pacchetti Unity predefiniti dai repository Ubuntu, utilizzare i comandi seguenti per eliminare la whitelist PPA della systray Unity:

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

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


1
Benvenuto in Ask Ubuntu Stak Exchange! Per favore, includi la parte essenziale del link nella tua risposta per evitare di interrompere il post dopo la fine del link.
enedil,

2
Questa è una whitelist globale, il che significa che tutti i programmi sono autorizzati. I programmi in blacklist (come i programmi wine e Java) sono esattamente l'opposto e non funzionano neanche con questa versione di unità
wa4557
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.