실행기에서 현재 작업 공간의 응용 프로그램을 열 수 있지만 다른 작업 공간의 응용 프로그램은 열 수 없습니까?
실행기에서 현재 작업 공간의 응용 프로그램을 열 수 있지만 다른 작업 공간의 응용 프로그램은 열 수 없습니까?
답변:
글쎄, 다른 답변은 꽤 오래되었으므로 최신 답변을 추가 할 가치가 있다고 생각합니다. 지금 당장 그렇게 할 수는 있지만 너무 어렵지 않습니다 (Ubuntu 17.10 및 그놈 포함).
dconf-editor를 사용 하십시오 .
sudo apt install dconf-editor
사용 xdotool
의를 windowunmap
, 완전히 창을 숨길 수있다. 창이나 그 응용 프로그램은 더 이상 실행기 아이콘에서 발생하며의 출력에 더 이상 나열되지 않습니다 wmctrl
.
이론적으로 이것은 수 에 사용 된 "작업 공간 엔진"에 연결 이 와 이 대답. 그것은 가장 우아한 해결책이었을 것입니다.
그러나 과정 만 다른 작업 공간에 창을 숨기고 자동에 사람 높이기 위해 현재 작업 공간이 너무 지속적으로 사용하는 것이 요구되는 배경 (지금은) 스크립트, 잘으로 "감기를 잡을"가능성이 없다. 오류가 발생하면 창을 잃어 버렸으므로 절차를 자동 (배경) 프로세스로 제공하지 않기로 결정했습니다.
그럼에도 불구하고이 답변이 유용한 지 여부는 상황과 다른 작업 공간에서 실행중인 응용 프로그램 아이콘을 숨기려는 이유에 따라 다릅니다. 결정은 당신의 것입니다.
바로 가기 키로 사용할 수있는 스크립트로 모든 창을 는 현재 작업 공간 (및 응용 프로그램)의 완전히 사라지게합니다. 이는 Unity 런처의 애플리케이션 아이콘이 애플리케이션의 활동을 표시하지 않음을 의미합니다.
schortcut 키 조합을 다시 누르면 창과 해당 응용 프로그램이 다시 나타납니다.
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"
def get_wlist(res):
res = get_res()
try:
wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
return [w for w in wlist if all([
0 < int(w[2]) < res[0],
0 < int(w[3]) < res[1],
"_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
])]
except subprocess.CalledProcessError:
pass
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(res):
# get the current viewport
vp_data = subprocess.check_output(
["wmctrl", "-d"]
).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1
curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
res = get_res()
try:
f = workspace_data+current(res)
wlist = eval(open(f).read().strip())
for w in wlist:
subprocess.Popen(["xdotool", "windowmap", w[0]])
os.remove(f)
except FileNotFoundError:
current_windows = get_wlist(res)
open(f, "wt").write(str(current_windows))
for w in current_windows:
subprocess.Popen(["xdotool", "windowunmap", w[0]])
스크립트는 모두 필요 wmctrl
하고를 xdotool
:
sudo apt-get install wmctrl xdotool
toggle_visibility.py
스크립트를 테스트 실행하십시오 : 터미널 창에서 다음 명령을 실행하십시오 :
python3 /path/to/toggle_visibility.py
이제 새 터미널 창을 열고 (첫 번째 창이 지구 표면에서 사라졌기 때문에) 동일한 명령을 다시 실행하십시오. 모든 창이 다시 나타납니다.
NB : 테스트하는 동안 "가치있는"창이 열려 있지 않은지 확인하십시오
모두 제대로 작동하면 바로 가기 키 조합에 명령을 추가하십시오. 시스템 설정> "키보드"> "바로 가기"> "사용자 정의 바로 가기"를 선택하십시오. "+"를 클릭하고 다음 명령을 추가하십시오.
python3 /path/to/toggle_visibility.py
언급했듯이 스크립트는 xdotool
의 windowunmap
창을 사용하여 창과 창에 속한 응용 프로그램을 (완전히) 숨 깁니다. 스크립트 :
다음 실행에서 스크립트는 다음과 같습니다.
따라서 현재 작업 공간에서 창과 응용 프로그램의 가시성을 토글합니다.
ctrl
+ shift
+arrow key
불행히도 불가능합니다.
Unity는 항상 모든 응용 프로그램을 모든 곳에서 표시하며이를 변경할 방법이 없습니다. 버그 리포트가 있습니다-https: //bugs.launchpad.net/ayatana-design/+bug/683170 그러나 개발자는 아무것도하지 않을 것 같습니다. 페이지 상단에이 버그가 영향을 미쳤다고 표시하면 개발자가 해당 옵션의 중요성을 이해하는 데 도움이됩니다.