অ্যাপ্লিকেশন চালানোর জন্য আদেশটি পুনর্নির্দেশ করা হচ্ছে
বেশিরভাগ অ্যাপ্লিকেশনগুলি তাদের উইন্ডোটি স্ক্রিনে খোলায় সেগুলি আরম্ভ করা হয়েছিল (ড্যাশ বা লঞ্চ থেকে)। কিছু অ্যাপ্লিকেশন তবে তা করে না, তবে নীচের স্ক্রিপ্টের মাধ্যমে অ্যাপ্লিকেশনটি চালানোর জন্য আদেশটি পুনর্নির্দেশের মাধ্যমে তাদের বাধ্য করা যেতে পারে। এটি করার জন্য, আপনাকে সংশ্লিষ্ট .desktop
ফাইল (লঞ্চার) সম্পাদনা করতে হবে ।
সেটআপটি কিছুটা জটিল বলে মনে হচ্ছে, তবে যদি পদ্ধতিটি অনুসরণ করা হয় ("কীভাবে ব্যবহার করবেন"), এটি মোটেও খুব বেশি কঠিন হওয়া উচিত নয়।
কিভাবে এটা কাজ করে
- স্ক্রিনটি মাউসের অবস্থানটি পড়বে যে মুহুর্তে আপনি ল্যাঞ্চারটি ক্লিক করেন বা ড্যাশ থেকে অ্যাপ্লিকেশনটি চয়ন করেন এবং কোন স্ক্রিনে (বাম / ডানদিকে) তা নির্ধারণ করে।
- পরবর্তীকালে, এটি আপনি যে অ্যাপ্লিকেশনটি (পিড) শুরু করেছেন তার মালিকানাধীন নতুন উইন্ডোটি আসার অপেক্ষা করে।
- উইন্ডোটি উপস্থিত হওয়ার পরে, এটি উইন্ডো (স্ক্রিন-) অবস্থানটি মাউসের (স্ক্রিন-) প্রাথমিক অবস্থানের সাথে মেলে কিনা তা পরীক্ষা করে।
- যদি তা না হয় তবে এটি উইন্ডোটিকে স্ক্রিনে নিয়ে যায় আপনি অ্যাপ্লিকেশনটি শুরু করেছিলেন। বেশিরভাগ ক্ষেত্রে, ক্রিয়াটি উইন্ডোটির অস্তিত্বের (খুব) প্রথম পর্যায়ে থাকবে, সুতরাং আপনি এটি লক্ষ্য করবেন না।
ইস্যু / সমাধান
একটি খারাপ দিক রয়েছে: আপনি যদি এই স্ক্রিপ্টটি কল করার জন্য আদেশের মাধ্যমে .desktop
ফাইলের প্রধান কমান্ডটি প্রতিস্থাপন করেন , "ওপেন উইথ" ডান ক্লিকটি সঠিকভাবে কাজ করবে না। গুগল ক্রোমের মতো ওয়েব ব্রাউজারের ক্ষেত্রে এটি খুব বেশি সমস্যা হবে না। অন্যান্য অ্যাপ্লিকেশনগুলির সাথে, একটি সহজ সমাধান হ'ল শর্টকাট হিসাবে বর্তমান পর্দায় একটি নতুন উইন্ডো খোলার বিকল্প যুক্ত করা (আরও নীচে দেখুন)।
ব্যবহারবিধি:
স্ক্রিপ্ট দুটি wmctrl
এবং ব্যবহার করে xautomation
:
sudo apt-get install xautomation
sudo apt-get install wmctrl
ডিরেক্টরি ~/bin
উপস্থিত না থাকলে এটি তৈরি করুন ।
একটি ফাঁকা ফাইলে স্ক্রিপ্টটি অনুলিপি করুন, এতে open_oncurrent
(কোনও প্রসার নেই) হিসাবে এটি সংরক্ষণ করুন~/bin
- এটি সম্পাদনযোগ্য (!) করুন
সংশ্লিষ্ট কপি .desktop
থেকে ফাইল /usr/share/applications
থেকে ~/.local/share/applications
:
cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/google-chrome.desktop
এতে স্থানীয় কপিটি খুলুন ~/.local/share/applications
:
gedit ~/.local/share/applications/google-chrome.desktop
ফাইলটি সম্পাদনা করুন (দুটি বিকল্প):
লঞ্চারের প্রধান কমান্ডটি পরিবর্তন করতে :
শর্টকাট হিসাবে বিকল্পটি যুক্ত করতে (উপরের চিত্রের মতো):
লাইনটি সন্ধান করুন:
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito;
এটি দ্বারা প্রতিস্থাপন:
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito;New window on this screen;
তারপরে ফাইলটির একেবারে শেষের অংশে নিম্নলিখিত বিভাগটি যুক্ত করুন:
[New window on this screen Shortcut Group]
Name=New window on this screen
Exec=/bin/bash -c "open_oncurrent /usr/bin/google-chrome-stable"
TargetEnvironment=Unity
অন্যান্য অ্যাপ্লিকেশনগুলির সাথে কীভাবে ব্যবহার করবেন:
একইভাবে, আপনি অন্যান্য অ্যাপ্লিকেশনগুলির সমাধান প্রয়োগ করতে পারেন। .desktop
উদাহরণস্বরূপ ফাইলগুলিতে ব্যবহারের জন্য কমান্ডের বাক্য গঠন :
Exec=/bin/bash -c "open_oncurrent <command>"
ব্যতিক্রমগুলি কীভাবে মোকাবেলা করা যায় সে সম্পর্কে একটি ছোট্ট অতিরিক্ত ব্যাখ্যা স্ক্রিপ্টে রয়েছে।
এই পান্ডুলিপি
#!/usr/bin/env python3
import subprocess
import sys
import time
import getpass
t = 0; user = getpass.getuser(); application = sys.argv[1]
"""
In most cases, the command to run an application is the same as the process
name. There are however exceptions, to be listed below, if you use these appli-
cations i.c.w. this script. Just add an item to the list in the format:
["<command>", "<process_name>"],
"""
exceptions = [
["/usr/bin/google-chrome-stable", "chrome"],
]
try:
procname = [app[1] for app in exceptions if app[0] == application][0]
except IndexError:
procname = application
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
# initial position of the mouse (click position)
start_pos = int(get("xmousepos").strip().split()[0])
# x- position of right side of the screen
x_res = [int(s.split("x")[0]) for s in get("xrandr").split() if s.endswith("+0+0")][0]
# current windows
start_windows = get("wmctrl -l")
# open application
subprocess.call(["/bin/bash", "-c", application+"&"])
while t < 30:
procs = get("ps -u "+user).splitlines()
new = [w for w in get("wmctrl -lpG").splitlines() if not w.split()[0] in start_windows]
match = sum([[line for line in procs if w.split()[2] in line and procname[:15] in line] for w in new], [])
if len(match) == 1:
data = new[0].split(); curr_pos = int(data[3]); compare = (start_pos > x_res, curr_pos > x_res)
if compare[0] == compare[1]:
pass
else:
if compare[0] == True:
data[3] = str(int(data[3])+x_res)
else:
data[3] = str(int(data[3])-x_res)
cmd1 = "wmctrl -r "+data[0]+" -b remove,maximized_vert,maximized_horz"
cmd2 = "wmctrl -ir "+data[0]+" -e 0,"+(",").join(data[3:7])
for cmd in [cmd1, cmd2]:
subprocess.Popen(["/bin/bash", "-c", cmd])
break
t = t + 1
time.sleep(0.5)