¿Cómo evitar que las aplicaciones Java creen un icono de bandeja?

16

Con Ubuntu 13.04, la posibilidad de incluir en la lista blanca (y, por consiguiente, en la lista negra) ciertas aplicaciones desde la creación de un icono de bandeja ha desaparecido. Desde entonces, los iconos de la bandeja de las aplicaciones Java y los iconos de Wine están codificados y siempre visibles.

Aunque hay ciertos ppas, que proporcionan un parche de unidad al devolver la lista blanca de systray (todavía no para 14.04) Me gustaría saber si hay otras formas de ocultar los iconos de bandeja de las aplicaciones de Java (por ejemplo, JDownloader)

Sé que hay una manera de hacerlo para las aplicaciones qt mediante la implementación de apparmor-profiles que niegan el acceso de lectura al paquete sni-qt (por ejemplo, para Skype o Spotify)

¿Hay alguna manera de implementar perfiles de apparmor o algo similar para aplicaciones Java y / o aplicaciones Wine?

Gracias

wa4557
fuente
1
Puede acceder a sus íconos y cambiarlos para que sean transparentes y pequeños, por lo que casi no ocupa espacio y es invisible.
Tim
2
Buena idea, pero no. El lugar de 16x16 parece estar reservado para aplicaciones java. Al cambiar a un svg invisible de 1px, se obtiene un icono no transparente de 16x16
wa4557
1
OK, eso es una pena ...
Tim

Respuestas:

2

Para aplicaciones Java:

  • En realidad, para el caso de JDownloader, es un diseño modular. El icono de la bandeja viene como un complemento que se puede desactivar desde:

    JDownloader → Complementos → Administrador de complementos → Extensiones → Desactive la casilla Activar para JD Light Tray

  • Para el caso general de aplicaciones Java, es posible utilizar el administrador de seguridad Java escribiendo reglas de política personalizadas.

    1. Crear java.policyarchivo ~/.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. Modifique la jdownloadersecuencia de comandos de inicio para usar una política personalizada

      sudo nano /usr/bin/jdownloader

      Agregar: -Djava.security.manager -Djava.security.policy=java.policya la llamada de comando java:

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

Estas son las reglas mínimas que me permitieron iniciar jdownloader. Es posible que deba agregar más permisos. Como no hay ninguna denyopción, debe escribir todas las grantreglas necesarias .

Referencias

Por cierto, intente comentar una de las reglas agregando //al principio de la línea; Para que pueda ver cómo se ve el error de permisos denegados. Le indica qué permiso debe agregar. También tenga en cuenta que he usado muchas -e *intentando extender las reglas, ya que estoy buscando una solución rápida (el valor predeterminado era de AllPermissiontodos modos) y no estoy buscando encarcelar la aplicación.

Aquí hay una plantilla para comenzar, tratando de otorgar todos los permisos posibles:

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 es una herramienta GUI para editar archivos de políticas. Hace que sea más fácil encontrar todas las opciones disponibles en el cuadro desplegable. Ya debería estar instalado con el paquete Java.

ingrese la descripción de la imagen aquí

user.dz
fuente
1

Aunque la respuesta de Sneetshers es perfecta, descubrí una solución más simple (y obvia). Este enfoque funciona con JDownloader, pero también debería funcionar con todos los demás programas Java.

Simplemente elimine el logotipo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.pngy luego cree un icono png inválido contouch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Con este enfoque, aún se puede usar el complemento TrayIcon (útil para minimizar a la bandeja) sin el feo icono de Java

wa4557
fuente
0

Como no veo mejores soluciones obvias, es posible que esto ayude:

¡Podrías deshacerte de la bandeja por completo!

  • deshabilítelo, si es posible
  • o reemplace todo el panel por otro que pueda configurar manualmente, simplemente sin agregar un elemento de bandeja. (Me gusta xfce4-panelpara este tipo de cosas)

Si ahora echa de menos las funciones basadas en la bandeja, la mayoría debería ser reemplazable caso por caso de alguna manera, como un script que muestra notificaciones de escritorio en algunos eventos.

Volker Siegel
fuente
1
Ok, gracias, pero esto obviamente no es lo que quería. Me gusta la unidad-bandeja, simplemente no me gustan algunos de los iconos de la bandeja
wa4557
1
Sí, eso fue más bien un tiro en la oscuridad, en términos de conocer su caso de uso subyacente. Para una máquina de estilo 'dispositivo', ejecuta una aplicación fija, más la barra de escritorio solo para menús básicos. el método incluso funcionaría :) [Pero recuerdo que una vez vi un mensaje de algún programa negándose a comenzar sin panel ...]
Volker Siegel
0

Si desea que todas las aplicaciones que usan un icono de bandeja puedan usarlo en Ubuntu 14.04, puede usar un PPA que viene con Unity parcheado para volver a habilitar la lista blanca de la bandeja del sistema. Para hacer esto, abra una terminal y ejecute los siguientes comandos:

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

Luego, reinicie Unity presionando ALT + F2 e ingresando "unidad" o cerrando sesión. El PPA ahora incluye automáticamente en la lista blanca todas las aplicaciones, por lo que no es necesario incluir manualmente las aplicaciones individuales en la lista blanca para poder usar la bandeja del sistema.

Revertir los cambios

Si desea revertir los cambios y volver a los paquetes predeterminados de Unity desde los repositorios de Ubuntu, use los comandos a continuación para purgar el PPA de la lista blanca del sistema de 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
fuente
1
¡Bienvenido a Ask Ubuntu Stak Exchange! Por favor, incluya una parte esencial del enlace en su respuesta para evitar romper la publicación después de que el enlace muere
enedil
2
Esa es una lista blanca global, lo que significa que todos los programas están en la lista blanca. Los programas de
listas negras