วิธีการรีเฟรชเมนูแอปพลิเคชันไอคอนตัวเรียกใช้งานใน ubuntu 12.04


10

หลังจากแก้ไขไฟล์เดสก์ท็อป/usr/share/applicationsแล้วฉันต้องรีเฟรชเมนูแอปพลิเคชันไอคอนตัวเรียกใช้เพื่อให้การปรับเปลี่ยนของฉันปรากฏขึ้น เพื่อความชัดเจนเมนูที่ควรได้รับการแก้ไขคือเมนูที่ปรากฏขึ้นด้วยการคลิกขวาเมื่อตัวชี้อยู่บนไอคอนของตัวเรียกใช้ (แถบขนาดใหญ่ที่เต็มไปด้วยไอคอนทางด้านซ้ายของหน้าจอ)

คำตอบที่ดีที่สุดจะเป็นบรรทัดคำสั่งง่ายๆ

ฉันไม่ได้ใช้ ubuntu-2d และฉันไม่ต้องการออกจากระบบ / เข้าสู่ระบบ

ฉันรู้วิธีแก้ปัญหาบางส่วน:

  • unity --replace โหลดซ้ำทุกอย่าง (ตกแต่งหน้าต่างพื้นที่แจ้งเตือน ... )
  • killall ubuntu-2d-launcher เป็น ubuntu-2d เท่านั้น แต่ถ้ามีคำสั่งหนึ่งบรรทัดที่คล้ายกันสำหรับความสามัคคีนั่นจะเป็นทางออกที่ดี
  • ออกจากระบบจากนั้นเข้าสู่ระบบกลับไปทำงานด้วย แต่ฉันไม่สามารถเสียเซสชั่นทั้งหมดของฉันเพียงเพื่อปรับปรุงเมนู
  • บน ubuntu 14.04 ฉันไม่มีปัญหานี้: การเปลี่ยนแปลงใด ๆ ที่ทำกับไฟล์ "* .desktop" ดูเหมือนว่าจะได้รับการถ่ายทอดสดอีกครั้ง

ข้อเสนอแนะใด ๆ มีวิธีขอบคุณ ccsm หรือไม่?


สวัสดี @vaab ฉันมีไฟล์ dekstop และฉันเปลี่ยนไอคอนของมันโดยแก้ไขพา ธ ภายในไฟล์. desktop ทางออกที่ยอมรับได้คือสิ่งที่คุณไปด้วยหรือไม่? unity --replaceทำงานอย่างไร ฉันไม่รังเกียจการโหลดของทุกสิ่ง
Noitidart

ยืนยันว่าใช้unity --replaceงานได้ในUbuntu 16.04แต่จะไม่โหลดแอปพลิเคชันหนัก ๆ เช่น Chrome, Thunderbirds ...
PhatHV

@PhatHV: โอ้ขอโทษด้วยมันไม่ได้โหลดแอปพลิเคชันใด ๆ เพียงความสามัคคีเท่านั้นที่ถูกโหลดใหม่ แต่มันจัดการแง่มุมที่แตกต่างกันของจอแสดงผลเพื่อให้องค์ประกอบที่แสดงจะถูกรีเฟรชทุกครั้ง
vaab

คำตอบ:


8

วิธีที่หรูหราที่สุดคือ "รีสตาร์ท" ไอคอน เพื่อลบไอคอนออกจากตำแหน่งในตัวเรียกใช้และแทนที่มันในตำแหน่งเดียวกัน สคริปต์ด้านล่างทำงานได้ดี มันอยู่ใน python2 เนื่องจาก 12.04 ไม่ได้มาพร้อมกับ python3 โดยค่าเริ่มต้น อย่างไรก็ตามมันสามารถใช้ใน python3 ได้เช่นกันเพียงแค่เปลี่ยน shebang ในกรณีนั้น สคริปต์นี้ยังมีประโยชน์ (ใน Ubuntu รุ่นต่อมาเช่นกัน) เพื่อใช้ไอคอนที่เปลี่ยนแปลงทันทีเช่น

คุณสามารถใช้งานได้โดยการเรียกใช้สคริปต์ด้วยไฟล์เดสก์ท็อปที่แก้ไขแล้วเป็นอาร์กิวเมนต์ (ดูเพิ่มเติมด้านล่าง)

หมายเหตุ : ใน 12.04 หากไอคอนที่รีเฟรชแสดงถึงแอปพลิเคชันที่กำลังทำงานแอปพลิเคชันที่เป็นปัญหาจะมีปัญหาดังที่อธิบายไว้ในคำถามนี้ดังนั้นหากคุณใช้ให้แน่ใจว่าแอปพลิเคชันไม่ทำงาน ใน 14.04 ไอคอนจะไม่รีเฟรชในกรณีที่แอปพลิเคชันที่ทำงานอยู่

สคริปต์

#!/usr/bin/env python

import subprocess
import time
import sys

desktopfile = sys.argv[-1]

def read_currentlauncher():
    # reads the current launcher contents
    get_launcheritems = subprocess.Popen([
        "gsettings", "get", "com.canonical.Unity.Launcher", "favorites"
        ], stdout=subprocess.PIPE)
    return get_launcheritems.communicate()[0].decode("utf-8")

def set_launcher(llist):
    # sets a defined unity launcher list
    current_launcher = str(llist).replace(", ", ",")
    subprocess.Popen([
        "gsettings", "set", "com.canonical.Unity.Launcher", "favorites",
        current_launcher,
        ])

def refresh_icon(desktopfile):
    current_launcher = read_currentlauncher()
    current_launcher_temp = eval(current_launcher)
    item = [item for item in current_launcher_temp if desktopfile in item][0]
    index = current_launcher_temp.index(item)
    current_launcher_temp.pop(index)
    set_launcher(current_launcher_temp)
    time.sleep(2)
    set_launcher(current_launcher)

refresh_icon(desktopfile)

วิธีใช้งาน

  • คัดลอกสคริปต์ข้างต้นลงในไฟล์เปล่าและเก็บไว้เป็น refresh.py
  • เพื่อเหตุผลด้านความสะดวกให้ใช้งานได้
  • รีเฟรชไอคอนด้วยคำสั่ง:

    /path/to/script/refresh.py name_of_edited_desktopfile (e.g. 'firefox.desktop')
    

หากคุณต้องการทำให้มันเรียบจริงๆ

  • ทำให้ปฏิบัติการสคริปต์เอานามสกุลบันทึกไว้ใน.py ~/binหลังจากออกจากระบบ / คุณสามารถเรียกใช้โดยคำสั่ง:

    refresh firefox.desktop (as an example)
    

เพื่อความราบรื่นที่สุด: pythonhosted.org/watchdog
EoghanM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.