ตำแหน่งเริ่มต้นสำหรับไอคอนตัวบ่งชี้ที่ไม่ใช่ค่าเริ่มต้นหรือไม่
ไม่มีตำแหน่งเริ่มต้นที่จัดเก็บไอคอนเหล่านี้ แอปพลิเคชันใด ๆ (-developer) สามารถเก็บไว้ในที่ที่เหมาะสม
อย่างไรก็ตามข่าวดีก็คือว่าตัวบ่งชี้มักจะไม่ติดตั้งรายการไฟล์และรูปภาพที่ไม่สิ้นสุด เราสามารถ จำกัด การค้นหาของเราโดย (นอกเหนือจากการมองเข้าไปในโค้ด) ดูที่ผลลัพธ์ของคำสั่ง:
dpkg-query -L <packagename>
ในตัวอย่างของฉัน
dpkg-query -L placesfiles
สิ่งนี้จะอยู่ในหมู่ผู้อื่นเอาท์พุทภาพต่อไปนี้:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... ซึ่งจะทำให้การค้นหาค่อนข้าง จำกัด
จากมนุษย์dpkg-query
:
-l, --list [package-name-pattern...]
List packages matching given pattern. If no package-name-pattern
is given, list all packages in /var/lib/dpkg/status, excluding
the ones marked as not-installed (i.e. those which have been
previously purged). Normal shell wildcard characters are allowed
in package-name-pattern. Please note you will probably have to
quote package-name-pattern to prevent the shell from performing
filename expansion. For example this will list all package names
starting with “libc6”:
ในกรณีของRadiotrayฉันพบ.png
ไฟล์ต่อไปนี้(กำลังทำงานdpkg-query -L radiotray | grep png
):
/usr/share/radiotray/images/radiotray_connecting.png
/usr/share/radiotray/images/radiotray_on.png
/usr/share/radiotray/images/radiotray_off.png
/usr/share/radiotray/images/radiotray.png
/usr/share/pixmaps/radiotray.png
หากเราต้องการค้นหาจริงๆให้ค้นหารหัส
... เราสามารถค้นหาไฟล์ที่ติดตั้ง (ภายใน) เพื่อดูรายการที่ตรงกันของสตริง "ไอคอน" ตัวบ่งชี้หลายตัวถูกเขียนในหนึ่งในภาษาสคริปต์ (เช่นpython
) ซึ่งหมายความว่าพวกเขาสามารถค้นหาได้ดีมาก
ตัวอย่าง
อีกครั้งโดยใช้radiotray
ตัวอย่าง
dpkg-query -L radiotray | xargs grep icon
ในผลลัพธ์เราพบ ao:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
เมื่อมองเข้าไปในไฟล์SysTrayGui.py
เราจะเห็น:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
จากนี้เราสามารถสรุปได้ไอคอนดังกล่าวมีการกำหนดไว้ในโมดูลภายในไดเรกทอรีcommon
(ย่อย) lib
(ดูที่นี่วิธีที่หลามค้นพบโมดูลส่วนไดเรกทอรีย่อย )
ในโมดูลนี้เราสามารถอ่านหัวข้อ:
# Media path
if os.path.exists(os.path.abspath('../data/images/')):
IMAGE_PATH = os.path.abspath('../data/images/')
else:
IMAGE_PATH = '%s/%s/images' % (datadir, APPDIRNAME)
# Images
APP_ICON = os.path.join(IMAGE_PATH, 'radiotray.png')
APP_ICON_ON = os.path.join(IMAGE_PATH, 'radiotray_on.png')
APP_ICON_OFF = os.path.join(IMAGE_PATH, 'radiotray_off.png')
APP_ICON_CONNECT = os.path.join(IMAGE_PATH, 'radiotray_connecting.gif')
APP_INDICATOR_ICON_ON = "radiotray_on"
APP_INDICATOR_ICON_OFF = "radiotray_off"
APP_INDICATOR_ICON_CONNECT = "radiotray_connecting"
... และที่นี่เราอยู่ ...
สถานการณ์พิเศษ
ด้วยการใช้งานตัวชี้วัดทั้งหมดของฉันฉันสามารถหาไอคอนที่เกี่ยวข้องได้โดยใช้วิธีการด้านบน
จะกลายเป็นไปได้อย่างไรก็ตามในการรวบรวมภาพร่วมกับรหัสเป็นปฏิบัติการเดียว ไม่จำเป็นต้องอธิบายว่าในกรณีเช่นนี้คุณจะไม่พบภาพแยกต่างหากและคุณจะไม่สามารถแทนที่ได้โดยไม่ต้องแก้ไขโค้ดและคอมไพล์ใหม่
กรณีของ owncloud น่าจะเป็นกรณีเช่นนี้ โดยใช้วิธีการดังกล่าวข้างต้น (s) /usr/share/icons/hicolor/<size>/apps
แสดงให้เห็นว่าชุดของไอคอนได้รับการติดตั้งอยู่ภายใน ไม่มีไอคอนเหล่านี้จะออกมาถูกนำมาใช้ แต่ในตัวบ่งชี้ในอูบุนตู
OP ค่อนข้างทำงานก่อน (และหลัง) เขาถามคำถามนี้ หนึ่งในนั้นคือการเรียกใช้:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... ซึ่งทำให้เรามีข้อมูลที่เป็นประโยชน์บ้าง เอาท์พุทรวมส่วน:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
เมื่อมองเข้าไปในไดเรกทอรี/tmp/iconcache-50ePXx
ฉันพบไอคอนที่ถูกต้องซึ่งใช้โดยตัวบ่งชี้:
... ซึ่งดูเหมือนว่าจะพิสูจน์ไอคอนเหล่านี้ถูกสร้างขึ้นทันที ปิด owncloud ทำให้ไดเรกทอรีและไอคอนหายไป
เป็นไปได้ที่จะเปลี่ยนไอคอนของตัวบ่งชี้โดยแทนที่ไอคอนเหล่านี้:
ซึ่งพิสูจน์ได้ว่าสิ่งเหล่านี้เป็นไอคอนที่เรากำลังมองหา
ในการทำให้สิ่งที่ฉันทำด้วยตนเองเป็นแบบอัตโนมัติจะต้องมีสคริปต์ / wrapper เนื่องจากชื่อของไดเรกทอรีที่สร้างขึ้นจะเปลี่ยนไปทุกครั้งที่มีการเปิดตัวคลาวด์ ตัวเลือกที่สะดวกที่สุดแน่นอนว่ารหัสของลูกค้าจะเปลี่ยนไป
ดูเพิ่มเติมสนทนาของเราที่นี่
ยังมีต่อ...
dpkg -L
ทำในสิ่งเดียวกันได้หรือไม่