Como impedir que aplicativos Java criem ícone de bandeja?

16

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

Embora existam certos ppas, que fornecem um patch de unidade devolvendo o systray.whitelist (embora ainda não seja para a versão 14.04), gostaria de saber se existem outras maneiras de ocultar os ícones da bandeja de aplicativos java (por exemplo, JDownloader)

Eu sei que existe uma maneira de fazer isso para aplicativos qt implementando o apparmor-profiles que negam o 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

wa4557
fonte
11
Você pode acessar os ícones deles e alterá-los para serem transparentes e pequenos, de modo que ele ocupa quase nenhum espaço e fica invisível?
Tim
2
Boa ideia, mas não. O local 16x16 parece estar reservado para aplicativos java. Ao mudar para um SVG 1px invisível, ainda fica um 16x16 não transparente ícone
wa4557
11
OK, isso é uma vergonha ... #
277 Tim Tim

Respostas:

2

Para aplicativos Java:

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

    JDownloader → Complementos → Gerenciador de complementos → Extensões → Desmarque a caixa Ativar da bandeja de luz JD

  • Para o caso geral de aplicativos Java, é possível usar o Java Security Manager escrevendo regras de política customizadas.

    1. Criar java.policyarquivo ~/.jdownloaderconté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 jdownloadero script de inicialização 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. Pode ser necessário adicionar mais permissões. Como não há denyopção, você precisa escrever todas as grantregras necessárias .

Referências:

Entre, tente comentar uma das regras adicionando //ao início da linha; Assim, você pode ver como é o erro das permissões negadas. Ele informa qual permissão você deve adicionar. Observe também que eu usei muitos -e *estou tentando estender regras, pois estou procurando uma solução rápida (o padrão era o AllPermissionmesmo) e não estou procurando 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. Torna mais fácil descobrir todas as opções disponíveis na caixa suspensa. Ele já deve estar instalado com o pacote Java.

insira a descrição da imagem aqui

user.dz
fonte
1

Embora a resposta dos 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.pnge depois criar um ícone png inválido comtouch ~/.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 feio java

wa4557
fonte
0

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

Você pode se livrar da bandeja completamente!

  • desative-o, se possível
  • ou substitua o painel inteiro por outro que você possa configurar manualmente, apenas sem adicionar um elemento da bandeja. (Eu gosto xfce4-paneldesse tipo de coisa)

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

Volker Siegel
fonte
11
Ok obrigado, mas obviamente não é isso que eu queria. I como unidade-bandeja de, eu só não gosto de alguns dos bandeja-ícones
wa4557
11
Sim, isso foi mais um tiro no escuro, em termos de conhecer o seu caso de uso subjacente. Para uma máquina do tipo 'appliance', execute um aplicativo fixo e a barra da área de trabalho apenas para menus básicos. o método seria mesmo trabalho :) [Mas eu me lembro que uma vez ter visto uma mensagem de algum programa recusando-se a começar com nenhum painel ...]
Volker Siegel
0

Se você deseja que todos os aplicativos que usam um ícone de bandeja possam utilizá-lo no Ubuntu 14.04, use um PPA que acompanha o Unity corrigido para reativar a lista de permissões do 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 digitando "unity" ou fazendo logout. O PPA agora lista automaticamente todos os aplicativos automaticamente, de modo que não há necessidade de incluir manualmente aplicativos individuais para poder usar a bandeja.

Revertendo as mudanças

Se você deseja reverter as alterações e voltar aos pacotes padrão do Unity nos repositórios Ubuntu, use os comandos abaixo para limpar o PPA da lista de permissões do sistema 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

anonamos
fonte
11
Bem-vindo ao Ask Ubuntu Stak Exchange! Inclua uma parte essencial do link na sua resposta para evitar que a postagem seja interrompida após a morte do link.
enedil
2
Essa é uma lista de permissões global, o que significa que todos os programas estão na lista de permissões. Lista negra programas (como o vinho e programas Java) ist completamente o oposto e não funciona com esta versão da unidade nem
wa4557