ধরুন আমি ৪ টি ওয়ার্কস্পেস ব্যবহার করছি এবং ঘটনাক্রমে আমার আরও বেশি প্রয়োজন আছে, কোনও স্বয়ংক্রিয় প্রক্রিয়া আছে কি না যদি অসম্ভব হয় তবে ঘটনাক্রমে আরও বেশি ওয়ার্কস্পেস যুক্ত করার সহজ উপায় (ইনস্টল করার পরিবর্তে Ubuntu tweak
ইত্যাদি ইত্যাদি)।
ধরুন আমি ৪ টি ওয়ার্কস্পেস ব্যবহার করছি এবং ঘটনাক্রমে আমার আরও বেশি প্রয়োজন আছে, কোনও স্বয়ংক্রিয় প্রক্রিয়া আছে কি না যদি অসম্ভব হয় তবে ঘটনাক্রমে আরও বেশি ওয়ার্কস্পেস যুক্ত করার সহজ উপায় (ইনস্টল করার পরিবর্তে Ubuntu tweak
ইত্যাদি ইত্যাদি)।
উত্তর:
একটি (এর) ব্যাকআউন্ড স্ক্রিপ্টের একটি সংস্করণের নীচে যা যদি আপনি আপনার কর্মপরিসর-ম্যাট্রিক্সের শেষ কলাম বা সারিটিতে প্রবেশ করেন তবে স্বয়ংক্রিয়ভাবে ওয়ার্কস্পেস যুক্ত হবে।
এটা এভাবে কাজ করে:
আপনি যদি শেষ কলাম বা সারিটিতে পৌঁছান, অতিরিক্ত ভিউপোর্টগুলি যুক্ত করা হয়:
যদি আপনার কর্মক্ষেত্রগুলি 5-10 সেকেন্ডের জন্য অব্যবহৃত থাকে এবং এতে কোনও উইন্ডো না থাকে, অতিরিক্ত কর্মক্ষেত্রগুলি আবার সরানো হবে। তবে আপনি সর্বদা নীচে একটি অতিরিক্ত সারি রাখবেন এবং আপনার বর্তমান ভিউপোর্টের ডানদিকে একটি অতিরিক্ত কলাম রাখবেন:
#!/usr/bin/env python3
import subprocess
import time
import math
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
def set_workspaces(size, axis):
subprocess.Popen([
"dconf", "write", "/org/compiz/profiles/unity/plugins/core/"+axis,
str(size)
])
def get_res():
resdata = subprocess.check_output(["xrandr"]).decode("utf-8").split()
curr = resdata.index("current")
return (int(resdata[curr+1]), int(resdata[curr+3].replace(",", "")))
def wspace():
try:
sp = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
return ([int(n) for n in sp[3].split("x")],
[int(n) for n in sp[5].split(",")])
except subprocess.CalledProcessError:
pass
def clean_up(curr_col, curr_row):
try:
w_list = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
xpos = max([math.ceil((int(w[2])+span[1][0])/res[0]) for w in w_list])
min_x = max(xpos, curr_col+1, hsize)
if xpos >= hsize:
set_workspaces(min_x, "hsize")
else:
set_workspaces(min_x, "hsize")
ypos = max([math.ceil((int(w[3])+span[1][1])/res[1]) for w in w_list])
min_y = max(ypos, curr_row+1, vsize)
if ypos >= vsize:
set_workspaces(min_y, "vsize")
else:
set_workspaces(min_y, "vsize")
except subprocess.CalledProcessError:
pass
res = get_res()
t = 0
while True:
span = wspace()
if span != None:
cols = int(span[0][0]/res[0]); rows = int(span[0][1]/res[1])
currcol = int((span[1][0]+res[0])/res[0])
if all([currcol == cols, cols*rows < max_ws]):
set_workspaces(cols+1, "hsize")
currrow = int((span[1][1]+res[1])/res[1])
if all([currrow == rows, cols*rows < max_ws]):
set_workspaces(rows+1, "vsize")
if t == 10:
clean_up(currcol, currrow)
t = 0
else:
t = t+1
time.sleep(1)
add_space.py
স্ক্রিপ্টের শিরোনাম বিভাগে, আপনি যদি অন্যান্য সেটিংস পছন্দ করেন তবে লাইনগুলি সম্পাদনা করুন (সর্বাধিক ওয়ার্কস্পেসের সংখ্যা, ডিফল্ট ম্যাট্রিক্স যেমন 2x2):
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
কমান্ড দ্বারা এটি পরীক্ষা করুন:
python3 /path/to/add_space.py
যদি সমস্ত ঠিকঠাক কাজ করে তবে এটিকে আপনার প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে যুক্ত করুন: ড্যাশ> স্টার্টআপ অ্যাপ্লিকেশন> কমান্ডটি যুক্ত করুন:
/bin/bash -c "sleep 15 && python3 /path/to/add_space.py`
সর্বদা হিসাবে, স্ক্রিপ্টটি অত্যন্ত "রসে কম", এবং আপনার প্রসেসরে কোনও লক্ষণীয় বোঝা যুক্ত করে না।
নীচের গল্পটি কিছুটা জটিল এবং বেশিরভাগ ক্ষেত্রে কোডিংয়ের পরিবর্তে ধারণা এবং পদ্ধতি সম্পর্কে একটি ব্যাখ্যা । আপনার আগ্রহ থাকলে কেবল পড়ুন।
প্রয়োজনীয় কর্মক্ষেত্র (উদাহরণ কলাম) গণনা কিভাবে
wmctrl -d
দেখায় এর ফলাফল :
0 * DG: 3360x2100 VP: 1680,1050 WA: 65,24 1615x1026 N/A
আউটপুটে, VP: 1680,1050
আমাদের কোথায় স্প্যানিং ওয়ার্কস্পেসে রয়েছে তা (সমস্ত ভিউপোর্টের ম্যাট্রিক্স) তথ্য দেয়। এই তথ্যটি কেবলমাত্র তখনই কার্যকর যদি আমাদের কাছেও পর্দার রেজোলিউশন থাকে, যেমন উদাহরণস্বরূপ 1680
দুটি প্রস্থ (সম্ভাব্য, তবে এখনও) বা এক বারের স্ক্রিন হতে পারে।
ভাগ্যক্রমে, আমরা কমান্ড থেকে পর্দার রেজোলিউশন পার্স করতে পারি xrandr
।
তারপরে যদি আমরা জানতে পারি যে স্ক্রিনটির এক্স-আকারটি রয়েছে 1680
এবং আমরা বর্তমানে চলছে VP: 1680,1050
, আমরা জানি যে আমরা ওয়ার্কস্পেসের ম্যাট্রিক্সের দ্বিতীয় কলামে আছি । যেহেতু আমরা মোট ম্যাট্রিক্সের আকারও জানি ( DG: 3360x2100
এটিও আউটপুট থেকে wmctrl -d
), তাই আমরা জানি বর্তমান ম্যাট্রিক্সে দুটি কলাম (3360/1680) অন্তর্ভুক্ত রয়েছে এবং আমরা "শেষ" একটিতে আছি।
স্ক্রিপ্টটি কমান্ডের মাধ্যমে ম্যাট্রিক্সে একটি কলাম যুক্ত করার জন্য একটি নির্দেশ পাঠাবে:
dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>
এটাই নীতি।
কর্মক্ষেত্রগুলি সরানোর জন্য কীভাবে গণনা করবেন (উদাহরণস্বরূপ কলাম)
প্রতি 10 সেকেন্ডে একবার, স্ক্রিপ্টটি বর্তমানে খোলা সমস্ত উইন্ডো তালিকা সহ কমান্ডটি চালায়:
wmctrl -lG
এটি আমাদের উইন্ডোটির অবস্থান সম্পর্কিত তথ্য দেয় যেমন:
0x04604837 0 3425 24 1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
আউটপুটে, 3425
উইন্ডোটির এক্স-অবস্থান। এই চিত্রটি যদিও বর্তমান ওয়ার্কস্পেসের সাথে সম্পর্কিত (বাম দিক)। ওয়ার্কস্পেস-ম্যাট্রিক্সে উইন্ডোটির (এক্স-ওয়াইজ) পরম অবস্থানটি জানতে, আমাদের বর্তমান ভিউপোর্ট তথ্যের প্রথম সংখ্যা (যেমন VP: 1680,1050
, আউটপুট থেকে wmctrl -d
) যুক্ত করতে হবে।
যাইহোক, সরলতার কারণে ধরে নেওয়া যাক আমরা ভিউপোর্ট 1,1
(টপলফিট ভিউপোর্ট) এ রয়েছি, সুতরাং উইন্ডোটির আপেক্ষিক অবস্থানটি তার পরম অবস্থানের সমান ।
যেহেতু পর্দার রেজোলিউশনটি রয়েছে 1680
, আমরা জানি উইন্ডোটি কলামে রয়েছে 3425/1680
, বৃত্তাকার হয়ে গেছে, কারণ এর মধ্যে সমস্ত কিছুই 3360 and 5040
ম্যাট্রিক্সের একই কলামে রয়েছে (রেজোলিউশনের 3 থেকে 4 বারের মধ্যে)। সঠিক গণনার জন্য আমরা ব্যবহার করি math.ceil()
( python
)
যেহেতু স্ক্রিপ্ট এছাড়াও নিয়ম অনুশীলন সবসময় সঠিক একটি অতিরিক্ত কর্মপরিসর আছে / নীচের আমরা কলামের সংখ্যা সেট করতে হবে সর্বোচ্চ মান:
এবং তাই স্ক্রিপ্ট :)
সারিগুলি ঠিক একই পদ্ধতিতে পরিচালিত হয়।
প্রযুক্তিগতভাবে, কর্মক্ষেত্রগুলি পুনরায় আকার দেওয়ার জন্য কোনও শর্টকাট নেই তবে আপনি সাধারণ স্ক্রিপ্টটি বেলো ব্যবহার করতে পারেন এবং এটি একটি শর্টকাটে আবদ্ধ করতে পারেন।
.local/share/applications
ফোল্ডারে বা যেখানে আপনি পছন্দ করুন সেখানে সংরক্ষণ করুন ।chmod 755 /path/to/script
উদাহরণস্বরূপ, আমার এই সেটআপটি রয়েছে:
স্ক্রিপ্টটি আবদ্ধ ShiftCtrlAltI। কিন্তু CtrlAltIকাজ করতে পারে। আমি স্ক্রিপ্টের পুরো পথ দিই, যা
/home/xieerqi/resize-workspaces.sh
এটি এখানে দেখতে কেমন হবে তা এখানে:
লিপি
#!/bin/bash
# Author : Serg Kolo
# Date: Sept 19, 2015
# Purpose: simple script to resize
# unity workspaces
# Written for: http://askubuntu.com/q/676046/295286
HEIGHT=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize)
WIDTH=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize)
NEWSIZE=$(zenity --entry --text="Current desktop set-up $HEIGHT x $WIDTH. Enter new setup in HEIGHTxWIDTH format" --width=250 | tr 'x' ' ' )
ARRAY=( $NEWSIZE )
[ -z ${ARRAY[1]} ] && exit
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize ${ARRAY[0]}
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize ${ARRAY[1]}
ব্যবহারের জন্য খুব সহজ, সেটআপ করা খুব সহজ