adsense_in_article_test


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

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



핑백

  • 반달가면 : 리눅스에서 xdotool을 이용한 마우스 작업 자동화 2021-01-25 21:43:24 #

    ... 리눅스용 작업 자동화 도구 xdotool에 대한 기본적인 소개와 설치 이전 게시물을 참고하자. 여기로 이전 게시물에서는 주로 키보드 입력에 대한 예시들을 제시했는데, 여기서는 마우스 작업 자동화에 대해 정리해 보려고 한다. 우선, 마우스 작업을 하려면 마우스 포 ... more

덧글

  • debian_use 2020/05/23 02:39 # 삭제 답글

    안녕하세요? 구글링해서 찾아 왔는데요.
    Telegram-desktop 앱을 터미널에서 최소화 하는 명령을 찾고 있는데 쉽지 않아서 도움을 요청 드려도 될까요?

    그나마 성공한게 이거구요.
    ~$ wmctrl -r 'Telegram' -b add,above
    근데 이렇게 하면 최소화가 아니라 메뉴바만 남는 이상한 상태로 최소화 되더라구요.

    ~$ xdotool windowminimize Telegram
    이걸 해봤는데 안 되더라구요.

    어려운 거라면 무시해 주셔도 되고, 혹시 알고 계시다면 팁 좀 부탁드려요!
  • 반달가면 2020/05/23 08:11 #

    본문에 설명되어 있듯이, xdotool 명령어 입력하실 때 실행창 식별자(window id)가 지정되어야 합니다. xdotool search로 실행창 식별자를 먼저 확인해 보셔야 될 듯하네요.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.



통계 위젯 (화이트)

79627
3102
2200635

2019 대표이글루_IT

B-Side