Pertanyaan yang sangat bagus
Penyebab
Biasanya, ketika memulai aplikasi GUI dari Unity Launcher, peluncur menunggu jendela muncul. Sambil menunggu, itu menunjukkan "roda berputar". Namun tidak akan menunggu selamanya; setelah sekitar 20 detik, peluncur menganggap jendela tidak akan muncul dan menyerah menunggu.
1. Perintah utama peluncur aplikasi
Dalam sebuah .desktop
file, mengenai Exec=
baris pertama (perintah utama), Anda dapat memberi tahu peluncur untuk menunggu atau tidak, dalam satu baris:
StartupNotify=true
untuk membuatnya menunggu, atau
StartupNotify=false
untuk membuatnya tidak menunggu.
2. Item daftar cepat dari peluncur
Namun untuk item quicklist (klik kanan) peluncur, nilai defaultnya adalah StartupNotify=true
. Sayangnya, nilai ini tetap dan tidak dapat diubah oleh apa pun.
Itu berarti bahwa jika Anda mulai setiap perintah dari mengklik kanan ikon peluncur di Unity Launcher, peluncur mengharapkan jendela dan menunggu, menampilkan roda berputar.
Intinya adalah bahwa, meskipun dapat dijelaskan, tampaknya tidak ada solusi untuk masalah saat ini, selain itu membuat peluncur khusus untuk skrip Anda dan menambahkan baris StartupNotify=false
ke file.
Bukti
Anda dapat menguji perilaku itu sendiri. Buat dua peluncur:
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=true
dan:
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=false
Simpan sebagai test1.desktop
dan test2.desktop
, seret kedua peluncur ke peluncur Unity. Klik mereka dan lihat perbedaan perilaku.
Edit; jika benar benar mengganggu Anda, beri Unity jendela palsu
Jika Anda memiliki banyak skrip dalam daftar cepat, dan / atau itu benar-benar mengganggu Anda, ada solusi kosmetik lain; kami dapat memalsukan , tidak terlihat (sepenuhnya transparan) untuk menampilkan jendela, untuk dimasukkan dalam skrip Anda. skrip Anda akan menjadi (misalnya)
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
fake_window
dimana perintahnya fake_window
akan memanggil jendela (palsu-) kita, membuat Unity mengakhiri roda pemintalan.
Cara mengatur
- Buat, jika belum ada, direktori
~/bin
Salin skrip di bawah ini ke dalam file kosong, simpan sebagai fake_window
(tanpa ekstensi) ~/bin
dan buat itu bisa dieksekusi
#!/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()
Tambahkan sampai akhir skrip Anda perintah:
fake_window
Logout dan kembali (atau jalankansource ~/.profile
)
Itu saja, roda sekarang hanya akan berputar selama skrip berjalan.
Penjelasan
Script memang membuat jendela minimalis. Jendela itu sepenuhnya transparan dan memiliki ukuran 0x0 piksel sehingga tidak terlihat. Itu akan menghancurkan dirinya sendiri segera setelah itu ada.
Memanggil jendela di akhir skrip Anda, Anda akan memuaskan keinginan Unity untuk sebuah jendela, menghentikan roda untuk berputar.