현재 작업 공간의 이름을 찾으려면 어떻게합니까?


11

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

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


창 관리자는 무엇입니까?
Jacob Vlijm

우분투에 설치된 Cinnamon 데스크탑을 사용하고 있습니다. 나는 내가 말한 줄 알았지 만 질문을 편집 할 때 너무 많이 꺼내야합니다.
DonGar

1
시나몬에서는 데스크톱 이름의 마지막 단어가 표시됩니다. 내 유스 케이스에 충분합니다. 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의 뷰포트

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

wmctrl -d

Unity에는 뷰포트가 있기 때문에에 의해 직접 감지되지 않습니다 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(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
내가 Unity에 대해 어떻게 생각하든이 스크립트는 정말 잘 작동합니다! 잘 했어요! +1
Terrance

3

적어도 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

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


이름이 아닌 작업 공간 번호입니다. 이름을 얻으려면 속성에서 숫자를 찾아야합니다 _NET_DESKTOP_NAMES.
Gilles 'SO- 악마 중지'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.