ฉันจะค้นหาชื่อของพื้นที่ทำงานปัจจุบันได้อย่างไร


11

มีวิธีใดบ้างสำหรับสคริปต์ทุบตีในการค้นหาชื่อของพื้นที่ทำงานปัจจุบัน (เดสก์ท็อปเสมือน)?

ดูเหมือนว่าจะมีประโยชน์สำหรับสิ่งต่าง ๆ เช่นการปรับแต่งพฤติกรรมในไฟล์. bashrc ของฉันตามเดสก์ท็อปที่เชลล์สร้างขึ้น


Windowmanager ของคุณคืออะไร?
Jacob Vlijm

ฉันใช้ Cinnamon desktop ติดตั้งบน Ubuntu ฉันคิดว่าฉันพูด แต่เมื่อฉันแก้ไขคำถามลงฉันต้องดึงออกมามากเกินไป
DonGar

1
ใต้ Cinnamon คำนี้จะให้คำสุดท้ายในชื่อเดสก์ท็อป ดีพอสำหรับกรณีการใช้งานของฉัน desktop =wmctrl -d | grep '*' | sed 's/.* //g'
DonGar

คำตอบ:


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

หวังว่านี่จะช่วยได้!


ถ้า OP ใช้ Unity มีเวิร์กสเปซเดียวเท่านั้น :) เช่นกันในผลลัพธ์ของwmctrl -d
Jacob Vlijm

@JacobVlijm จากนั้น OP อาจจะไม่ต้องกังวลเกี่ยวกับเรื่องนี้หากมีพื้นที่ทำงานเพียงแห่งเดียว :)
Terrance

แน่นอนว่าเขาจะ wmctrl -dแต่แล้วพวกเขาก็จะเรียกว่าวิวพอร์ตและไม่เอากลับคืนโดยตรงจาก
Jacob Vlijm

@JacobVlijm ทีนี้หนึ่งแสงที่ส่องแสงคือ Unity จะไม่เป็นค่าเริ่มต้นและหายไปหลังจากปล่อย 18.04 : D
Terrance

ฉันชอบมันมากและมันอาจจะถูกแยกออก
Jacob Vlijm

11

วิวพอร์ตในเอกภาพ

หากคุณกำลังใช้Unityวิวพอร์ตปัจจุบันจะไม่สามารถเรียกคืนได้โดยตรงจาก

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
  • ฉันกำลังอยู่ในตำแหน่ง1680,1050( viewport-) ตำแหน่ง (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
Terrance

3

อย่างน้อยใน Gnome shell แต่อาจเป็นใน WM อื่น ๆ ด้วยคุณสามารถถาม Xserver ได้โดยตรง (ถ้าอยู่ใน Wayland ไม่มีความคิด)

[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เพื่อให้ได้ชื่อที่คุณต้องมองถึงตัวเลขในทรัพย์สิน
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.