Как запретить Java-приложениям создавать иконку в трее?

С Ubuntu 13.04 исчезла возможность использования белого списка (и, соответственно, черного списка) определенных приложений при создании значка в трее.

Хотя есть определенные ppas, которые предоставляют патч единства, возвращая systray.whitelist (не для 14.04, хотя, тем не менее) Я хотел бы узнать, есть ли другие способы скрыть значки в лотках java-приложений (например, JDownloader)

Я знаю, что есть способ сделать это для qt-приложений, реализуя профили apparmor, которые запретить доступ для чтения к пакету sni-qt (например, для Skype или Spotify)

Есть ли способ реализовать профили apparmor или что-то подобное для приложений Java и / или приложений Wine?

[d4 ] спасибо

1
задан 12 July 2014 в 00:36

3 ответа

Для Java-приложений:

Фактически для случая JDownloader, это модульная конструкция. Значок лотка появляется как плагин, который можно отключить: JDownloader & rarr; Addons & rarr; Addon Manager & rarr; Расширения & rarr; Снимите флажок «Активировать» для JD Light Tray. В общем случае для приложений Java. Можно использовать диспетчер безопасности Java, написав пользовательские правила политики. Создать файл 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 "*";
};
Изменить скрипт запуска 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.

Ссылки:

Фактически для случая JDownloader, это модульный дизайн. Значок лотка появляется как плагин, который можно отключить: JDownloader & rarr; Addons & rarr; Addon Manager & rarr; Расширения & rarr; Снимите флажок «Активировать» для JD Light Tray java.awt: Class AWTPermission Для общего применения приложений Java. Можно использовать диспетчер безопасности Java, написав пользовательские правила политики. Создать файл 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 "*";
};
Изменить скрипт запуска 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 $*
[d28 ] BTW, попробуйте прокомментировать одно из правил, добавив // в начало строки; Таким образом, вы можете видеть, как выглядит ошибка отказа в разрешениях. Он сообщает вам, какое разрешение вы должны добавить. Также обратите внимание, что я использовал много - & amp; * пытается расширить правила, поскольку я ищу быстрое решение (по умолчанию было 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 - это инструмент графического интерфейса для редактирования файлов политик. Это облегчает поиск всех доступных вариантов из коробки. Он должен быть уже установлен с пакетом Java.

2
ответ дан 24 May 2018 в 09:46

Как я вижу, нет очевидных лучших решений, возможно, что это поможет:

Вы можете избавиться от лотка alltogether!

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

Если вы потеряете возможности на основе лоток, большинство из них должно быть заменено в любом случае так же, как сценарий, показывающий уведомления о некоторых событиях на рабочем столе. 5]

0
ответ дан 24 May 2018 в 09:46
  • 1
    Хорошо спасибо, но это явно не то, что я хотел. Мне нравится лоток единства, мне просто не нравятся некоторые подносы – wa4557 18 April 2014 в 13:26
  • 2
    Да, это был скорее выстрел в темноте, с точки зрения знания вашей базовой утилиты. Для «машины в стиле устройства» используется одно фиксированное приложение, а также панель рабочего стола только для основных меню. метод будет даже работать :) [Но я помню, что когда-то видел сообщение о какой-то программе, отказывающейся начинать без панели ...] – Volker Siegel 18 April 2014 в 13:42

Если вы хотите, чтобы все приложения, использующие значок в трее, могли использовать его в Ubuntu 14.04, вы можете использовать PPA, который поставляется с Unity, для повторного включения белого списка systray. Для этого откройте терминал и запустите следующие команды:

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

Затем перезапустите Unity, нажав ALT + F2 и введя «единство» или выйдя из системы.

Отмена изменений

Если вы хотите вернуться к изменениям и перейти в режим ожидания, то в этом случае PPA теперь автоматически присваивает белые списки всем приложениям, поэтому нет необходимости вручную переадресовывать отдельные приложения. вернитесь к пакетам Unity по умолчанию из репозиториев Ubuntu, воспользуйтесь приведенными ниже командами, чтобы очистить белый список системных списков Unity PPA:

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

С http://www.webupd8.org/2013/05/how- в-получить-белый список лотка-обратно-in.html

0
ответ дан 24 May 2018 в 09:46
  • 1
    Добро пожаловать, чтобы спросить Ubuntu Stack Exchange! Пожалуйста, включите важную часть ссылки в свой ответ, чтобы предотвратить разрыв сообщения после того, как ссылка замирает. – enedil 18 August 2014 в 03:07
  • 2
    Это глобальный белый список, что означает, что все программы включены в белый список. Программы черного списка (например, программы для вин и Java) полностью противоположны и не работают с этой версией единства – wa4557 31 December 2014 в 15:33

Другие вопросы по тегам:

Похожие вопросы: