web-dev-qa-db-ja.com

ランチャーアイコン(スクリプトを開始するため)が点滅し続け、7秒間反応しない。どうすれば解決できますか?

Unityランチャーから起動するスクリプトがあります。アイコンをクリックすると、スクリプトが正常に起動します。

スクリプトの実行に要する時間はわずか1秒ですが、ランチャーアイコンは約7〜8秒間点滅します。この間、ランチャーは占有され、追加のクリックに応答しません。

点滅するアイコンが7秒間スクリプトをブロックしないようにbashスクリプトをカスタマイズできますか?

Ubuntu 15.10。を使用しています。

3
klpu39

馬鹿じゃない

非常に多くの関連 これ 、しかし、わずかに異なるため、点滅、応答しないアイコンは別の問題です。notを追加することで解決します:

StartupNotify=false

ランチャーへ。 apprのアイコンは点滅し続けます。 7秒。両方の質問の問題の背景は同じですが、症状と考えられる解決策はわずかに異なります。

原因

(アイコンをクリックして)UnityランチャーからGUIアプリケーションを起動した後、ランチャーはウィンドウが表示されるのを待ちます。待機中、カーソルが点滅します。ランチャーが「日付」(ウィンドウ)が表示されないという結論に達するまでに時間がかかります。 ただし、待機中、ランチャーはスクリプトを実行するための新しいクリックを受け入れません(再度)。

上記のリンクされた質問のソリューション、追加

StartupNotify=false

doesマウスカーソルの回転ホイールを解決しますが、notはアイコンを再び反応させます。

次に、何が機能しますか?

ただし、リンクされた回答の他のソリューション(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からスクリプトを実行すると、アイコンが7秒間点滅しなくなります。

1
Jacob Vlijm