태그 보관물: wmctrl

wmctrl

현재 작업 공간의 이름을 찾으려면 어떻게합니까? bash 스크립트가 현재 작업 공간 (가상 데스크탑)의

bash 스크립트가 현재 작업 공간 (가상 데스크탑)의 이름을 조회 할 수있는 방법이 있습니까?

이것은 쉘이 작성된 데스크탑을 기반으로 내 .bashrc 파일의 동작을 사용자 정의하는 것과 같은 경우에 실제로 유용합니다.



답변

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

도움이 되었기를 바랍니다!


답변

Unity의 뷰포트

Unity 를 사용 하는 경우 현재 뷰포트를 직접 검색 할 수 없습니다

wmctrl -d

Unity에는 뷰포트가 있기 때문에에 의해 직접 감지되지 않습니다 wmctrl -d. 출력에는 하나의 작업 공간 만 표시됩니다.

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • 내 해상도가 1680 x 1050 인 곳 (부터 xrandr)
  • 스팬 작업 공간 (모든 뷰포트)은 5040x2100입니다. 3×2 뷰포트 : 5040/1680 = 3 및 2100/1050 = 2입니다.
  • 현재 (뷰포트) 위치에 있습니다 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가능한 추가 모니터를 포함하여 에서 하나의 뷰포트 (해상도) 크기를 가져옵니다 .
  • 스패닝 작업 공간 에서 현재 위치 를 가져옵니다.
  • 뷰포트 설정에서 열 / 행 수를 계산합니다.
  • 그로부터 현재 뷰포트를 계산합니다

답변

적어도 Gnome 쉘에서는, 아마도 다른 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

그런 다음 정보를 약간 마사지하여 필요한 것을 얻을 수 있습니다.


답변