디자인 된 동작의 동작을 변경하는 "비밀"설정을 찾지 못했습니다. 마치 왼쪽 화면이 "기본"화면 인 것처럼 보입니다.
그러나 기본적으로 동일한 결과로 해결 방법을 만드는 것이 가능합니다. 두 번째 화면을 연결할 때 모든 창을 나열하는 스크립트를 만들 수 있습니다. 결과적으로 처음에 왼쪽 화면으로 이동 한 모든 창은 1-2 초 안에 오른쪽 화면으로 다시 이동합니다. 모든 창의 크기가 유지됩니다.
이것이 아래 스크립트가하는 일입니다.
두 가지 버전
정렬 된 창을 두 가지 방법으로 복원 할 수 있습니다.
- 때로는 두 번째 화면이 연결된 후 바로 가기 키를 사용하여 실행할 수 있습니다.
- 자동으로 백그라운드에서 스크립트를 실행하고 화면이 연결될 때까지 기다립니다.
사용하는 방법
준비
설치 wmctrl
sudo apt-get 설치 wmctrl
의 도움으로 두 화면의 이름을 찾으십시오. 화면 xrandr
이름은 "connected"라는 단어 바로 앞에 있습니다.
복사 아래 스크립트 중 하나 인 헤드 섹션에서이 두 줄에서 화면 이름을 올바른 이름으로 바꿉니다.
screen_1 = "LVDS1" # your main screen (laptop)
screen_2 = "VGA1" # secundary screen (on the left)
스크립트를 다음과 같이 저장하십시오 move_windows.py
디스플레이 설정에서 보조 화면이 왼쪽에 있는지 확인하십시오. 두 화면의 맨 위 줄은 문제의 첫 번째 이미지와 같이 일직선이되어야합니다.
스크립트 실행
- 스크립트 를 사용하여 가끔 실행하는 경우 두 번째 화면이 연결된 후 실행하십시오.
python3 /path/to/move_windows.py
해야 할 일을한다고 생각되면 바로 가기 키에 키보드를 추가 할 수 있습니다. 시스템 설정> "키보드"> "바로 가기"> "사용자 정의 바로 가기"를 선택하십시오. "+"를 클릭하고 다음 명령을 추가하십시오.
하나를 사용하여 백그라운드에서 실행하는 경우 다음 명령으로도 실행하십시오.
python3 /path/to/move_windows.py
의도 한대로 작동하면 시작 응용 프로그램에 추가하십시오 : Dash> Startup Applications> Add
랩탑 (오른쪽)과 두 개의 다른 화면 (왼쪽)으로 스크립트를 테스트했습니다. 결과는 같습니다.
노트북 화면
스크립트없이 연결
실행중인 스크립트와 연결
스크립트가 작업을 마치면 창은 물론 "혼자 남게"되고 창을 원하는대로 배열 할 수 있습니다.
스크립트
1. "수동"버전, 화면이 연결된 후 실행
#!/usr/bin/env python3
import subprocess
import time
#--
screen_2 = "LVDS1" # replace with your internal screen (right)
screen_2 = "VGA1" # replace with your external screen (left)
#--
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shift(xr_output):
lines = [l for l in xr_output.splitlines() if " connected" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def shift_windows(shift):
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
relevant = []
for w in w_data:
props = get("xprop -id "+w[0])
if (int(w[2]) < shift, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) == 2:
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), w[3], w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
shift_windows(get_shift(get("xrandr")))
2. 백그라운드에서 실행되는 자동 버전
#!/usr/bin/env python3
import subprocess
import time
#--
screen_2 = "LVDS1" # replace with your internal screen (right)
screen_2 = "VGA1" # replace with your external screen (left)
#--
def get(cmd):
return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_shift(xr_output):
lines = [l for l in xr_output.splitlines() if " connected" in l][0].split()
return int([it for it in lines if "x" in it][0].split("x")[0])
def shift_windows(shift):
w_data = [l.split() for l in get("wmctrl -lG").splitlines()]
relevant = []
for w in w_data:
props = get("xprop -id "+w[0])
if (int(w[2]) < shift, "_TYPE_NORMAL" in props, "TYPE_DIALOG" in props).count(True) == 2:
command = "wmctrl -ir "+w[0]+" -e 0,"+(",").join([str(int(w[2])+shift), w[3], w[4], w[5]])
subprocess.Popen(["/bin/bash", "-c", command])
while True:
try:
screen_info1 = get("xrandr")
time.sleep(5)
screen_info2 = get("xrandr")
check = screen_2+" connected"
if (check in screen_info1, check in screen_info2) == (False, True):
time.sleep(5)
shift_windows(get_shift(screen_info2))
except:
pass