启动器图标(用于启动脚本)持续闪烁并且七秒内无响应,我该如何解决?

启动器图标(用于启动脚本)持续闪烁并且七秒内无响应,我该如何解决?

我有一个脚本,我从 Unity Launcher 启动它。当我单击图标时,我的脚本成功启动。

虽然脚本只需要一瞬间就可以运行,但启动器图标会闪烁大约 7-8 秒,在此期间启动器处于占用状态并且不会响应额外的点击。

我可以自定义我的 bash 脚本,使得闪烁的图标不会在七秒内阻止脚本吗?

我使用 Ubuntu 15.10。

答案1

不是骗子

非常有关的这个,但略有不同,因为闪烁、无响应的图标是另一个问题,不是通过添加解决:

StartupNotify=false

到启动器;图标仍会闪烁约七秒钟。虽然两个问题中的问题是相同的,但症状和可能的解决方案都略有不同。

原因

从 Unity Launcher 启动 GUI 应用程序(通过单击图标)后,启动器会等待窗口出现。等待期间,光标会闪烁。启动器需要一段时间才能得出结论:其“日期”(窗口)不会出现。尽管然而,等待时启动器不会接受新的点击来再次执行脚本。

上述链接问题中的解决方案是添加

StartupNotify=false

解决鼠标光标旋转的问题,但不是使图标再次响应。

那么什么起作用呢?

但是,链接答案中的另一个解决方案(从 Unity 启动器启动非 GUI 脚本时打开一个虚假的、不可见的窗口)也将解决闪烁图标的问题。

来自链接的答案:

  1. 如果目录尚不存在,则创建该目录~/bin
  2. 将以下脚本复制到一个空文件中,并将其另存为fake_window(无扩展名)~/bin 并使其可执行

    #!/usr/bin/env python3
    from gi.repository import Gtk
    from threading import Thread
    import time
    import subprocess
    
    """
    This is a self-destroying window, to "feed" Unity a fake-window, preventing
    the launcher to show a spinning wheel, waiting for a window to appear.
    Include the command to run this script at the end of the (your) script.
    """
    
    class FakeWin(Gtk.Window):
    
        def __init__(self):
            Gtk.Window.__init__(self, title="1526closeme")
            Thread(target = self.close).start()
    
        def close(self):
            t = 0
            while t < 150:
                time.sleep(0.2)
                try:
                    pid = subprocess.check_output(["pgrep", "-f", "fake_window"])\
                          .decode("utf-8").strip()
                    subprocess.Popen(["kill", pid])
                    break
                except subprocess.CalledProcessError:
                    pass
                t += 1
    
    def fakewindow():
        window = FakeWin()
        # make our window transparent
        window.set_opacity(0)
        window.set_default_size(0,0)
        window.show_all()
        Gtk.main()
    
    fakewindow()
    
  3. 在脚本的最后添加命令:

    fake_window
    
  4. 注销并重新登录(或运行source ~/.profile

现在,如果您从 Unity Launcher 运行脚本,图标将不会闪烁七秒。

相关内容