xdotool コマンド全26実例

こんにちは。フリーランス・コンサルタント&エンジニアの 九保すこひ です。

さてさて、このところPHPやJavaScriptの記事ばかりになってしまったので、たまにはもっとネイティブな環境のものもやってみようという気になっていました。

そして、できるなら自分の開発環境にプラスになるものを知識として仕入れておきたいということで今回は前々から気になっていた、

xdotool(えっくす・どぅ・つーる)

の全コマンド・まとめをお届けします。

xdotool というのは、コマンドからウィンドウを操作することができるプログラムで、例えば、以下のような操作をすることができます。

  1. Google Chromeで新しいウィンドウを開く
  2. アドレスバーに移動する
  3. http://yahoo.co.jpとタイプする
  4. エンターキーを押してヤフーを表示する

さらに、このそれぞれのコマンドをシェルスクリプトに書いておけば、そのファイルを実行するだけで1〜4までの動きを全自動で実行させることができるというわけですね!

※ xdotoolは基本的にLinuxやOSX向けのプログラムです。Windows向けもあるにはあるようですが、今回はテストしていませんのであしからずm _ _m

では、ひとつずつ見ていきましょう。

「xdotoolでいろいろ自動化できそう!」

実行環境: Ubuntu 18.04, xdotool 3.20160805.1

インストール

公式ページによると、各種パッケージ・マネージャにプログラムが提供されています。(インストールにはsudoなど権限が必要になる場合があります)

Debian (Ubuntu)

apt-get install xdotool

FreeBSD

pkg install xdotool

Fedora

dnf install xdotool

OSX

brew install xdotool

OpenSUSE

zypper install xdotool

xdotoolコマンド

キーボード関連

keyでキー入力する

一番基本的になコマンドで、擬似的にキーボードのキーをタイプした動作を実行することができます。

例えば「a」を入力したい場合は次のようになります。

xdotool key a

shitfctrlなどと連携する場合は以下のように+で文字をつなぎます。

# shiftキーと連携
xdotool key shift+a
# ctrlキーと連携
xdotool key ctrl+a
# altキーと連携
xdotool key alt+a

また、以下のようにすると複数の連携キーを実行することもできます。

# shift, ctrl と連携
xdotool key shift+ctrl+w

なお、特殊なキーは以下のようになります。(大文字小文字は区別されますので正確に入力してください)

# スペースキー
xdotool key space
# バックスペース
xdotool key BackSpace
# Delキー
xdotool key Delete
# Enterキー("Enter"ではない)
xdotool key Return
# タブキー
xdotool key Tab
# 数字キー
xdotool key 1
xdotool key 2
xdotool key 3
(続く...)
# 方向キー
xdotool key Up
xdotool key Down
xdotool key Right
xdotool key Left
# Homeキー
xdotool key Home
# Endキー
xdotool key End
# F1キー
xdotool key F1
# Insertキー
xdotool key Insert
# PgUp, PgDnキー
xdotool key Page_Up
xdotool key Page_Down
# PrntScr
xdotool key Print
# Windowsキー
xdotool key Super_L
# Caps Lockキー
xdotool key Caps_Lock
# Numb Lockキー
xdotool key Num_Lock

なお、「Hello!」などテキストを入力したい場合は次のtypeコマンドを使うと便利です。

type でテキスト入力する

特定の文字列を入力したい場合に使うコマンドです。例えば、ブラウザのアドレスバーにURLを打ち込む場合などに便利でしょう。

xdotool type https://yahoo.co.jp

keyup, keydown でキー操作する

keyとほとんど同じですが、keydownはキーを押した時だけイベントを実行し、keyupはその逆です。

マウス関連

mousemove でマウスを移動させる

マウスのカーソルを指定した座標(x, y)に移動することができます。

xdotool mousemove 100 200

mousemove_relative でマウスを相対的に移動させる

相対的にマウスカーソルを移動させることができます。
例えば、カーソルが現在 x,y = (100, 200) の座標にあるとき、以下のコマンドを実行すると(130, 240)へ移動することになります。

xdotool mousemove_relative 30 40

click でクリックする

文字通りクリックをすることができます。
なお、このコマンドは数字でマウスのどのボタンを使うかを指定することができます。内容は以下のとおりです。

1 ・・・ 左ボタン
2 ・・・ 中ボタン
3 ・・・ 右ボタン
4 ・・・ マウスホイールを上へ
5 ・・・ マウスホイールを下へ

そのため、現在カーソルがある位置をクリックする場合は以下のようになります。

# 左クリック
xdotool click 1

click –repeat でダブルクリックする

ダブルクリックしたい場合は、clickコマンドに--repeatをつけて以下のようにします。

xdotool click --repeat 2 1

mouseup, mousedown でマウスを操作する

clickとほぼ同じですが、mousedownはボタンを押下するだけで、mouseupはその逆になります。

getmouselocation でマウス位置を取得する

現在マウスカーソルがある位置を取得するコマンドです。

xdotool getmouselocation

実際に実行したものが以下になります。

behave_screen_edge でマウス・イベントをつける

マウスが以下8つのスクリーン位置に移動した場合に起動できる命令です。

(※カッコ内はコマンドで指定するパラメータ)

  • 上(top)
  • 右(right)
  • 下(bottom)
  • 左(left)
  • 左上(top-left)
  • 右上(top-right)
  • 右下(bottom-right)
  • 左下(bottom-left)

例えば、マウスがスクリーン下に移動したときに「a」と入力するには以下のようになります。

xdotool behave_screen_edge bottom key a

※ ただし私の環境では2画面を使っているからかbottom以外では起動しませんでした。環境の影響が強いのかもしれません。

ウィンドウ関連

search でウィンドウを検索する

例えば、今たくさんウィンドウを開いている中からGoogle Chromeのウィンドウを探しだし、そのIDを取得することができます。

もっともシンプルな例はこうなります。

xdotool search --name chrome

ただし、これ例だとおそらく複数のIDが取得されることになります。これは、目に見えていないGoogle Chromeも含まれているからで、目に見えているウィンドウのみ取得するには--onlyvisibleをつけて実行します。

xdotool search --onlyvisible --name chrome

ちなみにシェルスクリプトでIDを取得するには以下のようにするといいでしょう。

#!/bin/sh

window_id=$(xdotool search --onlyvisible --name chrome)
echo $window_id

windowactivate でウィンドウをアクティブにする

ある特定のウィンドウをアクティブ(ウィンドウがクリックされて最前面に表示された状態)にする

xdotool windowactivate (ウィンドウID)

getactivewindow で現在アクティブになっているウィンドウIDを取得する

xdotool getactivewindow

selectwindow でウィンドウをクリックしてIDを取得する

このコマンドを実行し、あるウィンドウをクリックするとそのウィンドウIDを表示させることができます。

xdotool selectwindow

behave でウィンドウにイベントをつける

ウィンドウに以下3つのイベントをつけることができます。

  • mouse-enter ・・・ マウスがそのウィンドウに入った時
  • mouse-leave ・・・ マウスがそのウィンドウを出た時
  • mouse-click ・・・ クリックされた時
  • focus ・・・ フォーカスされた(アクティブになった)時
  • blur ・・・ フォーカスを失った時

例えば、マウスカーソルがGoogle Chromeのウィンドウ内に入ったときに、そのウィンドウタイトルを表示するコマンドはこうなります。

xdotool search --name chrome behave %@ mouse-enter getwindowname

getwindowpid でウィンドウのpidを取得する

例えば、Google Chromeのpidを取得するには以下のようになります。

xdotool search --onlyvisible --class chrome getwindowpid

getwindowname でウィンドウのタイトルバーを取得する

例えば、Google Chromeのウィンドウを検索し、さらにそのタイトルバーを取得するには以下のようになります。

xdotool search --onlyvisible --class chrome getwindowname

getwindowgeometry でウィンドウ位置やサイズを取得する

例えば、Google Chromeのウィンドウ位置とサイズを知りたいときにはこのようになります。

xdotool search --onlyvisible --class chrome getwindowgeometry

実際の例です。

getwindowfocus で現在フォーカスされているウィンドウIDを取得する

現在フォーカスされているウィンドウのIDを取得します。

xdotool selectwindow

windowsize でウィンドウ・サイズを変更する

例えば、あるウィンドウのサイズを縦横=(500x300)に変更したい場合です。

xdotool windowsize (ウィンドウID) 500 300

また、ピクセル単位ではなくパーセントでも指定できます

xdotool windowsize (ウィンドウID) 50% 30%

windowmove でウィンドウの位置を移動させる

例えば、あるウィンドウをx,y=(50,100)の座標へ移動させる場合です。

xdotool windowmove (ウィンドウID) 50 100

windowfocus で特定のウィンドウにフォーカスする

xdotool windowfocus (ウィンドウID)

※ ただし、ウィンドウをアクティブにする場合はwindowactivateを使ってください。

windowminimize でウィンドウを最小化する

xdotool windowminimize (ウィンドウID)

windowkill でウィンドウを終了させる

xdotool windowkill (ウィンドウID)

その他

sleepで一定時間待つ

例えば、10秒待機する場合は以下のようになります。

xdotool sleep 10

また、5秒待ってから「a」を入力したい場合はこうなります。

xdotool sleep 5 key a

なお、ミリ秒を指定したい場合は小数点をつけてください。

xdotool sleep 0.01

ちなみに

xdotoolにはデスクトップ関連の操作もできるらしいのですが、私の環境で実行したところ全く変化がなかったり、あまり有効だと思えるものがなかったので今回は省略させていただきました。

また、xdotoolの各コマンドには様々なオプションもありますので、興味がある方は以下のページをご参照ください。

xdotool – command-line X11 automation tool

ということで、今回はたまーに書いているデスクトップのLinux関連の話題でした。おそらくそれほど需要が多いとは思いませんが、皆さんのお役にたてたら嬉しいです!

ではでは〜♪

このエントリーをはてなブックマークに追加       follow us in feedly  
開発のご依頼お待ちしております
開発のご依頼はこちらから: お問い合わせ
どうぞよろしくお願いいたします! by 九保すこひ