एकता में दृश्य
यदि आप एकता का उपयोग कर रहे हैं , तो वर्तमान व्यूपोर्ट को सीधे प्राप्त नहीं किया जा सकता है
wmctrl -d
चूँकि एकता के पास व्यूपोर्ट हैं, जो सीधे नहीं मिलते हैं wmctrl -d
। आउटपुट केवल एक कार्यक्षेत्र दिखाएगा:
0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A
- जहाँ मेरा संकल्प 1680 x 1050 (से
xrandr
) है
- फैले हुए कार्यक्षेत्र (सभी व्यूपोर्ट) है
5040x2100
। यह 3x2 व्यूपोर्ट है: 5040/1680 = 3 और 2100/1050 = 2।
- मैं इस समय (viewport-) स्थिति
1680,1050
(x, y) पर हूं
नीचे दी गई स्क्रिप्ट इस जानकारी से वर्तमान व्यूपोर्ट की गणना करती है:
#!/usr/bin/env python3
import subprocess
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 resolution (viewport size)
res = get_res()
# read wmctrl -d
vp_data = subprocess.check_output(
["wmctrl", "-d"]
).decode("utf-8").split()
# get the size of the spanning workspace (all viewports)
dt = [int(n) for n in vp_data[3].split("x")]
# calculate the number of columns
cols = int(dt[0]/res[0])
# calculate the number of rows
rows = int(dt[1]/res[1])
# get the current position in the spanning workspace
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
# current column (readable format)
curr_col = int(curr_vpdata[0]/res[0])
# current row (readable format)
curr_row = int(curr_vpdata[1]/res[1])
# calculate the current viewport
return curr_col+curr_row*cols+1
print(current())
काम में लाना:
इंस्टॉल wmctrl
sudo apt install wmctrl
इसे कमांड से चलाएं
python3 /path/to/get_viewport.py
यह 1, 2, 3 या जो भी वर्तमान व्यूपोर्ट है, आउटपुट देगा। यह स्वचालित रूप से उन पंक्तियों / स्तंभों को गिनता है जिनमें आपके व्यूपोर्ट कॉन्फ़िगरेशन शामिल हो सकते हैं।
व्याख्या
लिपी
xrandr
संभव अतिरिक्त मॉनिटर सहित, से एक व्यूपोर्ट (रिज़ॉल्यूशन) का आकार प्राप्त करता है।
- फैले हुए कार्यक्षेत्र पर वर्तमान स्थिति प्राप्त करता है
- आपके व्यूपोर्ट सेटअप में कॉलम / पंक्तियों की संख्या को दर्शाता है
- उस से, यह वर्तमान व्यूपोर्ट की गणना करता है