कार्यक्षेत्र प्रति भिन्न एकता लॉन्चर सेट करना:
1. 2. 3. 4।
नीचे दिए गए समाधान से कार्यक्षेत्र प्रति लॉन्चर आइकन का एक अलग सेट होना आसानी से संभव हो जाता है, चाहे आपके पास कितने भी कार्यस्थान हों।
सेटअप में दो भाग शामिल हैं:
वर्तमान कार्यक्षेत्र के लिए लॉन्चर आइकन के सेट को "याद" करने के लिए ए (एक) शॉर्टकट कुंजी संयोजन।
एक स्क्रिप्ट पृष्ठभूमि में चलने के लिए, जो वर्तमान कार्यक्षेत्र का ट्रैक रखता है और संबंधित एकता लांचर सेट करता है। यह तब कार्य करता है जब उपयोगकर्ता कार्यक्षेत्र को स्विच करता है।
यह काम किस प्रकार करता है
दो छोटी स्क्रिप्ट शामिल हैं:
पहले (गिने) कि आपकी होम निर्देशिका, नामित में एक (छुपा) फ़ाइल में वर्तमान लांचर की सामग्री लिखता है अपने वर्तमान कार्यक्षेत्र के बाद: स्क्रिप्ट एक साधारण बात नहीं करता है।
दूसरी स्क्रिप्ट इस बात पर नज़र रखती है कि वर्तमान कार्यक्षेत्र क्या है। यदि कोई कार्यक्षेत्र परिवर्तन है , तो स्क्रिप्ट देखता है कि क्या संबंधित (लॉन्चर-) डेटाफाइल मौजूद है (पहली स्क्रिप्ट द्वारा बनाई गई)। यदि ऐसा है, तो यह फ़ाइल को पढ़ता है और यूनिटी लॉन्चर को बदल देता है, जैसा कि फ़ाइल में याद किया गया है।
बस।
स्थापित कैसे करें
स्क्रिप्ट wmctrl
को स्थापित करने की आवश्यकता है:
sudo apt-get install wmctrl
एक निर्देशिका बनाएं जिसमें दोनों लिपियों को संग्रहीत किया जाएगा। यह महत्वपूर्ण है कि दोनों स्क्रिप्ट को एक निर्देशिका में एक साथ रखा जाता है, क्योंकि वे कार्यक्षमता और दूसरे से एक आयात साझा करते हैं। उसी कारण से, यह महत्वपूर्ण है कि आप उन्हें नीचे दिए गए संकेत के अनुसार नाम दें।
नीचे दी गई प्रत्येक स्क्रिप्ट को एक (अलग) खाली फ़ाइल में कॉपी करें, उन्हें निर्देशिका में बनाया (बनाया 2.
), बिल्कुल नाम:
set_workspace.py
#!/usr/bin/env python3
import subprocess
import os
workspace_data = os.environ["HOME"]+"/.launcher_data_"
key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def current():
# get the current viewport
res = get_res()
vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
def remember_current():
currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
f = workspace_data+current()
open(f, "w").write(currlauncher)
if __name__ == "__main__":
remember_current()
launcher_perworkspace.py
#!/usr/bin/env python3
import subprocess
import set_workspace
import time
workspace_data = set_workspace.workspace_data
key = set_workspace.key
def check_datafile(desktop):
f = workspace_data+str(desktop)
try:
new_launcher = open(f).read()
command = key[1]+key[2]+' "'+str(new_launcher)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
except FileNotFoundError:
pass
curr_dt1 = set_workspace.current()
check_datafile(curr_dt1)
while True:
time.sleep(1)
curr_dt2 = set_workspace.current()
if curr_dt2 != curr_dt1:
check_datafile(curr_dt2)
curr_dt1 = curr_dt2
set_workspace.py
अपनी पसंद के शॉर्टकट कुंजी संयोजन में पहली स्क्रिप्ट ( ) जोड़ें : सिस्टम सेटिंग्स> "कीबोर्ड"> "शॉर्टकट"> "कस्टम शॉर्टकट"। "+" पर क्लिक करें और कमांड जोड़ें:
python3 /path/to/set_workspace.py
कुंजी संयोजन को चलाएं और देखें कि क्या फ़ाइल, जैसे: .launcher_data_3
आपके होम डायरेक्टरी में बनाई गई है। आपको फ़ाइल को दृश्यमान बनाने के लिए Ctrl+ प्रेस करने की आवश्यकता होगी H(फाइलें, .
डिफ़ॉल्ट रूप से अदृश्य हैं)।
अपने कार्यक्षेत्र के माध्यम से नेविगेट करें और प्रक्रिया को दोहराएं: लॉन्चर आइकन का एक संयोजन सेट करें, और उस विशिष्ट कार्यक्षेत्र के लिए सेट को "याद" करने के लिए अपने प्रमुख संयोजन को दबाएं।
आप व्यावहारिक रूप से अब कर रहे हैं। कमांड के साथ पृष्ठभूमि स्क्रिप्ट का परीक्षण करें (टर्मिनल विंडो से, इसे चालू रखें):
python3 /path/to/launcher_perworkspace.py
यदि सभी ठीक काम करता है, और आपका लांचर प्रति कार्यस्थान पर स्विच करता है, तो निम्न कमांड को अपने स्टार्टअप एप्लिकेशन में जोड़ें: डैश> स्टार्टअप एप्लिकेशन> अपडेट:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
टिप्पणियाँ
- यदि आप किसी विशिष्ट कार्यक्षेत्र के लिए लॉन्चर आइकन के सेट को बदलना चाहते हैं, तो बस कार्यक्षेत्र पर नेविगेट करें, अपनी पसंद के अनुसार आइकन जोड़ें / हटाएं और अपनी कुंजी कॉम्बिनेशन दबाएं (पृष्ठभूमि स्क्रिप्ट को पुनरारंभ करने की कोई आवश्यकता नहीं है)।
- टिप्पणी से मुझे लगता है कि वर्तमान कार्यक्षेत्र के लिए वर्तमान लॉन्चर को याद करने के शॉर्टकट पर कुछ गलतफहमी है। आपको वर्तमान कार्यक्षेत्र के लिए वर्तमान लॉन्चर को "सेव" करने के लिए केवल एक कीबोर्ड शॉर्टकट की आवश्यकता है । यह बिल्कुल उसी तरह काम करेगा, चाहे आप किसी भी कार्यक्षेत्र पर हों। स्क्रिप्ट स्वयं निर्धारित करेगी कि वर्तमान कार्यक्षेत्र क्या है ।
संपादित करें
आपकी टिप्पणी से, मैं समझता हूं कि आप स्क्रिप्ट चलाने के लिए अनिश्चित हैं और आपको डर है कि आप अपने वर्तमान लांचर को गड़बड़ कर देंगे।
मुझे पूरा यकीन है कि स्क्रिप्ट जो कर रही है उसके लिए बहुत ज्यादा (या बहुत कम :)) सम्मान है। हालाँकि, आप केवल कमांड के साथ वर्तमान यूनिटी लॉन्चर का बैकअप ले सकते हैं:
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
यह एक फाइल बनाएगा ~/launcher_output
, जिसमें आपके यूनिटी लॉन्चर को शुरुआती स्थिति में लाने के लिए पूरी कमांड होगी। आपातकाल के मामले में, बस फ़ाइल की सामग्री की प्रतिलिपि बनाएँ और इसे टर्मिनल में पेस्ट करें।
लेकिन फिर से, यह वास्तव में संभावना नहीं है कि आप अपने लॉन्चर को गड़बड़ कर देंगे, जब तक कि आप स्क्रिप्ट को मैन्युअल रूप से नहीं बदलते।
महत्वपूर्ण संस्करण (2)
जैसा कि एक टिप्पणी में अनुरोध किया गया था, इसमें एक ऐसा संस्करण है जो किसी भी शॉर्टकट संयोजन का उपयोग किए बिना चलता है ; बस स्क्रिप्ट चलाएं और विशिष्ट कार्यस्थानों पर अपने लॉन्चर स्थापित करना शुरू करें। स्क्रिप्ट आपके होम डायरेक्टरी में (अदृश्य) फाइलों को बनाएगी, ताकि विभिन्न कार्यस्थानों पर आपके (एकता-) लांचर के सेट को याद रखा जा सके।
मैंने इसे स्क्रिप्ट के "संस्करण 1" में आज़माया था, लेकिन हमेशा दो कार्यक्षेत्र-चेकों के बीच दो लॉन्चर-चेकों को "एम्बेड" किया जाता है ताकि कार्यक्षेत्रों के माध्यम से तेज़ी से आगे बढ़ने पर अवांछित व्यवहार (गलत डेटा को सहेजने) को रोकने की चाल हो।
कैसे इस्तेमाल करे
पहले संस्करण की तरह, यह स्क्रिप्ट उपयोग करती है wmctrl
:
sudo apt-get install wmctrl
एक खाली फ़ाइल में स्क्रिप्ट की प्रतिलिपि बनाएँ, इसे सहेजें launcher_toworkspace.py
इसे कमांड से चलाएँ:
python3 /path/to/launcher_toworkspace.py
यदि यह अपेक्षा के अनुरूप काम करता है, तो निम्न आदेश अपने स्टार्टअप अनुप्रयोगों में जोड़ें:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
लिपी
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"
key = [
"gsettings get ",
"gsettings set ",
"com.canonical.Unity.Launcher favorites",
]
def get_launcher():
return subprocess.check_output(
["/bin/bash", "-c", key[0]+key[2]]
).decode("utf-8").strip()
def get_res():
# get resolution
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
pos = xr.index("current")
return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
def current():
# get the current viewport
res = get_res()
vp_data = subprocess.check_output(
["wmctrl", "-d"]
).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1
curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
curr_ws1 = current()
currlauncher1 = get_launcher()
while True:
time.sleep(1)
currlauncher2 = get_launcher()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if currlauncher2 != currlauncher1:
open(datafile, "wt").write(currlauncher2)
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(currlauncher2)
else:
curr_set = open(datafile).read()
command = key[1]+key[2]+' "'+str(curr_set)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
curr_ws1 = curr_ws2
currlauncher1 = get_launcher()
ध्यान दें
यदि आप स्क्रिप्ट के पिछले संस्करण के साथ अपने कार्यस्थान सेट करते हैं, तो उन्हें इस संस्करण के लिए भी काम करना चाहिए।
पीपीए
2015-04-23 के अनुसार, डेनिस जे का अच्छा प्रश्न, और पार्टो के प्रोत्साहन ppa
ने स्क्रिप्ट को बनाने के लिए नेतृत्व किया है , जो इसे प्रबंधित करने के लिए GUI सहित webupd8 पर कवर किया गया है।
ppa:vlijm/lswitcher
इसे स्थापित करने के लिए, चलाएं:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
अब से, यह ट्रस्टी और यूटोपिक के लिए पैक किया गया है। मैं परीक्षण के बाद दूसरों को जोड़ूंगा। मैं एक .deb
इंस्टॉलर भी जोड़ूंगा, लेकिन मैं सुझाव दूंगा कि ppa
आमतौर पर इस तरह की चीजों को हर बार अपडेट किया जाता है।
चूंकि व्यूपोर्ट डेटा का स्थान इससे बदल गया ~/
है ~/.config/lswitcher
, इसलिए यदि आपने पिछली स्क्रिप्ट का उपयोग किया है, तो आपको अपना यूनिटी लॉन्चर फिर से सेट करना होगा।