Làm cách nào để ngăn các ứng dụng Java tạo biểu tượng khay?


16

Với Ubuntu 13.04, khả năng đưa vào danh sách trắng (và do đó là danh sách đen) một số ứng dụng nhất định từ việc tạo biểu tượng khay đã không còn nữa. Kể từ đó, các biểu tượng khay của ứng dụng Java và biểu tượng Wine được mã hóa cứng và luôn hiển thị.

Mặc dù có một số pp nhất định, cung cấp một bản vá thống nhất bằng cách trả lại systray.whlistist (tuy nhiên không phải cho ngày 14.04), tôi muốn biết liệu có cách nào khác để ẩn các biểu tượng khay của ứng dụng java không (ví dụ: JDoader)

Tôi biết rằng có một cách để làm như vậy đối với các ứng dụng qt bằng cách triển khai các cấu hình apparmor từ chối quyền truy cập đọc vào gói sni-qt (ví dụ: cho Skype hoặc Spotify)

Có cách nào để triển khai các cấu hình apparmor hoặc một cái gì đó tương tự cho các ứng dụng Java và / hoặc các ứng dụng Wine không?

cảm ơn


1
Bạn có thể truy cập các biểu tượng của chúng, và thay đổi chúng thành trong suốt và nhỏ, vì vậy nó chiếm gần như không có không gian và là vô hình?
Tim

2
Ý tưởng tốt, nhưng không. Vị trí 16x16 dường như được dành riêng cho các ứng dụng java. Bằng cách thay đổi thành một Svg 1px vô hình, người ta vẫn nhận được một biểu tượng không trong suốt 16x16
wa4557

1
OK, đó là một sự xấu hổ ...
Tim

Câu trả lời:


2

Đối với ứng dụng Java:

  • Trên thực tế đối với trường hợp JDoader, Đây là một thiết kế mô-đun. Biểu tượng khay xuất hiện dưới dạng plugin có thể bị vô hiệu hóa từ:

    JDoader → Addons → Addon Manager → Tiện ích mở rộng → Bỏ chọn hộp Kích hoạt cho JD Light Khay

  • Đối với trường hợp chung của ứng dụng Java, có thể sử dụng trình quản lý bảo mật Java bằng cách viết quy tắc chính sách tùy chỉnh.

    1. Tạo java.policytập tin ~/.jdownloaderchứa:

      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. Sửa đổi jdownloadertập lệnh khởi chạy để sử dụng chính sách tùy chỉnh

      sudo nano /usr/bin/jdownloader

      Thêm: -Djava.security.manager -Djava.security.policy=java.policyvào lệnh gọi java:

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

Đây là những quy tắc tối thiểu cho phép tôi khởi chạy jdoader. Bạn có thể cần thêm nhiều quyền hơn. Bởi vì không có denytùy chọn bạn phải viết tất cả các grantquy tắc cần thiết .

Người giới thiệu:

BTW, cố gắng nhận xét một trong các quy tắc bằng cách thêm //vào đầu dòng; Vì vậy, bạn có thể thấy lỗi của các quyền bị từ chối trông như thế nào. Nó cho bạn biết bạn nên thêm quyền nào. Cũng lưu ý rằng tôi đã sử dụng nhiều -*cố gắng mở rộng các quy tắc vì tôi đang tìm kiếm một giải pháp nhanh chóng (mặc định là AllPermissiondù sao) và tôi không muốn bỏ tù ứng dụng.

Đây là một mẫu để bắt đầu, cố gắng cấp tất cả các quyền có thể:

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

Lưu ý :

Công cụ chính sách Java là một công cụ GUI để chỉnh sửa các tệp chính sách. Nó làm cho nó dễ dàng hơn để tìm ra tất cả các tùy chọn có sẵn từ hộp thả. Nó đã được cài đặt với gói Java.

nhập mô tả hình ảnh ở đây


1

Mặc dù câu trả lời của Sneetshers là hoàn hảo nhưng tôi đã khám phá ra một giải pháp đơn giản (và rõ ràng). Cách tiếp cận này hoạt động với JDoader, nhưng cũng sẽ hoạt động với tất cả các chương trình Java khác.

Chỉ cần xóa logo rm ~/.jdownloader/jd/img/logo/jd_logo_128_128.pngvà sau đó tạo biểu tượng png không hợp lệ vớitouch ~/.jdownloader/jd/img/logo/jd_logo_128_128.png

Sử dụng phương pháp này, người ta vẫn có thể sử dụng plugin KhayIcon (hữu ích để thu nhỏ vào khay) mà không cần biểu tượng java xấu xí


0

Theo tôi thấy không có giải pháp tốt hơn rõ ràng, có thể điều này sẽ giúp:

Bạn có thể thoát khỏi khay hoàn toàn!

  • hoặc vô hiệu hóa nó, nếu có thể
  • hoặc thay thế toàn bộ bảng điều khiển bằng một số bảng khác mà bạn có thể định cấu hình thủ công, chỉ cần không thêm phần tử khay. (Tôi thíchxfce4-panel những thứ này)

Nếu bây giờ bạn sẽ bỏ lỡ các tính năng dựa trên khay, hầu hết nên có thể thay thế theo từng trường hợp, như một đoạn mã hiển thị thông báo trên màn hình về một số sự kiện.


1
Ok cảm ơn, nhưng đây rõ ràng không phải là điều tôi muốn. Tôi thích khay thống nhất, tôi chỉ không thích một số biểu tượng khay
wa4557

1
Vâng, đó là nhiều hơn một shot trong bóng tối, về mặt hiểu biết usecase cơ bản của bạn. Đối với máy kiểu 'thiết bị', hãy chạy một ứng dụng cố định, cộng với thanh máy tính để bàn chỉ cho các menu cơ bản. phương pháp thậm chí sẽ hoạt động :) [Nhưng tôi nhớ rằng tôi đã từng thấy một thông điệp của một số chương trình từ chối bắt đầu mà không có bảng điều khiển ...]
Volker Siegel

0

Nếu bạn muốn tất cả các ứng dụng sử dụng biểu tượng khay có thể sử dụng nó trong Ubuntu 14.04, bạn có thể sử dụng PPA đi kèm với Unity được vá để kích hoạt lại danh sách trắng systray. Để thực hiện việc này, hãy mở một thiết bị đầu cuối và chạy các lệnh sau:

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

Sau đó, khởi động lại Unity bằng cách nhấn ALT + F2 và nhập "unity" hoặc bằng cách đăng xuất. PPA hiện tự động đưa vào danh sách trắng tất cả các ứng dụng, do đó không cần phải lập danh sách trắng các ứng dụng riêng lẻ để có thể sử dụng hệ thống.

Hoàn nguyên các thay đổi

Nếu bạn muốn hoàn nguyên các thay đổi và quay lại các gói Unity mặc định từ kho lưu trữ Ubuntu, hãy sử dụng các lệnh bên dưới để xóa danh sách danh sách trắng Unity systray PPA:

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

Từ http://www.webupd8.org/2013/05/how-to-get-systray-whlistist-back-in.html


1
Chào mừng bạn đến hỏi Ubuntu Stak Exchange! Xin vui lòng, bao gồm một phần thiết yếu của liên kết trong câu trả lời của bạn để ngăn chặn phá vỡ bài sau khi liên kết chết.
enedil

2
Đó là một danh sách trắng toàn cầu, có nghĩa là tất cả các chương trình đều nằm trong danh sách trắng. Các chương trình danh sách đen (như chương trình rượu vang và Java) hoàn toàn ngược lại và không hoạt động với phiên bản thống nhất này
wa4557
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.