Як запобігти програмам Java створювати піктограму лотка?


16

З Ubuntu 13.04 знищена можливість створення списку (і, отже, чорного списку) певних програм для створення піктограми лотка. Відтоді піктограми лотка програм Java та піктограм Wine жорстко кодуються та завжди видно.

Хоча є певні папи, які забезпечують виправлення єдності, повертаючи systray.whitelist (не для 14.04, хоча, я хотів би знати, чи є інші способи приховати піктограми лотка програм Java (наприклад, JDownloader)

Я знаю, що існує спосіб для qt-додатків, застосовуючи профілі apparmor, які забороняють доступ для читання до пакету sni-qt (наприклад, для Skype або Spotify)

Чи є спосіб реалізувати профілі apparmor чи щось подібне для додатків Java та / або програм Wine?

Спасибі


1
Ви можете отримати доступ до їх значків і змінити їх на прозорі та маленькі, щоб вони займали майже не місце і були непомітними?
Тім,

2
Гарна ідея, але ні. Місце, розміром 16x16, схоже, зарезервоване для програм Java. Змінившись на невидимий 1px svg, ви отримуєте все ще не прозорий значок 16x16
wa4557

1
Добре, прикро ...
Тим

Відповіді:


2

Для програм Java:

  • Насправді для випадку JDownloader це модульна конструкція. Піктограма лотка поставляється як плагін, який можна відключити з:

    JDownloader → Addons → Addon Manager → Розширення → Зніміть прапорець для активації світлого лотка 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до виклику команди java:

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

Це мінімальні правила, які дозволили мені запустити jdownloader. Можливо, вам доведеться додати більше дозволів. Оскільки немає жодного denyваріанту, ви повинні написати всі необхідні grantправила.

Список літератури:

BTW, спробуйте прокоментувати одне з правил, додавши //до початку рядка; Тож ви можете бачити, як виглядає помилка відхилених дозволів. Він говорить вам, який дозвіл слід додати. Також зауважте, що я використовував багато -& *намагався розширити правила, оскільки я шукаю швидке рішення ( 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 - це інструмент графічного інтерфейсу для редагування файлів політики. Це полегшує пошук усіх доступних варіантів у вікні. Це має бути вже встановлено з пакетом Java.

введіть тут опис зображення


1

Хоча відповідь Sneetshers ідеальна, я виявив більш просте (і очевидне) рішення. Цей підхід працює з JDownloader, але також повинен працювати з усіма іншими програмами Java.

Просто видаліть логотип, rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.pngа потім створіть недійсну піктограму pngtouch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Використовуючи такий підхід, ви все одно можете використовувати плагін TrayIcon (корисний для мінімізації лотка) без негарного значка Java


0

Оскільки я не бачу очевидних кращих рішень, можливо, це допоможе:

Ви могли повністю позбутися лотка!

  • або відключити його, якщо можливо
  • або замінити всю панель на якусь іншу, яку можна налаштувати вручну, тільки не додаючи елемент лотка. (Мені подобаються xfce4-panelтакі речі)

Якщо зараз ви пропустите функції на основі лотка, більшість слід якось замінювати у кожному конкретному випадку, як сценарій із відображенням сповіщень на робочому столі про деякі події.


1
Добре дякую, але це, очевидно, не те, що я хотів. Мені подобається лоток для єдності, мені просто не подобаються деякі значки лотка
wa4557

1
Так, це був скоріше постріл у темряві, з точки зору того, що ти знаєш свою основу. Для машини в стилі "прилад" працює одна фіксована програма, а також панель робочого столу лише для основних меню. метод навіть спрацює :) [Але я пам’ятаю, що одного разу бачив повідомлення про якусь програму, яка відмовляється починати роботу без панелі ...]
Volker Siegel

0

Якщо ви хочете, щоб усі програми, які використовують піктограму лотка, мали змогу використовувати її в Ubuntu 14.04, ви можете використовувати PPA, який постачається з виправленим Unity, щоб повторно включити список білого списку символів. Для цього відкрийте термінал і запустіть такі команди:

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

Потім перезапустіть Unity, натиснувши ALT + F2 та ввівши «єдність» або вийшовши з системи. PPA тепер автоматично додає до списку всі програми, тому немає необхідності вручну вносити білі списки окремих програм, щоб мати змогу використовувати systray.

Повернення змін

Якщо ви хочете відновити зміни та повернутися до пакетів Unity за замовчуванням із сховищ Ubuntu, скористайтеся командами, поданими нижче, для очищення білого списку Systay Unita 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! Будь ласка, включіть у свою відповідь істотну частину посилання, щоб запобігти порушенню повідомлення після відмирання посилання.
enedil

2
Це глобальний білий список, а це означає, що всі програми дозволені. Програми чорного списку (як програми для вина та Java) є суцільним протилежним і не працюють з цією версією єдності
wa4557
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.