बहुत बढ़िया सवाल।
कारण
आम तौर पर, एकता लांचर से जीयूआई अनुप्रयोगों को शुरू करते समय, लांचर एक खिड़की के सामने आने का इंतजार करता है। प्रतीक्षा करते समय, यह "चरखा" दिखाता है। हालांकि यह हमेशा के लिए इंतजार नहीं करेगा; लगभग 20 सेकंड के बाद, लांचर मान लेता है कि खिड़की दिखाई नहीं देगी और इंतजार करना छोड़ देगी।
1. एप्लिकेशन के लॉन्चर का मुख्य कमांड
एक में .desktop
फ़ाइल, पहले के विषय में Exec=
लाइन (मुख्य कमान), तो आप कर सकते हैं बता इंतजार है या नहीं, एक लाइन में करने के लिए लांचर:
StartupNotify=true
इंतजार करना, या
StartupNotify=false
इंतजार करने के लिए नहीं ।
2. एक लॉन्चर का क्विकलिस्ट आइटम
लॉन्चर के संभावित क्विकलिस्ट (राइट-क्लिक) के लिए हालांकि, डिफ़ॉल्ट मूल्य है StartupNotify=true
। दुर्भाग्य से, यह मान निश्चित है और इसे किसी भी चीज़ से नहीं बदला जा सकता है।
इसका मतलब है कि यदि आप यूनिटी लॉन्चर में लॉन्चर आइकन पर राइट-क्लिक करने से कोई कमांड शुरू करते हैं, तो लॉन्चर को विंडो की उम्मीद होती है और वह चरखा दिखाता है।
लब्बोलुआब यह है कि, हालांकि, यह समझाया जा सकता है, इस समय इस मुद्दे का कोई समाधान नहीं प्रतीत होता है, अन्य तो अपनी स्क्रिप्ट के लिए एक समर्पित लांचर बनाने और StartupNotify=false
फ़ाइल में लाइन जोड़ने के लिए।
सबूत
आप स्वयं व्यवहार का परीक्षण कर सकते हैं। दो लॉन्चर बनाएं:
[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
, एकता लांचर के लिए पर दोनों लांचर खींचें। उन्हें क्लिक करें और व्यवहार में अंतर देखें।
संपादित करें; अगर यह वास्तव में आपको परेशान करता है, तो एकता को एक नकली खिड़की खिलाएं
यदि आपके पास quicklists में कई स्क्रिप्ट हैं, और / या यह वास्तव में आपको परेशान करता है, तो एक और कॉस्मेटिक समाधान है; हम आपकी स्क्रिप्ट में शामिल करने के लिए एक खिड़की दिखाने के लिए नकली , अदृश्य (पूरी तरह से पारदर्शी) हो सकते हैं। आपकी स्क्रिप्ट तब होगी (उदाहरण के लिए)
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
fake_window
जहां कमांड fake_window
हमारी (नकली-) विंडो को कहेगी, एकता को चरखा खत्म करेगी।
स्थापित कैसे करें
- बनाएँ, अगर यह अभी तक मौजूद नहीं है, तो निर्देशिका
~/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
)
यही है, पहिया अब केवल तभी तक स्पिन करेगा जब तक स्क्रिप्ट चलती है।
व्याख्या
स्क्रिप्ट करता है एक minimalistic बना सकते हैं। हालांकि खिड़की पूरी तरह से पारदर्शी है और इसका आकार 0x0 पिक्सेल है और इस प्रकार यह अदृश्य है। एक बार मौजूद होने के बाद यह तुरंत नष्ट हो जाएगा।
अपनी स्क्रिप्ट के अंत में विंडो को कॉल करके, आप स्पिन के लिए पहिया को रोकते हुए, विंडो के लिए एकता की इच्छा को पूरा करेंगे।