今回は Multipass で作った仮想マシン上で X Window System のアプリケーションを使う方法について。 やり方としては、Multipass の仮想マシンに ssh(1) を使ってログインできるようにした上で X11 Forwarding すれば良い。
使った環境は次のとおり。
$ sw_vers ProductName: macOS ProductVersion: 12.4 BuildVersion: 21F79 $ uname -srm Darwin 21.5.0 x86_64 $ multipass version multipass 1.10.0+mac multipassd 1.10.0+mac
もくじ
下準備
まずはローカルのマシンに X Server (XQuartz) と Multipass をインストールする。 今回は Homebrew を使って入れる場合の例になる。
$ brew install --cask xquartz multipass
XQuartz を初めてインストールする場合には、おそらくユーザの再ログインが必要になる。
そして、インストールした Multipass を使って仮想マシンを作る。
ここでは Ubuntu 20.04 LTS のホストを focal
という名前で作成している。
$ multipass launch \ --name focal \ --cpus 2 \ --mem 2048M \ 20.04
次のように仮想マシンが起動すれば良い。
$ multipass list Name State IPv4 Image focal Running 192.168.64.2 Ubuntu 20.04 LTS
仮想マシンに X Window System のアプリケーションをインストールする。
今回は例として x11-apps
の xeyes(1) を使う。
$ multipass exec focal -- bash -c "sudo apt-get install x11-apps"
上記はワンライナーにしてあるけど、ログインした上で実行するのであれば次のようにする。
なお、ローカルのマシンと仮想マシンを区別するために、以降では仮想マシン上での操作はターミナルの先頭に (focal)
とつけることにする。
$ multipass shell focal (focal) $ sudo apt-get install x11-apps
公開鍵を仮想マシンに登録する
続いて、ローカルのマシンで生成した公開鍵を Multipass の仮想マシンに登録する。
もし、ローカルのマシンに公開鍵が無いときは、ssh-keygen(1) で作る。 オプションについてはお好みで。
$ ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -P '' $ ls ~/.ssh | grep id_rsa id_rsa id_rsa.pub
上記で作成した公開鍵を仮想マシンに登録する。
次のようなワンライナーで実行できる。
$(cat ~/.ssh/id_rsa.pub)
の部分がローカルのマシンで生成した公開鍵にインラインで置換される。
<vm-name>
の部分には仮想マシンの名前を入れる。
$ multipass exec <vm-name> -- bash -c "echo $(cat ~/.ssh/id_rsa.pub) >> ~/.ssh/authorized_keys"
今回であれば仮想マシンの名前は focal
なので、次のとおり。
$ multipass exec focal -- bash -c "echo $(cat ~/.ssh/id_rsa.pub) >> ~/.ssh/authorized_keys"
ssh(1) で仮想マシンにログインする
公開鍵の登録ができたので、次は X11 Forwarding を有効にして ssh(1) で仮想マシンにログインする。
仮想マシンの IP アドレスは multipass info サブコマンドで取得できる。 ワンライナーで IP アドレスだけを抽出するには、次のようにすれば良い。
$ multipass info focal | grep IPv4 | awk '{print $2}' 192.168.64.2
上記の IP アドレスに ssh(1) でログインする。
このとき -X
オプションを指定して X11 Forwarding する。
$ ssh -X \ -o StrictHostKeyChecking=no \ -o UserKnownHostsFile=/dev/null \ ubuntu@$(multipass info focal | grep IPv4 | awk '{print $2}')
上記は仮想マシンのフィンガープリントをローカルのマシンに登録しない場合の例。 これは、Multipass を使っていると仮想マシンを作り直すことも多いため。
X Window System のアプリケーションを実行する
ログインできたら仮想マシン上で X Window System のアプリケーションを実行するだけ。
(focal) $ xeyes
上手くいけば次のようにウィンドウが表示されるはず。
いじょう。