Javaアプリケーションがトレイアイコンを作成しないようにする方法


16

Ubuntu 13.04では、特定のアプリケーションがトレイアイコンを作成することをホワイトリストに登録する(そして結果としてブラックリストに登録する)可能性がなくなりました。それ以来、JavaアプリケーションのトレイアイコンとWineアイコンはハードコーディングされ、常に表示されます。

特定のPPAがありますが、systray.whitelistを返すことで統一パッチを提供します(ただし、14.04には対応していません)。Javaアプリ(JDownloaderなど)のトレイアイコンを非表示にする他の方法があるかどうかを知りたい

私は、sni-qtパッケージへの読み取りアクセスを拒否するapparmor-profileを実装することで、qt-applicationsにそうする方法があることを知っています(たとえば、Skype、またはSpotify)

JavaアプリケーションやWineアプリケーションにapparmorプロファイルなどを実装する方法はありますか?

ありがとう


1
あなたはそれらのアイコンにアクセスし、それらを透明で小さく変更することができたので、それはほとんどスペースを占有せず、見えませんか?
ティム14年

2
良い考えですが、違います。16x16の場所は、Javaアプリケーション用に予約されているようです。目に見えない1ピクセルのSVGに変更することで、人はまだ16×16透明でないアイコンを取得します
wa4557

1
OK、恥... thatsの
ティム・

回答:


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.policyjavaコマンド呼び出しに:

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

これらは、jdownloaderを起動できる最小限のルールです。さらに権限を追加する必要がある場合があります。denyオプションがないため、必要なすべてのgrantルールを記述する必要があります。

参照:

ところで、//行の先頭に追加して、ルールの1つをコメントしてみてください。そのため、拒否されたアクセス許可のエラーがどのように見えるかを確認できます。追加する権限を示します。また、私は多くの使用していることに気づく-*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 Policy Toolsは、ポリシーファイルを編集するための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

このアプローチを使用すると、oneいJavaアイコンなしでTrayIconプラグインを使用できます(トレイを最小化するのに便利です)。


0

明らかなより良い解決策は見当たらないので、これが役立つ可能性があります。

一緒にトレイを取り除くことができます!

  • 可能な場合は無効にします
  • または、トレイ要素を追加せずに、手動で設定できる他のパネルにパネル全体を置き換えます。(私xfce4-panelはこの種のものが好きです)

トレイベースの機能を今すぐ見逃してしまうのであれば、ほとんどの場合、何らかのイベントでデスクトップ通知を表示するスクリプトのように、ケースバイケースで交換可能です。


1
はい、ありがとうございます。しかし、これは明らかに私が望んでいたものではありません。Iユニティ・トレイのような、私はちょうどトレイのアイコンのいくつか嫌い
wa4557

1
はい、それはあなたの潜在的なユースケースを知るという点で、暗闇の中でのショットでした。「アプライアンス」スタイルのマシンの場合、1つの固定アプリケーションを実行し、さらに基本メニューのみのデスクトップバーを実行します。この方法でも機能します:) [しかし、パネルなしで開始することを拒否するプログラムのメッセージを見たことがあります...]
Volker Siegel 14

0

トレイアイコンを使用するすべてのアプリケーションでUbuntu 14.04で使用できるようにする場合、Unityにパッチが適用されたPPAを使用して、systrayホワイトリストを再度有効にすることができます。これを行うには、ターミナルを開き、次のコマンドを実行します。

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

次に、ALT + F2を押して「unity」と入力するか、ログアウトしてUnityを再起動します。PPAはすべてのアプリケーションを自動的にホワイトリストに登録するようになったため、システムトレイを使用するために個々のアプリを手動でホワイトリストに登録する必要はありません。

変更を元に戻す

変更を元に戻し、UbuntuリポジトリからデフォルトのUnityパッケージに戻す場合は、以下のコマンドを使用してUnityシステムトレイホワイトリスト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
Ask Ubuntu Stak Exchangeへようこそ!リンクが死んだ後の投稿の破壊を防ぐために、回答にリンクの重要な部分を含めてください。
eneil 14

2
これはグローバルホワイトリストです。つまり、すべてのプログラムがホワイトリストに登録されます。完全な反対イスト(ワインやJavaプログラムなど)プログラムをブラックリストと団結どちらのこのバージョンで作業をしない
wa4557
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.