답변:
대부분의 응용 프로그램은 시작된 화면 (대시 또는 실행기)에서 창을 엽니 다. 그러나 일부 응용 프로그램은 아래 스크립트를 통해 응용 프로그램을 실행하도록 명령을 리디렉션하여 강제로 실행할 수는 없습니다. 그렇게하려면 해당 .desktop
파일 (런처) 을 편집해야합니다 .
설정이 약간 복잡해 보이지만 절차를 따르는 경우 ( "사용 방법") 전혀 어렵지 않아야합니다.
한 가지 단점이 있습니다. 이 스크립트를 호출하는 명령으로 .desktop
파일의 기본 명령을 바꾸면 마우스 오른쪽 단추로 "Open with" 가 제대로 작동하지 않습니다. Chrome과 같은 웹 브라우저의 경우 큰 문제가되지 않습니다. 다른 응용 프로그램의 경우 간단한 해결책은 현재 화면 에서 바로 가기로 새 창을 여는 옵션을 추가하는 것입니다 (아래 추가 참조).
스크립트는 모두 사용 wmctrl
과 xautomation
:
sudo apt-get install xautomation
sudo apt-get install wmctrl
디렉토리가 ~/bin
없으면 작성하십시오 .
스크립트를 빈 파일로 복사하여 open_oncurrent
(확장자 없음) 으로 저장하십시오 .~/bin
해당 .desktop
파일을에서 (으) /usr/share/applications
로 복사하십시오 ~/.local/share/applications
.
cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/google-chrome.desktop
다음에서 로컬 사본을 엽니 다 ~/.local/share/applications
.
gedit ~/.local/share/applications/google-chrome.desktop
파일을 편집하십시오 (두 가지 옵션).
실행기 의 기본 명령 을 변경하려면
줄을 찾으십시오.
Exec=/usr/bin/google-chrome-stable %U
로 변경
Exec=/bin/bash -c "open_oncurrent /usr/bin/google-chrome-stable"
옵션을 바로 가기로 추가하려면 (위 이미지와 같이) :
줄을 찾으십시오.
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito;
다음으로 교체하십시오.
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito;New window on this screen;
그런 다음 파일의 맨 끝에 다음 섹션을 추가하십시오.
[New window on this screen Shortcut Group]
Name=New window on this screen
Exec=/bin/bash -c "open_oncurrent /usr/bin/google-chrome-stable"
TargetEnvironment=Unity
마찬가지로 솔루션을 다른 응용 프로그램에 적용 할 수 있습니다. 파일에서 사용할 명령 구문은 .desktop
예제와 같습니다.
Exec=/bin/bash -c "open_oncurrent <command>"
예외를 처리하는 방법에 대한 약간의 추가 설명이 스크립트에 있습니다.
#!/usr/bin/env python3
import subprocess
import sys
import time
import getpass
t = 0; user = getpass.getuser(); application = sys.argv[1]
"""
In most cases, the command to run an application is the same as the process
name. There are however exceptions, to be listed below, if you use these appli-
cations i.c.w. this script. Just add an item to the list in the format:
["<command>", "<process_name>"],
"""
exceptions = [
["/usr/bin/google-chrome-stable", "chrome"],
]
try:
procname = [app[1] for app in exceptions if app[0] == application][0]
except IndexError:
procname = application
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
# initial position of the mouse (click position)
start_pos = int(get("xmousepos").strip().split()[0])
# x- position of right side of the screen
x_res = [int(s.split("x")[0]) for s in get("xrandr").split() if s.endswith("+0+0")][0]
# current windows
start_windows = get("wmctrl -l")
# open application
subprocess.call(["/bin/bash", "-c", application+"&"])
while t < 30:
procs = get("ps -u "+user).splitlines()
new = [w for w in get("wmctrl -lpG").splitlines() if not w.split()[0] in start_windows]
match = sum([[line for line in procs if w.split()[2] in line and procname[:15] in line] for w in new], [])
if len(match) == 1:
data = new[0].split(); curr_pos = int(data[3]); compare = (start_pos > x_res, curr_pos > x_res)
if compare[0] == compare[1]:
pass
else:
if compare[0] == True:
data[3] = str(int(data[3])+x_res)
else:
data[3] = str(int(data[3])-x_res)
cmd1 = "wmctrl -r "+data[0]+" -b remove,maximized_vert,maximized_horz"
cmd2 = "wmctrl -ir "+data[0]+" -e 0,"+(",").join(data[3:7])
for cmd in [cmd1, cmd2]:
subprocess.Popen(["/bin/bash", "-c", cmd])
break
t = t + 1
time.sleep(0.5)
Unity는 Compiz를 작성 관리자로 사용하며 이러한 종류의 플러그인을 모두 갖추고 있습니다. 명령 줄을 엉망으로 만들지 않고 쉽고 긴 이야기를 짧게 만들려면 Compiz Config Settings Manager ( sudo apt-get install compizconfig-settings-manager
Software Center 포함 또는 설치)를 설치 하고를 Place Windows
확인하십시오.
해당 플러그인에는에 대한 몇 가지 옵션이 Multi Output Mode
있습니다. 당신이 원하는 것은 Use output device of focused window
입니다. 따라서 파일 관리자가 어디에 있든 열린 파일 창을 배치합니다