FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Vagrantの環境でGUIを立ち上げるための環境構築

結局やりたいことは、Vagrant上で動作しているTensorFlowなどで、GUIで結果を確認したいだけのことなんだけど、いろいろ調べて、構築するのに結構時間がかかった。

やりたいこと

Vagrant上で動作しているアプリケーションは基本CUIで動作するのだが、GUIのウィンドウも立ち上がるようにしたい。 このために、Vagrant+Putty+Xmingで環境を構築する。

Vagrantの設定

VagrantFileに、以下の2行を追加する。 一行目は、IPアドレスを固定している。これにより、Puttyなどで接続するときに毎回アドレスが変わるのを防いでいる。 次に、Xウィンドウのポートフォワードを設定している。これにより、GUIでの接続を可能にしている。

  config.vm.network "private_network", ip: "192.168.33.10"
  config.ssh.forward_x11 = true

config.ssh - Vagrantfile - Vagrant Documentation

config.ssh.forward_agent - If true, agent forwarding over SSH connections is enabled. Defaults to false.

これで、sshフォワーディングにより、Xが起動できるようになる。 この後、とりあえずvagrant halt && vagrant up して、環境を再構築しておく。

Puttyの設定

Puttyに、上記のIP: 192.168.33.10 に接続するプロファイルを追加しておく。

f:id:msyksphinz:20151123163852p:plain

このプロファイルは、Xmingで接続するときに利用する。ちなみに、通常のsshでも同様のことが実現できるが、Puttyの方がパスワードを記録しておいてくれるので操作が楽になる。

Xmingの設定

Xmingは、Windows用のX-Windowのサーバだ。これを使って、Vagrant内のUbuntuのプログラムのGUIWindowsGUIとして表示させるようにする。 まずは、Xmingをインストールするところから。下記URLからダウンロードしてインストールする。

osdn.jp

Xlaunchで、接続用のプロファイルを作る

  1. Xlaunchを立ち上げる。
  2. display settingsでは、僕はマルチウィンドウが好きなので、Multiple Windowsを指定

f:id:msyksphinz:20151123164355p:plain

  1. 最初に何を起動させるか指定。とりあえず、ちゃんと起動していることを確認するために、"Start a program"を指定しておこう。

f:id:msyksphinz:20151123164507p:plain

  1. 起動するプログラムを指定。ここでは、gnome-terminalを指定しておいた。接続にはPuttyを用いる。そして、先程指定した対象となるBoxのIPアドレスを指定し、ユーザ名、パスワード(任意)を入力しておく。

f:id:msyksphinz:20151123164642p:plain

  1. 次の設定は特になにもしない

f:id:msyksphinz:20151123164713p:plain

  1. 設定を保存しておく。僕はパスワードも一緒に保存しているが、これは任意。

f:id:msyksphinz:20151123164748p:plain

作成した設定ファイルをダブルクリックして起動

先程作成したコンフィグレーションデータをダブルクリックしてXlaunchを立ち上げる。ただしここではVagrantで、対象となる仮想マシンが立ち上がっていることが前提。

f:id:msyksphinz:20151123164949p:plain

これで、このように仮想マシン内のGUIアプリケーションを呼ぶことができるようになる。もちろん、大好きなEmacsを立ち上げることも可能。

f:id:msyksphinz:20151123165049p:plain

VagrantCUI側からGUIのアプリケーションを立ち上げることは可能なのか

今回は、まずgnome-terminalを呼び出してからEmacsなどのGUIアプリケーションを呼び出したが、Vagrant sshしたターミナルからGUIのアプリケーションを立ち上げることはできるのか。 普通にGUIアプリケーションを起動させようとしても、失敗してしまう。

vagrant@vagrant-ubuntu-precise-64:~$ gnome-terminal
Failed to parse arguments: Cannot open display:
vagrant@vagrant-ubuntu-precise-64:~$ xterm
xterm Xt error: Can't open display:
xterm:  DISPLAY is not set

DISPLAY変数が設定されていないようだが、これは実際にはどのように設定すれば良いのだろう?

f:id:msyksphinz:20151123165344p:plain

とりあえず見様見真似でやってみよう。DISPLAY=:10.0を追加してみる。

vagrant@vagrant-ubuntu-precise-64:~$ DISPLAY=:10.0 emacs&

立ち上がった!

f:id:msyksphinz:20151123165531p:plain