九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
さてさて、このところPHPやJavaScriptの記事ばかりになってしまったので、たまにはもっとネイティブな環境のものもやってみようという気になっていました。
そして、できるなら自分の開発環境にプラスになるものを知識として仕入れておきたいということで今回は前々から気になっていた、
xdotool(えっくす・どぅ・つーる)
の全コマンド・まとめをお届けします。
xdotool
というのは、コマンドからウィンドウを操作することができるプログラムで、例えば、以下のような操作をすることができます。
- Google Chromeで新しいウィンドウを開く
- アドレスバーに移動する
- http://yahoo.co.jpとタイプする
- エンターキーを押してヤフーを表示する
さらに、このそれぞれのコマンドをシェルスクリプトに書いておけば、そのファイルを実行するだけで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
shitf
やctrl
などと連携する場合は以下のように+
で文字をつなぎます。
# 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関連の話題でした。おそらくそれほど需要が多いとは思いませんが、皆さんのお役にたてたら嬉しいです!
ではでは〜♪