วิธีการป้องกันไม่ให้แอปพลิเคชัน Java สร้างไอคอนถาด?


16

ด้วย Ubuntu 13.04 ความเป็นไปได้ที่จะขึ้นบัญชีขาว (และขึ้นบัญชีดำ) แอพพลิเคชั่นบางอย่างจากการสร้างไอคอนถาดจะหายไป ตั้งแต่นั้นไอคอนถาดของแอปพลิเคชัน Java และไอคอนไวน์จะถูกเข้ารหัสและมองเห็นได้ตลอดเวลา

แม้ว่าจะมี ppas บางตัว แต่ก็มี patch ที่เป็นเอกภาพด้วยการมอบ systray.whitelist กลับคืนมา (ไม่ใช่สำหรับ 14.04 แต่) ฉันต้องการทราบว่ามีวิธีอื่นในการซ่อนไอคอนถาดของแอป Java (เช่น JDownloader)

ฉันรู้ว่ามีวิธีในการทำเช่นนั้นสำหรับ qt-applications โดยการใช้โปรไฟล์ apparmor ที่ปฏิเสธการเข้าถึงแพ็คเกจ sni-qt (เช่น Skype หรือ Spotify)

มีวิธีการใช้โปรไฟล์ apparmor หรือสิ่งที่คล้ายกันสำหรับโปรแกรม Java และ / หรือโปรแกรมไวน์หรือไม่

ขอบคุณ


1
คุณสามารถเข้าถึงไอคอนของพวกเขาและเปลี่ยนเป็นโปร่งใสและเล็กดังนั้นจึงใช้พื้นที่เกือบจะไม่มีที่ว่างและมองไม่เห็น?
ทิม

2
ความคิดที่ดี แต่ไม่มี ดูเหมือนว่าสถานที่ 16x16 จะถูกสงวนไว้สำหรับโปรแกรม Java โดยการเปลี่ยนเป็น svg ขนาด 1px ที่มองไม่เห็นเราจะได้รับไอคอน 16x16 ที่ไม่โปร่งใส
wa4557

1
ตกลงนั่นเป็นเรื่องน่าละอาย ...
ทิม

คำตอบ:


2

สำหรับ Java Apps:

  • จริงๆแล้วสำหรับกรณี JDownloader มันเป็นการออกแบบแบบแยกส่วน ไอคอนถาดมาเป็นปลั๊กอินที่สามารถปิดการใช้งานจาก:

    JDownloader → Addons → Addon Manager →ส่วนขยาย→ยกเลิกการเลือกช่องเปิดใช้งานสำหรับJD Light Tray

  • สำหรับกรณีทั่วไปของแอปพลิเคชัน 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 เป็นเครื่องมือ 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 (มีประโยชน์สำหรับการย่อขนาดลงในถาด) โดยไม่มีไอคอน Java ที่น่าเกลียด


0

เนื่องจากฉันไม่เห็นวิธีแก้ปัญหาที่ดีกว่าอย่างชัดเจนเป็นไปได้ว่าสิ่งนี้จะช่วยได้:

คุณสามารถกำจัดถาดทั้งหมดได้!

  • ทั้งปิดการใช้งานถ้าเป็นไปได้
  • หรือแทนที่พาเนลทั้งหมดโดยบางอันที่คุณสามารถกำหนดค่าด้วยตนเองเพียงแค่ไม่เพิ่มองค์ประกอบถาด (ฉันชอบxfce4-panelสิ่งเหล่านี้)

หากคุณจะพลาดฟีเจอร์ที่อิงกับถาดในตอนนี้ส่วนใหญ่จะเป็นกรณีที่สามารถเปลี่ยนใหม่ได้แล้วแต่กรณีเช่น scrip ที่แสดงการแจ้งเตือนบนเดสก์ท็อปในบางเหตุการณ์


1
โอเคขอบคุณ แต่นี่ไม่ใช่สิ่งที่ฉันต้องการ ฉันชอบ unity-tray ฉันแค่ไม่ชอบไอคอน
-Tray

1
ใช่นั่นเป็นการถ่ายภาพในที่มืดมากกว่าในแง่ของการรู้พื้นฐานของคุณ สำหรับเครื่องสไตล์ 'appliance' ให้เรียกใช้หนึ่งแอปพลิเคชั่นคงที่รวมถึง desktop bar สำหรับเมนูพื้นฐานเท่านั้น วิธีการจะทำงาน :) [แต่ฉันจำได้ว่าฉันเคยเห็นข้อความของบางโปรแกรมปฏิเสธที่จะเริ่มต้นด้วยไม่มีแผง ... ]
Volker Siegel

0

หากคุณต้องการให้แอปพลิเคชันทั้งหมดที่ใช้ไอคอนถาดสามารถใช้งานได้ใน Ubuntu 14.04 คุณสามารถใช้ PPA ที่มาพร้อมกับ Unity patched เพื่อเปิดใช้งานรายการที่อนุญาตพิเศษของ systray อีกครั้ง หากต้องการทำสิ่งนี้ให้เปิดเทอร์มินัลแล้วเรียกใช้คำสั่งต่อไปนี้:

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

จากนั้นรีสตาร์ท Unity โดยกด ALT + F2 แล้วป้อน "unity" หรือออกจากระบบ ตอนนี้ PPA จะทำรายการแอพพลิเคชั่นทั้งหมดโดยอัตโนมัติดังนั้นจึงไม่จำเป็นต้องทำการลิสต์แอพแต่ละตัวด้วยตนเองเพื่อให้สามารถใช้งานระบบได้

การคืนค่าการเปลี่ยนแปลง

หากคุณต้องการย้อนกลับการเปลี่ยนแปลงและกลับไปที่แพคเกจ Unity เริ่มต้นจากที่เก็บ Ubuntu ให้ใช้คำสั่งด้านล่างเพื่อกำจัด PPA whitelist 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) เป็นสิ่งที่ตรงกันข้ามอย่างสมบูรณ์และไม่สามารถใช้กับเอกภาพรุ่นนี้ได้
wa4557
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.