sonumb

XQuartz 를 통해 실행된 윈도우창이 화면 영역밖에서 출력될 때. 본문

개발자 이야기

XQuartz 를 통해 실행된 윈도우창이 화면 영역밖에서 출력될 때.

sonumb 2019. 1. 25. 09:38

macos에서 XQuartz를 이용해서 X11 을 출력하다보면, 창이 화면밖으로 나갈 때가 있다. 


예를들어, 회의실에서 서브모니터에 연결해서 리뷰를 한뒤, 제자리에 돌아와서 내 서브모니터에 연결하면 백프로 창의 위치가 바뀌어 있다.


사파리나 일반 앱들은 유틸을 이용해서 화면으로 출력가능하지만, XQuartz를 통해 포워딩된 창들은 크기 및 이동 제어가 안된다. 


단순히 최소화 정도만 가능한 수준...



여담으로, 추측컨데 

 

1. XQuartz에서 윈도우 포지션을 adjusting 하는 부분 

2. 창이 어느 모니터에 위치하고 있으며, 이에 따라 좌표 (0,0)을 계산하는 부분 


고치면 될 듯하다.



여튼 이럴 시간이 없으니 wmctrl 이라는 프로그램을 이용하자.


# 설치

$ brew install wmctrl



ds5라는 centos에 접속하여 xclock을 두 개 실행한 상태이다.


창이름이 동일한 것이 있을 경우. 아래와 같이 변경하여 이용하자.


# 창목록 조회

$ wmctrl -l

0x00e0000e  0 ds5 xclock

0x0100000e  0 ds5 xclock


# 이름 변경: 하나만 적용됨

$ wmctrl -r xclock -N xclock2


$ wmctrl -l

0x00e0000e  0 ds5 xclock2

0x0100000e  0 ds5 xclock


포지션 변경과 창 크기 변경 


# G는 gravity인데 신경쓰지 않아도 된다.

# 나머지 사항은 (x,y) 포지션  및 크기 (width, height)

$ wmctrl -r <창이름> -e <G>,<X>,<Y>,<W>,<H>


$ wmctrl -r xclock2 -e 0,25800,12000,1024,700

$ wmctrl -r xclock2 -e 0,0,0,1024,700


위의 두가지 명령어를 혼용하는 것이 좋다.



왜냐하면, 아래와 같은 이유 때문...

1. 창이 메인모니터(맥북의 디스플레이) 에 위치: 해상도를 벗어난 크기를 지정하면, 0,0 포지션에 위치한다.  
2. 창이 서브모니터에 위치: 해상도를 벗어난 크기를 지정하면, 화면밖으로 아웃. 해상도를 벗어나지 않는 포지션이라야 정상적으로 출력.

(❗️아이맥도 동일한 현상이 나타나는 지는 확인하지 않음.)



다음과 같은 함수를 .bashrc 파일에 함수에 넣어서 명령어로 이용하자.


initwinpos()

{

  if [[ $# -ne 1 ]] ; then

    echo "Usage: ${FUNCNAME[0]} <WIN>"

  else

    wmctrl -r $1 -e 0,25800,12000,1024,700

  fi

}


initwinposa()

{

  if [[ $# -ne 1 ]] ; then

    echo "Usage: ${FUNCNAME[0]} <WIN>"

  else

    wmctrl -r $1 -e 0,0,0,1024,700

  fi

}

반응형