मैं वर्तमान कार्यक्षेत्र का नाम कैसे देखूं?


11

क्या वर्तमान कार्यक्षेत्र (वर्चुअल डेस्कटॉप) के नाम को देखने के लिए बैश स्क्रिप्ट का कोई तरीका है?

यह वास्तव में डेस्कटॉप पर आधारित मेरे .bashrc फ़ाइल में व्यवहार को अनुकूलित करने जैसी चीजों के लिए उपयोगी लगता है जिसमें शेल बनाया गया था।


आपका खिड़कीवाला क्या है?
जैकब व्लिजम

मैं Ubuntu पर स्थापित Cinnamon डेस्कटॉप का उपयोग कर रहा हूं। मुझे लगा कि मैंने कहा होगा, लेकिन जब मैंने सवाल को नीचे संपादित किया तो मुझे बहुत अधिक खींचना चाहिए था।
डॉनगर

1
दालचीनी के तहत, यह डेस्कटॉप नाम में अंतिम शब्द देता है। मेरे उपयोग के मामले के लिए यह काफी अच्छा है। डेस्कटॉप =wmctrl -d | grep '*' | sed 's/.* //g'
डोंगर

जवाबों:


13

आप इसे wmctrl -dसभी कार्यक्षेत्रों को सूचीबद्ध करने के लिए कर सकते हैं। *वर्तमान कार्यक्षेत्र का प्रतिनिधित्व करता है:

~$ wmctrl -d
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1
1  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  2
2  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  3
3  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  4

तो, केवल वर्तमान पाने के लिए, के लिए grep *:

~$ wmctrl -d | grep -w '*'
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1

उम्मीद है की यह मदद करेगा!


यदि ओपी एकता का उपयोग करता है, तो केवल एक कार्यक्षेत्र है :), इसके उत्पादन में भीwmctrl -d
याकूब Vlijm

@JacobVlijm तब ओपी शायद इस बारे में चिंता नहीं करेगा अगर केवल एक कार्यक्षेत्र था। :)
टेरेंस

बेशक वह होगा, लेकिन फिर वे व्यूपोर्ट कहलाते हैं, और सीधे तौर पर पुनर्प्राप्त करने योग्य नहीं हैं wmctrl -d
जैकब व्लिजम

@JacobVlijm खैर, एक चमकदार रोशनी यह है कि एकता अब डिफ़ॉल्ट नहीं होगी और 18.04 की रिलीज के बाद चली जाएगी। : डी
टेरेन्स

मैं वास्तव में इसे पसंद करता हूं, और यह शायद कांटा जाएगा।
जैकब व्लिजम

11

एकता में दृश्य

यदि आप एकता का उपयोग कर रहे हैं , तो वर्तमान व्यूपोर्ट को सीधे प्राप्त नहीं किया जा सकता है

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())

काम में लाना:

  1. इंस्टॉल wmctrl

    sudo apt install wmctrl
    
  2. इसे कमांड से चलाएं

    python3 /path/to/get_viewport.py
    

    यह 1, 2, 3 या जो भी वर्तमान व्यूपोर्ट है, आउटपुट देगा। यह स्वचालित रूप से उन पंक्तियों / स्तंभों को गिनता है जिनमें आपके व्यूपोर्ट कॉन्फ़िगरेशन शामिल हो सकते हैं।

व्याख्या

यहाँ छवि विवरण दर्ज करें

लिपी

  • xrandrसंभव अतिरिक्त मॉनिटर सहित, से एक व्यूपोर्ट (रिज़ॉल्यूशन) का आकार प्राप्त करता है।
  • फैले हुए कार्यक्षेत्र पर वर्तमान स्थिति प्राप्त करता है
  • आपके व्यूपोर्ट सेटअप में कॉलम / पंक्तियों की संख्या को दर्शाता है
  • उस से, यह वर्तमान व्यूपोर्ट की गणना करता है

1
भले ही मैं एकता के बारे में कैसा महसूस करता हूं, यह स्क्रिप्ट वास्तव में अच्छी तरह से काम करती है! अच्छी तरह से किया! +1
टेरेंस

3

कम से कम सूक्ति शेल में, लेकिन शायद अन्य WM में भी, आप सीधे Xserver पूछ सकते हैं (यदि वेलैंड में, कोई विचार नहीं है)।

[romano:~/tmp] % desktop=$(xprop -root -notype  _NET_CURRENT_DESKTOP | perl -pe 's/.*?= (\d+)/$1/') 
[romano:~/tmp] % echo $desktop
1

मूल रूप से, कमांड xpropवापस आ जाएगी

 [romano:~/tmp] % xprop -root -notype  _NET_CURRENT_DESKTOP
 _NET_CURRENT_DESKTOP = 1

और फिर आप जो कुछ भी चाहते हैं उसे प्राप्त करने के लिए थोड़ी जानकारी की मालिश कर सकते हैं।


वह कार्यक्षेत्र संख्या है, नाम नहीं। नाम प्राप्त करने के लिए आपको संपत्ति में संख्या को देखना होगा _NET_DESKTOP_NAMES
गिल्स एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.