Irix의 4Dwm에는 창을 상자로 최소화하는 기능이있었습니다 (현대 창 관리자가 사용하는 작업 표시 줄과 달리). 나는 오래된 HPUX에서도 이것을 보았습니다.
링크 된 이미지에서 "콘솔"사각형을 참조하십시오.
플러그인 또는 Unity 이외의 창 관리자를 사용하여 Ubuntu에서 수행 할 수 있습니까?
Irix의 4Dwm에는 창을 상자로 최소화하는 기능이있었습니다 (현대 창 관리자가 사용하는 작업 표시 줄과 달리). 나는 오래된 HPUX에서도 이것을 보았습니다.
링크 된 이미지에서 "콘솔"사각형을 참조하십시오.
플러그인 또는 Unity 이외의 창 관리자를 사용하여 Ubuntu에서 수행 할 수 있습니까?
답변:
내 자신의 놀랍게도, 그것은 당신이 데스크탑에 너무 많은 다른 것들을 가지고 있지 않는 한 , 아주 잘 작동 합니다 .
나는 잠시 동안 그것을 사용했고, 빈번한 작업 공간 스위치에 대한 이상하지만 이상하게도 좋은 대안으로 보입니다 . 단순함을 상쾌하게합니다.
해결책은 실제로 당신이 묘사 한 것입니다.
짧은 이야기 (설명) :
바로 가기 키를 누르면 스크립트가 인수와 함께 호출됩니다 box
.
windowbox box
스크립트는 다음과 같습니다.
.desktop
파일에서 해당 아이콘을 찾습니다 ./usr/share/applications
인수를 사용하여 스크립트를 두 번 클릭 할 때 다음 .desktop
과 같이 고유 한 이름의 파일을 작성합니다 .Exec=
show
windowbox show
.desktop
파일은 윈도우 ID의의 (파일 -) 이름으로 추가 인수 인수의 수를 추가 할 .desktop
파일을.
그후:
.desktop
파일은 그것을 더블 클릭 개체를 만들기 위해 실행된다.
때 .desktop
파일을 더블 클릭하면, 윈도우는 (재) 매핑의 .desktop
파일이 바탕 화면에서 제거됩니다.
당신은 창문이 놀러 할 때처럼 거의 항상 스크립트가 모두 필요 wmctrl
하고 xdotool
:
sudo apt-get install xdotool wmctrl
~/bin
( ~
홈 디렉토리를 나타냄)아래의 스크립트를 빈 파일에 복사하고에 windowbox
(확장자 없음) 으로 저장하십시오 ~/bin
.
#!/usr/bin/env python3
import subprocess
import sys
import os
# --- On Unity, there is a (y-wise) deviation in window placement
# set to zero for other window managers
deviation = 28
# ---
args = sys.argv[1:]
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
def find_dtop():
# get the localized path to the Desktop folder
home = os.environ["HOME"]
dr_file = home+"/.config/user-dirs.dirs"
return [home+"/"+ l.split("/")[-1].strip() \
for l in open(dr_file).readlines() \
if l.startswith("XDG_DESKTOP_DIR=")][0].replace('"', "")
def check_windowtype(w_id):
# check the type of window; only unmap "NORMAL" windows
return "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", w_id])
def get_process(w_id):
# get the name of the process, owning the window and window x/y position
w_list = get(["wmctrl", "-lpG"]).splitlines()
pid = [l for l in w_list if w_id in l][0].split()
proc = get(["ps", "-p", pid[2], "-o", "comm="])
xy = (" ").join(pid[3:5])
return (proc, xy)
def read_f(f, string, proc):
# search for a possible match in a targeted .desktop file
try:
with open(f) as read:
for l in read:
if all([l.startswith(string), proc in l]):
in_f = True
break
else:
in_f = False
except:
in_f = False
return in_f
def get_icon(proc, w_name):
# search appropriate icon in /usr/share/applications
exceptions = [item for item in [
["soffice", "libreoffice-main"],
["gnome-terminal", "utilities-terminal"],
["nautilus", "folder"],
] if item[0] in proc]
if exceptions:
if exceptions == [["soffice", "libreoffice-main"]]:
loffice = [
["Calc", "libreoffice-calc"],
["Writer", "libreoffice-writer"],
["Base", "libreoffice-base"],
["Draw", "libreoffice-draw"],
["Impress", "libreoffice-impress"],
]
match = [m[1] for m in loffice if m[0] in w_name]
if match:
return match[0]
else:
return exceptions[0][1]
else:
return exceptions[0][1]
else:
default = "/usr/share/applications"
dtfiles = [default+"/"+f for f in os.listdir(default)]
for f in dtfiles:
if read_f(f, "Exec=", proc) == True:
for l in open(f).readlines():
if l.startswith("Icon="):
icon = l.replace("Icon=", "").strip()
print(f)
break
break
return icon
def create_name():
# create unique (file-) name for boxed window
n = 1
while True:
name = dtop+"/"+"boxed_"+str(n)+".desktop"
if os.path.exists(name):
n += 1
else:
break
return name
def convert_wid(w_id):
# convert window- id, xdotool format, into wmctrl format
w_id = hex(int(w_id))
return w_id[:2]+(10-len(w_id))*"0"+w_id[2:]
def create_icon(w_id, w_name, icon, pos):
# create the launcher, representing the boxed window
boxedwindow = create_name()
f_content =[
"[Desktop Entry]",
"Name=[WINDOW] "+w_name,
"Exec=windowbox show "+w_id+" '"+boxedwindow+"' "+pos,
"Icon="+icon,
"Type=Application",
]
if icon == "generic":
f_content.pop(3)
with open(boxedwindow, "wt") as boxed:
for l in f_content:
boxed.write(l+"\n")
command = "chmod +x "+"'"+boxedwindow+"'"
subprocess.call(["/bin/bash", "-c", command])
if args[0] == "box":
dtop = find_dtop()
w_id = convert_wid(get(["xdotool", "getactivewindow"]))
w_name = get(["xdotool", "getwindowname", w_id])
if check_windowtype(w_id) == True:
procdata = get_process(w_id)
procname = procdata[0]
icon = get_icon(procname, w_name); icon = icon if icon != None else "generic"
create_icon(w_id, w_name, icon, procdata[1])
subprocess.call(["xdotool", "windowunmap", w_id])
elif args[0] == "show":
w_id = args[1]
subprocess.call(["xdotool", "windowmap", w_id])
subprocess.call(["xdotool", "windowmove", "--sync", w_id, args[3], str(int(args[4])-deviation)])
os.remove(args[2])
스크립트를 실행 가능하게 만들기
$PATH
로그 아웃 / 로그인하거나 source ~/.profile
터미널 창에서 실행하십시오.다음 명령을 사용하여 터미널 창에서 스크립트를 테스트하십시오.
windowbox box
창이 사라지고 "상자"창이 데스크탑에 나타납니다.
모두 제대로 작동하면 바로 가기 키에 다음 명령을 추가하십시오. 화면 오른쪽 상단에서 톱니 바퀴 아이콘을 선택하십시오.
System Settings→ Keyboard→ Shortcuts→로 이동하십시오 Custom Shortcuts. 를 클릭하고 +다음 명령을 추가하십시오.
windowbox box
그렇게해야합니다.
스크립트 용도 xdotool
의 windowunmap
창을 보이지 않게 할 수 있습니다. 데스크탑에서 생성 된 "상자"(아이콘)는 숨겨진 창에 대한 유일한 "게이트"입니다. 다시 말해서 데스크탑 파일을 수동으로 제거하지 마십시오. 당신이하면 창문이 잘 없어집니다.
스크립트는 여전히 약간의 수정을 사용할 수 있습니다.
get_process(w_id)
그러나이 기능 은 약간의 개선이 필요할 수 있습니다. 에서 명령으로 프로세스를 찾을 수 없으면 /usr/share/applications
파일에 일반 아이콘이 있습니다.스크립트 이름 생성 된 .desktop
파일을 항상 boxed_1.desktop
, boxed_2.desktop
등, 창조의 순간에 "가능"이름에 따라 (파일 이름이 아닌 표시 이름).
마우스 오른쪽 버튼으로> 아이콘 크기를 클릭하여 파일 크기를 조정할 수 있습니다 (일반적으로). 좋은 소식은 파일을 제거하고 다시 만들면 크기가 기억된다는 것입니다. 다시 시작한 후에 파일을 다시 작성하더라도 당신이 경우에 것을 의미 이제까지 포장 된 창 (예) 1-5 크기를 조정, 그들은 것입니다 항상 크기가 동일 할 때 (스크립트) 다시 만들!
dtop = "/home/jacob/Bureaublad"
을 데스크탑 경로 ( dtop = "/home/" + user + "/Desktop"
)로 바꿨습니다. 2. 두 번 클릭으로 복원해도 작동하지 않았습니다. 나는 의심 source ~/.profile
신속하게 테스트 시험이에-로그인 / 아웃됩니다 충분하지 않습니다. 3. 단일성으로 아이콘 크기를 수동으로 조정할 수 있습니다 (마우스 오른쪽 버튼 클릭-> 아이콘 크기 조정), f_content
아이콘 크기를 설정하기 위해 매개 변수를 추가 할 수 있습니까?
fvwm 을 사용 하여이를 수행 할 수 있습니다 .
fvwm을 설치하십시오 :
sudo apt-get update
sudo apt-get install fvwm
여기 몇 가지가 있습니다 - A가 아이콘 화 함수를 사용하여 그들을 찾기 http://www.jmcunx.com/fvwm_theme.html 당신이 보여주는 스크린 샷과 같은 여러 모양.
테마의 텍스트를 복사 한 다음 ~/.fvwm/
(숨겨진 파일을 먼저 표시) 파일을 만듭니다..fvwm2rc
텍스트 편집기 (예 : gedit)에서 해당 파일을 열고 테마 텍스트를 붙여 넣습니다.
컴퓨터를 재부팅하고 fvwm 및 로그인을 선택하십시오.