xdotool - 리눅스 X윈도우(X11) 기반 데스크탑에서 작업 자동화 리눅스

xdotool을 이용해서 리눅스의 X윈도우(X11) 기반 데스크탑 환경에서 작업을 키보드/마우스 작업을 자동화할 수 있다. KDE, XFCE, GNOME 등 리눅스의 주요 데스크탑 환경이 대부분 X윈도우 기반이다. 웹브라우저 등 GUI 어플리케이션에서 반복적으로 수행해야 하는 작업이 있을 경우 xdotool로 작업을 정하고 스크립트(shell script) 형태로 만들어 두면 편리하게 사용할 수 있다.

우선 설치부터 하자. 우분투/데비안 계열 기준으로 터미널창에서 아래와 같이 입력

sudo apt-get install xdotool

제공되는 기능이 상당히 많고 복잡한데, 몇가지 예시를 차분하게 보면 대강 감이 잡힐 것이다. 더 복잡한 작업을 하고 싶다면 구글 검색과 xdotool man 페이지를 참고하자.

man xdotool

우선 작업을 수행할 실행창을 먼저 찾자. search 옵션을 이용한다. 아래의 예시를 보자.

# 창 제목(window title)에 Mozilla Firefox가 있는 창의 식별자 찾기
xdotool search --sync --name "Mozilla Firefox"

--sync 옵션은 조건에 맞는 결과가 나올 때까지(여기서는 파이어폭스 실행창이 나올 때까지) 기다리라는 뜻이다. --name 옵션은 실행창의 제목을 기준으로 찾으라는 뜻. 조건에 맞는 실행창을 찾으면 해당 실행창의 식별자를 출력해 준다.

찾은 창을 선택하여 활성화하는 옵션은 windowactivate이다. 아래의 예시를 보자.

# 실행창 식별자를 window_id 변수에 저장
window_id=`xdotool search --sync --name "Mozilla Firefox"`
# 실행창 활성화
xdotool windowactivate --sync $window_id

키보드 입력은 key 옵션을 이용한다. windowactivate 옵션 뒤에 key 옵션을 추가해 주면 된다. 이글루스에 자동으로 접속하는 스크립트를 만들어 보자. 우선 파이어폭스를 실행한 후에 주소창으로 가는 단축키(ctrl+l)를 누른 후에 이글루스 주소를 입력하고 엔터를 누르게 만드는 것이다. 아래의 스크립트를 보자.

# 파이어폭스 실행
firefox &
# 실행창 식별자 확인
window_id=`xdotool search --sync --name "Mozilla Firefox"`
# 실행창 활성화, 이글루스(www.egloos.com) 접속
xdotool windowactivate --sync $window_id key --clearmodifiers ctrl+l w w w period e g l o o s period c o m Return

위의 예시에서 key 옵션을 자세히 보자. --clearmodifiers 옵션은 xdotool에서 키 입력을 할 때 기존에 shift, caps 등이 눌려 있을 경우를 무시하라는 뜻이다. 그 후에 차례로 입력값을 하나씩 적어준다.

마침표는 '.' 대신에 'period'로, 엔터는 'Return', 탭은 'Tab' 등으로 적어야 한다. 이런 특수문자들은 XKeySym 기준으로 써 주어야 한다. XKeySym 목록은 여기를 참고하자.

여기까지 한 후에 이글루스 페이지를 인쇄해 보자. 이 경우에는 인쇄할 페이지가 제대로 생성될 때까지 시간이 걸리므로 sleep 명령을 적당하게 넣는다.

# 인쇄 미리보기로 가기(alt+f 이후 v 누름)
xdotool windowactivate --sync $window_id key --clearmodifiers alt+f v
# 미리보기가 제대로 나올 때까지 기다림(3초)
sleep 3

# 인쇄 단축키 누름(alt+p)
xdotool windowactivate --sync $window_id key --clearmodifiers alt+p
# 인쇄창 식별자를 prt_id 변수에 저장
prt_id=`xdotool search --sync --name "^Print$"`
# 탭을 한번 눌러서 'Print to File' 선택후, 파일명 입려창 단축키(alt+n)를 누르고 파일명 입력 test.pdf, 인쇄 단축키(alt+p) 누름
xdotool windowactivate --sync $prt_id  key Tab alt+n t e s t period p d f alt+p
sleep 5

# 인쇄 미리보기 종료(alt+c), 파이어폭스 종료(control+q)
xdotool windowactivate --sync $window_id key alt+c control+q

예시에서 알 수 있듯이, 작업하는 어플리케이션에서 제공하는 단축키들을 잘 이용하면 반복 작업을 자동화할 수 있다. 마우스 입력도 자동화할 수 있다고 하는데, 단축키만으로도 웬만한 작업은 자동화가 되길래 자세히 살펴보지 않았다. 마우스 자동화를 쓰려면 이동해야 할 좌표를 지정해야 하므로 일이 꽤 복잡해진다.

마지막으로 이글루스에서 자동으로 로그인하는 예시를 보자. 파이어폭스를 실행해서 이글루스 로그인 페이지로 간 후에 계정을 입력하고 탭을 눌러 암호 입력창으로 가서 접속암호를 입력했다. 계정은 my_id, 암호는 my_pwd라고 가정했다. 이 스크립트는 단지 예시이며, 실제로 스크립트에 접속암호를 노출시키는 것은 매우 위험하다.

# 파이어폭스 실행, 이글루스 로그인 페이지로 (http://sec.egloos.com/login.php)
~/firefox/firefox 'http://sec.egloos.com/login.php' &
# 실행창 식별자를 window_id 변수에 저장
window_id=`xdotool search --sync --name "egloos.com - Mozilla Firefox"`
# 실행창을 선택한 후 계정(my_id)과 접속암호(my_pwd) 입력
xdotool windowactivate --sync $window_id key --clearmodifiers m y underscore i d Tab m y underscore p w d Return

좀 복잡하기 때문에 처음에 익숙해지려면 시행착오도 거치고 시간도 써야 되긴 하는데, 일단 스크립트로 만들어 두면 나중에 시간이 많이 절약된다.



덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

1431045
3392
1828171

ad_widget_2