素晴らしい質問です。
原因
通常、UnityランチャーからGUIアプリケーションを起動するとき、ランチャーはウィンドウが表示されるのを待ちます。待っている間、「回転する車輪」が表示されます。ただし、永遠に待つことはありません。約20秒後、ランチャーはウィンドウが表示されないと想定し、待機をあきらめます。
1.アプリケーションのランチャーのメインコマンド
では.desktop
まずに関するファイル、Exec=
行(メインコマンド)、次のことができます伝えるラインではなく、待ったりするランチャーを:
StartupNotify=true
待つか、
StartupNotify=false
それは作るためではない待ちます。
2.ランチャーのクイックリストアイテム
ただし、ランチャーのクイックリスト(右クリック)項目の場合、デフォルト値はStartupNotify=true
です。残念ながら、この値は固定されており、何も変更することはできません。
あなたが開始した場合、その手段があることどのユニティランチャーでランチャーアイコンを右クリックしてからコマンドを、ランチャーは糸車を示し、それのためにウィンドウを待つ期待しています。
一番下の行は、説明することはできますが、現時点では問題の解決策がないようです。それ以外は、スクリプト専用のランチャーを作成しStartupNotify=false
て、ファイルに行を追加します。
の証拠
動作を自分でテストできます。2つのランチャーを作成します。
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=true
そして:
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=false
test1.desktop
およびとして保存しtest2.desktop
、両方のランチャーをUnityランチャーにドラッグします。それらをクリックして、動作の違いを確認します。
編集; それがあれば、本当にあなたを悩ます、ユニティに偽のウィンドウを養います
あなたが持っている場合は、多くのクイックリストにあるスクリプトを、および/または、それは本当にあなたを悩ます、他の化粧品の解決策があります。スクリプトをインクルードするために、ウィンドウを表示するために見せかけ(完全に透明)にすることができます。スクリプトは次のようになります(例)
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
fake_window
コマンドfake_window
が(偽の)ウィンドウを呼び出し、Unityが回転ホイールを終了するようにします。
設定方法
- ディレクトリがまだ存在しない場合は作成します
~/bin
以下のスクリプトを空のファイルにコピーし、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()
スクリプトの最後に次のコマンドを追加します。
fake_window
ログアウトしてからログインし直します(または実行しますsource ~/.profile
)
これで、ホイールはスクリプトが実行されている間のみ回転します。
説明
このスクリプトは、最小限のウィンドウを作成します。ただし、ウィンドウは完全に透明であり、サイズは0x0ピクセルであるため、表示されません。存在するとすぐに破壊されます。
スクリプトの最後にウィンドウを呼び出すと、Unityのウィンドウに対する希望が満たされ、ホイールが回転しなくなります。