はじめに
以前、Vagrantを使用してlibvit(KVM)の仮想マシンを立ち上げました。今回はそのマシンをX11転送できるようにしていきます。
動作環境
- ubuntu 22.04
- vagrant 2.3.4
X11 Forwarding
参考リンクによると、X11転送はVagrantfileに次の2つを追加すればよさそうでした。
- config.ssh.forward_x11 = true
- config.ssh.forward_agent = true
そのときのVagrantfileは次のようになりました。
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2204"
config.ssh.forward_x11 = true
config.ssh.forward_agent = true
config.vm.provider "libvirt" do |vb|
vb.cpus = "4"
vb.memory = "4096"
end
end
仮想マシンの再起動
それでは、仮想マシンを再起動して設定を反映します。vagrant reloadコマンドを実行します。
$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Creating shared folders metadata...
・
・
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
次に、vagrant sshコマンドで仮想マシンにログインします。では、試しにxeyesでx11転送されるか確認してみましょう。その結果は、ディスプレイが開けないというエラーが出てしまいました。
$ vagrant ssh
$ sudo apt install x11-apps
$ xeyes
Error: Can't open display:
どうやら原因はDISPLAY環境変数が設定されていないことにありそうです。
解決法
いろいろ探していると、vagrantのgithubのissueに似たような現象が報告されていました。X11転送を有効にするには/etc/ssh/sshd_configにX11UseLocalhost noの設定がいるようです。
プロビジョニング
それでは、/etc/ssh/sshd_configを修正していきましょう。ここではプロビジョニングという機能を使います。
ちなみにプロビジョニングとは、仮想マシンを自動的にセットアップするために必要なスクリプトやコマンドを指定することです。プロビジョニングを行うことで、手動で仮想マシンを設定する手間を省くことができます。
Vagrantfileの修正
11行目で/etc/ssh/shd_configを修正してX11UseLocalhost noにしています。ついでに、8行目でaptのリポジトリを日本にあるサーバに変更しています。
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2204"
config.ssh.forward_x11 = true
config.ssh.forward_agent = true
config.vm.provision "shell", inline: <<-SHELL
export DEBIAN_FRONTEND=noninteractive
sed -i.org -e 's|mirrors.edge.kernel.org/ubuntu|ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/archives|g' /etc/apt/sources.list
apt-get update && apt-get upgrade -y
sed -i 's/[#]*X11UseLocalhost[ ]*[a-z]*/X11UseLocalhost no/' /etc/ssh/sshd_config
systemctl restart sshd
SHELL
config.vm.provider "libvirt" do |vb|
vb.cpus = "4"
vb.memory = "4096"
end
end
プロビジョニングの実行
それでは、プロビジョニングを実行しましょう。vagrant reload –provisionコマンドを実行します。稼働している仮想マシンを一旦シャットダウンしてプロビジョニングを始めます。
$ vagrant reload --provision
動作確認
最後に、動作確認してみましょう。まず、vagrant sshコマンドでログインします。すると、DISPLAY環境変数もちゃんと設定されています。
$ vagrant ssh
$ echo $DISPLAY
ubuntu2204.localdomain:10.0
では、xeyesを実行してみましょう。
$ xeyes
無事X11転送されてxeyesが表示されました。

コメント