Mükemmel soru.
Neden
Normalde, GUI uygulamalarını Unity Launcher'dan başlatırken, başlatıcı bir pencerenin görünmesini bekler. Beklerken "çıkrık" gösterir. Ancak sonsuza kadar beklemeyecektir; yaklaşık 20 saniye sonra, başlatıcı pencerenin görünmeyeceğini varsayar ve beklemeyi bırakır.
1. Bir uygulamanın başlatıcısının ana komutu
Bir .desktop
dosyada, ilk Exec=
satırla (ana komut) ilgili olarak, başlatıcıya bir satırda beklemesini veya beklememesini söyleyebilirsiniz :
StartupNotify=true
bekletmek için, ya da
StartupNotify=false
bunu yapmak için değil bekleyin.
2. Başlatıcıdaki hızlı liste öğeleri
Ancak bir başlatıcıdaki olası hızlı liste (sağ tıklama) öğeleri için varsayılan değer şudur StartupNotify=true
. Ne yazık ki, bu değer sabittir ve hiçbir şeyle değiştirilemez.
Bu , Unity Launcher'da bir başlatıcı simgesini sağ tıklatarak herhangi bir komutu başlatırsanız , başlatıcı bir pencere bekler ve çıkrık gösteren bir pencere bekler.
Sonuç olarak, açıklanabilse de, şu anda soruna bir çözüm yok gibi görünüyor, diğeri komut dosyanız için özel bir başlatıcı oluşturuyor ve satırı StartupNotify=false
dosyaya ekliyor .
Kanıt
Davranışı kendiniz test edebilirsiniz. İki fırlatıcı oluşturun:
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=true
ve:
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=false
Bunları farklı kaydedin test1.desktop
ve test2.desktop
her iki başlatıcıyı da Unity başlatıcısına sürükleyin. Onları tıklayın ve davranıştaki farkı görün.
Düzenle; eğer gerçekten sizi rahatsız ediyorsa, Unity'ye sahte bir pencere besleyin
Hızlı listelerde çok sayıda komut dosyanız varsa ve / veya gerçekten sizi rahatsız ediyorsa, başka bir kozmetik çözüm var; Biz yapabilirsiniz sahte , görünmez (tamamen saydam) Senaryonuzun dahil edilecek, bir pencere göstermek için. betiğiniz daha sonra (ör.)
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
fake_window
burada komut fake_window
(sahte-) penceremizi çağırır ve Unity'nin çıkrıyı bitirmesini sağlar.
Nasıl kurulur
- Henüz yoksa dizini oluşturun
~/bin
Aşağıdaki komut dosyasını boş bir dosyaya kopyalayın, fake_window
(uzantı yok) olarak kaydedin ~/bin
ve yürütülebilir yapın
#!/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()
Komut dosyanızın en sonuna şu komutu ekleyin:
fake_window
Oturumu kapatıp tekrar açın (veya çalıştırınsource ~/.profile
)
İşte bu, tekerlek artık sadece komut dosyası çalıştığı sürece dönecektir.
açıklama
Komut yapar minimalist pencere oluşturmak. Ancak pencere tamamen şeffaftır ve 0x0 piksel boyutundadır ve bu nedenle görünmezdir. Var olduğunda kendini anında yok edecektir.
Senaryonuzun sonundaki pencereyi çağırdığınızda, Unity'nin pencere açma isteğini yerine getirerek tekerleğin dönmesini durduracaksınız.