Java 애플리케이션이 트레이 아이콘을 작성하지 못하게하는 방법은 무엇입니까?


16

Ubuntu 13.04를 사용하면 특정 응용 프로그램에서 트레이 아이콘 생성을 허용 목록에 추가하여 블랙리스트에 추가 할 수 없습니다. 그 이후 Java 응용 프로그램 및 와인 아이콘의 트레이 아이콘은 하드 코딩되어 항상 표시됩니다.

특정 ppa가 있지만 systray.whitelist를 제공하여 단일 패치를 제공하지만 (14.04는 아니지만) Java 응용 프로그램의 트레이 아이콘을 숨길 수있는 다른 방법이 있는지 알고 싶습니다 (예 : JDownloader)

sni-qt 패키지 (예 : Skype 또는 Spotify)에 대한 읽기 액세스를 거부하는 apparmor-profiles를 구현하여 qt-applications에 대한 방법이 있음을 알고 있습니다

Java 애플리케이션 및 / 또는 Wine 애플리케이션에 대한 Apparmor 프로파일 또는 이와 유사한 것을 구현할 수있는 방법이 있습니까?

감사


1
아이콘에 액세스하여 투명하고 작게 변경할 수 있으므로 공간을 거의 차지하지 않고 보이지 않습니다.
Tim

2
좋은 생각이지만 아닙니다. 16x16 장소는 Java 응용 프로그램 용으로 예약되어있는 것 같습니다. 보이지 않는 1px svg로 변경하면 여전히 16x16 투명하지 않은 아이콘을 얻습니다
wa4557

1
알았어, 부끄러운
Tim

답변:


2

Java 앱의 경우 :

  • 실제로 JDownloader 케이스의 경우 모듈 식 디자인입니다. 트레이 아이콘은 다음과 같이 비활성화 할 수있는 플러그인으로 제공됩니다.

    JDownloader → 애드온 → 애드온 관리자 → 확장 → JD 라이트 트레이 활성화 상자를 선택 취소 합니다

  • Java 애플리케이션의 경우 사용자 정의 정책 규칙을 작성하여 Java 보안 관리자를 사용할 수 있습니다.

    1. java.policy파일 만들기 ~/.jdownloader:

      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. jdownloader사용자 지정 정책을 사용하도록 시작 스크립트 수정

      sudo nano /usr/bin/jdownloader

      추가 : -Djava.security.manager -Djava.security.policy=java.policy자바 명령 호출에 :

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

이것이 jdownloader를 시작할 수있게 해주는 최소 규칙입니다. 더 많은 권한을 추가해야 할 수도 있습니다. deny옵션 이 없기 때문에 필요한 모든 grant규칙 을 작성해야합니다 .

참고 문헌 :

BTW, //줄의 시작 부분 에 추가하여 규칙 중 하나에 주석을 달으십시오 . 따라서 거부 된 권한 오류가 어떻게 나타나는지 확인할 수 있습니다. 어떤 권한을 추가해야하는지 알려줍니다. 또한 나는 많은 사용한 것을 알 수 -& *I는 빠른 해결책을 찾고 있어요 (기본이었다으로 규칙을 확장하려고 AllPermission어쨌든) 나는 응용 프로그램 감옥에 찾는 게 아니에요.

다음은 가능한 모든 권한을 부여하려는 템플릿입니다.

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

참고 :

Java 정책 도구는 정책 파일을 편집하는 GUI 도구입니다. 드롭 박스에서 사용 가능한 모든 옵션을 더 쉽게 찾을 수 없습니다. Java 패키지와 함께 이미 설치되어 있어야합니다.

여기에 이미지 설명을 입력하십시오


1

Sneetshers의 답변은 완벽하지만 더 간단하고 확실한 솔루션을 발견했습니다. 이 접근 방식은 JDownloader에서 작동하지만 다른 모든 Java 프로그램에서도 작동합니다.

로고를 제거 rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.png하고 나중에 잘못된 png 아이콘을 만듭니다.touch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

이 접근법을 사용하면 추악한 자바 아이콘없이 TrayIcon 플러그인 (트레이 최소화에 유용한)을 계속 사용할 수 있습니다


0

더 나은 해결책을 찾지 못하면 다음과 같이 도움이 될 수 있습니다.

트레이를 모두 제거 할 수 있습니다!

  • 가능하면 비활성화하십시오
  • 또는 트레이 요소를 추가하지 않고 수동으로 구성 할 수있는 다른 것으로 전체 패널을 교체하십시오. (나는 xfce4-panel이런 종류의 것을 좋아한다)

트레이 기반 기능을 놓치면 일부 이벤트에서 바탕 화면 알림을 보여주는 스크립과 같이 사례별로 대체 할 수 있어야합니다.


1
고마워요, 그러나 이것은 내가 원하는 것이 아닙니다. 나는 통일 트레이를 좋아한다, 나는 단지 트레이 아이콘의 일부를 싫어한다
wa4557

1
그렇습니다. 기본 사용 사례를 알면 어둠 속에서 더 많이 촬영되었습니다. '어플라이언스'스타일 컴퓨터의 경우 하나의 고정 된 응용 프로그램과 기본 메뉴의 바탕 화면 표시 줄 만 실행하십시오. 이 방법은 효과가있을 것입니다.) [그러나 나는 한 번도 패널없이 시작하는 것을 거부하는 일부 프로그램의 메시지를 보았던 것을 기억합니다 ...]
Volker Siegel

0

트레이 아이콘을 사용하는 모든 응용 프로그램이 Ubuntu 14.04에서이를 사용할 수있게하려면 Unity 패치가 포함 된 PPA를 사용하여 시스템 트레이 화이트리스트를 다시 활성화 할 수 있습니다. 이렇게하려면 터미널을 열고 다음 명령을 실행하십시오.

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

그런 다음 ALT + F2를 누르고 "unity"를 입력하거나 로그 아웃하여 Unity를 다시 시작하십시오. PPA는 이제 모든 응용 프로그램을 자동으로 화이트리스트에 표시하므로 시스템 트레이를 사용하기 위해 개별 앱을 수동으로 화이트리스트에 추가 할 필요가 없습니다.

변경 사항 되돌리기

변경 사항을 되돌리고 Ubuntu 리포지토리에서 기본 Unity 패키지로 돌아가려면 아래 명령을 사용하여 Unity systray 화이트리스트 PPA를 제거하십시오.

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

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


1
Ubuntu Stak Exchange에 오신 것을 환영합니다! 링크가 종료 된 후 게시물이 깨지는 것을 방지하기 위해 링크에 필수 부분을 포함 시키십시오.
enedil

2
이것이 전체 허용 목록이므로 모든 프로그램이 허용 목록에 포함됩니다. 블랙리스트 프로그램 (와인 및 Java 프로그램 등)은 완전한 반대가
아니며이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.