দুর্দান্ত প্রশ্ন।
কারণ
সাধারণত, ইউনিটি লঞ্চার থেকে জিইউআই অ্যাপ্লিকেশন শুরু করার সময়, লঞ্চটি উইন্ডোটি প্রদর্শিত হওয়ার জন্য অপেক্ষা করে। অপেক্ষা করার সময় এটি "স্পিনিং হুইল" দেখায়। এটি অবশ্য চিরকাল অপেক্ষা করবে না; প্রায় 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উভয় প্রবর্তকটিকে ইউনিটি লঞ্চারে টেনে আনুন। তাদের ক্লিক করুন এবং আচরণের পার্থক্য দেখুন।
সম্পাদনা করুন; যদি এটি আপনাকে সত্যিই বিরক্ত করে, ityক্যটিকে একটি নকল উইন্ডো খাওয়ান
কুইললিস্টে আপনার যদি অনেক স্ক্রিপ্ট থাকে, এবং / অথবা এটি আপনাকে সত্যিই বিরক্ত করে তোলে, অন্য একটি অঙ্গরাগ সমাধান রয়েছে; আমরা আপনার স্ক্রিপ্টে অন্তর্ভুক্ত করার জন্য উইন্ডো দেখানোর জন্য, জাল , অদৃশ্য (সম্পূর্ণ স্বচ্ছ) করতে পারি। আপনার লিপিটি তখন (যেমন) হবে
#/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)
এটি হ'ল, চক্রটি কেবলমাত্র যতক্ষণ স্ক্রিপ্টটি চালিত হবে ততক্ষণ স্পিন করবে।
ব্যাখ্যা
স্ক্রিপ্টটি একটি সর্বনিম্ন উইন্ডো তৈরি করে । উইন্ডোটি সম্পূর্ণ স্বচ্ছ এবং এর আকার 0x0 পিক্সেল এবং এইভাবে অদৃশ্য। এটি উপস্থিত থাকলে এটি তাত্ক্ষণিকভাবে নিজেকে ধ্বংস করবে।
আপনার স্ক্রিপ্টের শেষে উইন্ডোটি কল করে, আপনি চাকাটি ঘুরিয়ে থামিয়ে উইন্ডোটির জন্য ityক্যের ইচ্ছা পূরণ করবেন।