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())
쓰다:
-
설치
wmctrl
sudo apt install wmctrl
-
명령으로 실행
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
그런 다음 정보를 약간 마사지하여 필요한 것을 얻을 수 있습니다.