Como evitar que aplicativos Java criem o ícone da bandeja?

16

Com o Ubuntu 13.04, a possibilidade de colocar na lista de permissões (e consequentemente, na lista negra) determinados aplicativos de criar um ícone de bandeja desapareceu. Desde então, os ícones de bandeja de aplicativos Java e ícones do Wine são codificados permanentemente e sempre visíveis.

Embora existam certos ppas, que fornecem um patch de unidade devolvendo o systray.whitelist (não para o 14.04, ainda assim) Gostaria de saber se há outras maneiras de ocultar os ícones de bandeja dos aplicativos java ( por exemplo, JDownloader)

Eu sei que há uma maneira de fazer isso para aplicações qt implementando perfis apparmor que negam acesso de leitura ao pacote sni-qt (por exemplo, para Skype ou Spotify)

Existe uma maneira de implementar perfis apparmor ou algo semelhante para aplicativos Java e / ou aplicativos Wine?

obrigado

    
por wa4557 06.04.2014 / 14:21

4 respostas

1

Embora a resposta do Sneetshers seja perfeita, descobri uma solução mais simples (e óbvia). Essa abordagem funciona com o JDownloader, mas também deve funcionar com todos os outros programas Java.

Basta remover o logotipo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.png e depois criar um ícone png inválido com touch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Usando essa abordagem, ainda é possível usar o plug-in TrayIcon (útil para minimizar a bandeja) sem o ícone java feio

    
por wa4557 07.01.2015 / 17:22
2

Para aplicativos Java:

  • Na verdade, para o caso JDownloader, é um design modular. O ícone da bandeja é fornecido como um plug-in que pode ser desativado em:

    JDownloader → Suplementos → Gerenciador de complementos → Extensões → Desmarque a caixa Ativar para JD Light Tray

  • Para casos gerais de aplicativos Java, é possível usar o gerenciador de segurança Java escrevendo regras de política customizadas.

    1. Crie o arquivo java.policy em ~/.jdownloader contém:

      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. Modifique o script de ativação jdownloader para usar a política personalizada

      sudo nano /usr/bin/jdownloader
      

      Adicione: -Djava.security.manager -Djava.security.policy=java.policy à chamada de comando java:

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

Estas são as regras mínimas que me permitiram iniciar o jdownloader. Você pode precisar adicionar mais permissões. Como não há deny , você precisa escrever todas as regras grant necessárias.

Referências:

  • java.awt : Class SystemTray
  • java.awt : AWTPermission de classe
  • java.security : BasicPermission de classe

    Veja Subclasses Conhecidas Diretas se você deseja escrever um modelo geral que conceda AllPermission exceto accessSystemTray . Então você pode usá-lo para todos os aplicativos java restantes.

BTW, tente comentar uma das regras adicionando // ao início da linha; Assim, você pode ver como é o erro de permissões negadas. Ele informa qual permissão você deve adicionar. Observe também que usei muitos - & amp; * tentando estender as regras, já que estou procurando uma solução rápida (o padrão era AllPermission de qualquer maneira) e não estou tentando prender o aplicativo.

Aqui está um modelo para começar, tentando conceder todas as permissões possíveis:

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 :

O Java Policy Tools é uma ferramenta da GUI para editar arquivos de políticas. Isso torna mais fácil descobrir todas as opções disponíveis na caixa de depósito. Já deve estar instalado com o pacote Java.

    
por user.dz 04.01.2015 / 18:32
0

Como não vejo soluções melhores óbvias, é possível que isso ajude:

Você pode se livrar da bandeja ao mesmo tempo!

  • ou desativá-lo, se possível
  • ou substitua todo o painel por outro que você possa configurar manualmente, simplesmente não adicionando um elemento de bandeja. (Eu gosto de xfce4-panel para esse tipo de coisa)

Se você sentir falta dos recursos baseados em bandeja agora, a maioria deve ser substituível caso a caso de alguma forma, como um script mostrando notificações da área de trabalho em alguns eventos.

    
por Volker Siegel 18.04.2014 / 01:36
0

Se você quiser que todos os aplicativos que usam um ícone de bandeja possam utilizá-lo no Ubuntu 14.04, você pode usar um PPA que vem com o patch do Unity para reativar a lista de permissão systray. Para fazer isso, abra um terminal e execute os seguintes comandos:

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

Em seguida, reinicie o Unity pressionando ALT + F2 e inserindo "unity" ou fazendo logout. Agora, o PPA automaticamente coloca na lista de permissões todos os aplicativos, portanto, não é necessário colocar aplicativos individuais na lista de permissões manualmente para poder usar o systray.

Revertendo as alterações

Se você deseja reverter as alterações e voltar para os pacotes Unity padrão dos repositórios do Ubuntu, use os comandos abaixo para limpar o PPA da lista de permissões Unity systray:

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

De link

    
por anonamos 17.08.2014 / 22:38