Geçerli çalışma alanının adını nasıl ararım?


11

Bir bash betiğinin geçerli çalışma alanının adını (sanal masaüstü) aramasının bir yolu var mı?

Bu, kabuğun oluşturulduğu masaüstüne dayalı olarak .bashrc dosyamdaki davranışları özelleştirme gibi şeyler için gerçekten yararlı görünüyor.


Pencere yöneticiniz nedir?
Jacob Vlijm

Ubuntu'da kurulu Cinnamon masaüstü kullanıyorum. Söylediğimi düşündüm, ama soruyu düzenlediğimde çok fazla çekmiş olmalıydım.
DonGar

1
Tarçın altında bu, masaüstü adındaki son sözcüğü verir. Bu benim kullanım durumum için yeterince iyi. desktop =wmctrl -d | grep '*' | sed 's/.* //g'
DonGar

Yanıtlar:


13

wmctrl -dTüm çalışma alanlarını listelemek için bunu yapabilirsiniz . *Mevcut çalışma alanını temsil eder:

~$ 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

Yani, sadece akımı almak için, grep için *:

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

Bu yardımcı olur umarım!


OP Unity kullanıyorsa, sadece bir çalışma alanı var :), çıktısı dawmctrl -d
Jacob Vlijm

@JacobVlijm O zaman OP tek bir çalışma alanı olsaydı muhtemelen bu konuda endişelenmezdi. :)
Terrance

Tabii ki yapacak, ama sonra onlara görünüm alanı denir ve doğrudan alınamaz wmctrl -d.
Jacob Vlijm

@JacobVlijm Parlayan bir ışık, Birliğin artık varsayılan olmayacağı ve 18.04'ün yayınlanmasından sonra gitmeyeceği. : D
Terrance

Aslında hoşuma gitti ve muhtemelen çatallanacak.
Jacob Vlijm

11

Unity Bölgesindeki Manzara Alanları

Unity kullanıyorsanız , geçerli görünüm doğrudan

wmctrl -d

Unity, doğrudan tarafından algılanmayan görünüm pencerelerine sahip olduğundan wmctrl -d. Çıktıda yalnızca bir çalışma alanı gösterilir:

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • burada çözünürlüğüm 1680 x 1050 (itibaren xrandr)
  • yayılma çalışma alanı (tüm görünümler) 5040x2100. 3x2 görüş alanı: 5040/1680 = 3 ve 2100/1050 = 2.
  • Şu anda (görünüm alanı) konumundayım 1680,1050(x, y)

Aşağıdaki komut dosyası, bu bilgilerden geçerli görünüm penceresini hesaplar:

#!/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())

Kullanmak:

  1. Yüklemek wmctrl

    sudo apt install wmctrl
    
  2. Komut ile çalıştırın

    python3 /path/to/get_viewport.py
    

    1, 2, 3 veya geçerli görüntü alanı ne olursa olsun çıktı verir. Görüntü alanı yapılandırmanızın içerebileceği satırları / sütunları otomatik olarak sayar.

açıklama

resim açıklamasını buraya girin

Senaryo

  • xrandrolası ekstra monitörler de dahil olmak üzere bir görünüm alanının (çözünürlük) boyutunu alır .
  • kapsayan çalışma alanındaki geçerli konumu alır
  • görünüm alanı kurulumunuzdaki sütun / satır sayısını döndürür
  • bundan sonra geçerli görünüm penceresini hesaplar

1
Unity hakkında nasıl hissettiğime bakılmaksızın, bu senaryo gerçekten iyi çalışıyor! Güzel yapılmış! +1
Terrance

3

En azından Gnome kabuğunda, ancak muhtemelen diğer WM'de de, Xserver'a doğrudan sorabilirsiniz (Wayland'de ise, hiçbir fikrim yok).

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

Temel olarak, komut xpropgeri döner

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

ve sonra ihtiyacınız olanı almak için biraz bilgi masaj yapabilirsiniz.


Bu çalışma alanı numarası, adı değil. Adı almak için tesisteki numaraya bakmanız gerekir _NET_DESKTOP_NAMES.
Gilles 'SO- kötü olmayı kes'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.