리눅스2023. 9. 18. 09:01

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/645668 (2021.1.25)

리눅스용 작업 자동화 도구 xdotool에 대한 기본적인 소개와 설치 이전 게시물을 참고하자. 여기로

이전 게시물에서는 주로 키보드 입력에 대한 예시들을 제시했는데, 여기서는 마우스 작업 자동화에 대해 정리해 보려고 한다.

우선, 마우스 작업을 하려면 마우스 포인터를 어느 위치로 이동시킬 것인지 정하기 위해 좌표를 파악해야 할 것이다. 마우스 포인터의 좌표 역시 xdotool을 이용한 간단한 스크립트를 통해서 확인할 수 있다. 아래의 예시다.

while [[ 1 ]]
do
  xdotool getmouselocation
  sleep 0.5
done

무한 루프로 동작하면서 xdotool의 getmouselocation 명령으로 마우스 좌표를 출력한다. 출력후에는 0.5초간 정지했다가 반복한다. 즉 0.5초 간격으로 마우스 포인터의 좌표가 계속 출력된다. 터미널창 하나에서 이렇게 좌표를 계속 출력하게 해 놓고, 실제로 할 작업을 위해 필요한 위치로 마우스 포인터를 이동시켜서 좌표를 확인하면 된다.

특정 좌표로 마우스를 이동시켜 클릭을 하려면 아래와 같이 해 볼 수 있다. xdotool의 mousemove 명령을 사용한다.

# 좌표 (x=100, y=200)으로 이동하여 마우스 왼쪽 클릭
xdotool mousemove 100 200 click 1

위의 예시에서 click 명령 다음에 오는 번호에 따라 클릭하는 버튼을 다르게 지정하게 된다. 1은 왼쪽, 2는 중간, 3은 오른쪽 클릭이다.

더블 클릭은 click 명령에 --repeat 옵션을 추가해 준다.

# 좌표 (x=100, y=200)으로 이동하여 마우스 왼쪽 더블클릭(--repeat 2)
xdotool mousemove 100 200 click --repeat 2 1

이제 특정 위치에서 다른 위치까지 마우스를 드래그(drag)하는 방법을 살펴보자. 마우스 포인터를 시작 위치로 이동시키고 버튼을 누른 채로 유지하면서 종료위치로 마우스 포인터를 이동시키면 된다. 버튼을 누른 상태를 유지하려면 mousedown 명령을 사용한다. 버튼 지정은 click 명령과 동일하다(1:왼쪽, 2:중간, 3:오른쪽). 누르고 있던 버튼을 해제하려면 mouseup 명령을 사용하면 된다. 단계적으로 살펴보자.

예를 들어 좌표(x=100, y=200)으로 이동한 후 마우스 왼쪽 버튼을 누른 채로 좌표 (x=200, y=300)으로 이동하려면 아래와 같이 할 수 있다. 마우스를 드래그하는 효과가 된다.

xdotool mousemove 100 200 mousedown 1 mousemove 200 300

특정 영역을 드래그한 후에 마우스 오른쪽 클릭을 해서 복사/붙여넣기 같은 메뉴가 나오도록 하려면 "click 3" 명령을 추가해서 오른쪽 클릭을 한 후 눌려 있던 왼쪽 버튼을 "mouseup 1" 명령으로 해제해 준다. 아래와 같다.

xdotool mousemove 100 200 mousedown 1 mousemove 200 300 click 3 mouseup 1

오른쪽 클릭으로 메뉴가 나왔을 때 드래그한 영역을 복사하기 위해 키보드 "c"를 입력할 경우 "key c" 명령을 추가해서 아래와 같이 될 것이다.

xdotool mousemove 100 200 mousedown 1 mousemove 200 300 click 3 mouseup 1 key c

이전 게시물에서 제시한 내용들과 조합해서 적당히 스크립트를 만들어서 작업을 자동화할 수 있다.

728x90
Posted by 반달가면