Debian XEN DomUで自動マウス&キーボードの環境構築

データ解析をやっていると、サーバからのログ収集だけでなく、ブラウザの管理画面からしか取得できないデータを自動的に取得する場面が出てきます。

それをGnome+VNC+xautomationでやってしまえという試みです。
単純に面白いのでオススメです。



いきさつ

とある管理画面にログインすると売上データが取得できるとします。1日1回取得する必要があり、当然人手をかけることは望ましくないので自動化しようとなります。HTMLソース主体のWebScrapingで解決できる場合もありますが、JavaScript動作などが複雑で、ブラウザ操作でしか取得できない場合があります。

ではどうするかというと、OSの画面上でマウスとキーボードを自動でブラウザ操作することで取得しようとなります。Windowsだと UWSC というものがあったりします。でも今回は、Linuxであり、しかもXENのDomUインスタンス上を条件として考えだしました。

DomUのコンソールは xm console で接続しますが、そこでビジュアル画面出せるのかよ、とかだいぶ的はずれなところから突っついていきました。で、この辺を調べてると Xwindow, Xorg, Xserver という単語にあたってくるわけですが、結論としては、そもそもDomUにXは入れられないとわかり、悶絶するなど。

結局、X Windowなど不要で、Gnome+VNCだけで画面を出せることがわかり、あとはxautomationを使うだけ。という流れで開発していきました。まずは基本環境の構築手順を紹介します。

リンク集

Gnome

  • Domain Technologie Control Forum: Free talk » Xen domU with X server
  • ※1 統合デスクトップ環境。”GNU Network Object Model Environment” の略
  • ※2 英単語の “gnome” (地の精) は [のーむ] だが、GNOME の場合は最初の G は発音する

  • VNC サーバ

  • Giving your Xen instances a working X setup
  • VNCについて – 日本語フォント
  • VNC接続なCentOS5で日本語入力する

  • VNC Viewer

  • RealVNC日本語インストール版の詳細情報 : Vector
  • TightVNC 日本語情報 – SourceForge.JP
  • UltraVNC 日本語インストール版の詳細情報 : Vector
  • MetaVNC — a window-aware VNC

  • xautomation

  • Linux(Ubuntu/Debian)でのGUI操作自動化|にーとSEの暇つぶし

  • 構築を始める前に

    VNC Serverは起動するユーザのホームディレクトリを使用します。以下の説明は全てrootユーザで実行していますが、一般ユーザで実行する場合はホームディレクトリが存在する必要があります。

    また、重要なシステムとして扱う場合、autofsなどでホームをNFSマウントしていると不安定になるためautofsを解除してから利用します。

    パッケージインストール

    関連パッケージ一式をインストールします。
  • Gnome一式
  • VNCサーバ
  • xautomation
  • 日本語表示用フォント
  • キーボード日本語入力(質問:keyboard-configuration では Japan を選択)
  • WEBブラウザ Iceweasel(Firefoxのこと)
  • ログインが遅くなるのでavahiは削除
  • いっぱい余計なの入るので削除

  • Gnome+VNCサーバを起動

    ここではrootユーザで実行します。

    まず、1回VNCサーバを立ち上げます。:0ディスプレイ番号になります(デフォルトは :1 )。この時に入力するパスワード(6~8文字)はVNC Viewerから接続する時に使います。

    起動を確認します。5900+ディスプレイ番号 のポートが利用されます。

    $HOME/.vnc/ に設定ファイルやログができます。

  • .log ファイルにVNCディスプレイ内で起きたことが記録されます。WEBブラウザのエラーなどが /var/log/ ではなくここに記録されます
  • pid は停止時に利用されます
  • passwd に入力したパスワードが入っており、削除すると次の起動時に再設定を求められます
  • xstartup に起動内容を記述します

  • いったん停止して設定ファイルを作成します。

    VNCサーバの設定ファイル例です。
    vim ~/.vnc/xstartup

    再度VNCサーバを起動します。

    ここまで何も目に見えないため胸が不安でいっぱいですが、次で一気に道が拓けます。

    VNC Viewerで接続する

    RealVNC・TightVNC・UltraVNC・MetaVNC と色々ありますが、実運用では不要で、開発での確認用のため複雑な機能は必要ありません。今回は簡単かつ日本語版がある RealVNC を使用しました。

    VNC Viewer をインストールします。
  • RealVNCをダウンロード

  • 起動し、接続してみます。(ポート番号と経路上のフィルタリングに注意してください)

    ゴミ箱などが表示され、メニューなどが日本語で表示されていればOKです。


    メニューバーのアプリケーションにあるシェル端末を開いたり、エディタを開いて日本語入力をしてみてください。言語バーはCtrl+Spaceで入力切替できます。


    xautomationで操作する

    画面に接続できたら、端末を起動してコマンドを投げてみます。
    VNC Viewer上の端末で打つ場合はディスプレイ番号を気にする必要はありません。

    実運用では同サーバ上の、他のシェルから実行することになるので、ディスプレイ番号を指定する必要があります。番号は起動時に指定したものですが、VNC上のシェルでこのように確認できます。

    :0.0 のように表示されますが、指定する時は :0 と省略可能です

    番号を変数代入しながらコマンド実行するか export しておくことで省略して実行できます。


    仮想環境が必須になった昨今では、Linuxのビジュアル画面を見ることも減ったでしょうから、Gnome+VNCまでを利用して楽しむことも良いかもしれません。

    次回はxautomationの詳しい使い方を紹介します。