WSL で Ubuntu デスクトップ環境を作ってみる

富士通クラウドテクノロジーズアドベントカレンダー2018の24日目の記事です。 qiita.com

3ヶ月ほど前から富士通クラウドテクノロジーズ(FJCT)という会社で働いています。 …という話をするとたいてい「何やってる会社?」と聞かれるのですが、「ニフクラというクラウドサービス」というと「ああニフティの」という反応。 「ニフクラは今はニフティじゃないんですよ」というと知らなかったというのがほぼ100%。 ニフクラの「ニフ」はニフティのニフでも日商岩井富士通の略でもなくて、「Navigate Innovative Future」らしいです(自分も最近知った)。

FJCTは、テックブログやってたり、社内LT大会やってたり、月イチでミートアップやってたり、IT勉強会向けに無償で会場提供してたり、「富士通」が名前に入ってる会社にしては面白い会社だと思います。

ただし会社のPCはWindowsしか使えないのが残念。残念なので、WSL を使って Ubuntu デスクトップ環境を試行錯誤しながら作ってみました。個人的な好みによりディストリビューションは Ubuntu MATE です。



WSL Ubuntu をインストール

Microsoft Store から Ubuntu を検索してインストール。

起動すると、作成するユーザー名とパスワードを求められるので入力。

何やら新しいファイルシステム(WslFs)にアップグレードできるみたいなので、コマンドプロンプトからアップグレード。効能不明だけど、アップグレードというからにはきっと何かいいことがあるんでしょう。 初期状態だと数分でおわったけど、ファイルが大量にある場合は何時間たっても終わらなかったのでやらない方がいいかもしれない。

C:\Users\tommy>wslconfig /upgrade Ubuntu
アップグレードしています...
アップグレードが正常に完了しました。

apt upgrade

Ubuntu をアップグレード。1行目はダウンロードサイトを日本のミラーサイトに変更した方が速いんじゃないかと思ってやったけど別にやらなくてもいいかも。

$ sudo sed -i.bak -e 's|http://archive|http://jp.archive|' /etc/apt/sources.list
$ sudo apt update
$ sudo apt upgrade

Ubuntu MATE インストール

Ubuntu MATE のインストール。結構時間がかかる。1時間くらい? dbus を起動しておかないとインストールの途中でエラーになるので起動しておく。

$ sudo service dbus start
$ sudo apt install ubuntu-mate-desktop mate-desktop-environment mate-common mate-core

LightDM 起動

mate-session で起動するかと思ったけど、うまくいかなかったので XDMCP 経由でログインする方法で。

/etc/lightdm/lightdm.conf を次の内容で作成。

[LightDM]
start-default-seat=false

[XDMCPServer]
enabled=true
port=177
$ sudo service lightdm start

なぜか復帰しないけどそのまま放置。

Windows に X Window サーバーをインストールして実行

何でもいいと思いますが、VcXsrv を使いました。 https://sourceforge.net/projects/vcxsrv/

実行

f:id:tmtms:20181223110458p:plain

「One large windows」を選択するのが無難。

f:id:tmtms:20181223110516p:plain

「Open session via XDMCP」を選択

f:id:tmtms:20181223110529p:plain

「Connect to host」に「127.0.0.1」を設定

f:id:tmtms:20181223110541p:plain

f:id:tmtms:20181223110605p:plain

f:id:tmtms:20181223110635p:plain

ログイン画面が出るので最初に登録したパスワードでログイン。

一応それなりに使えます。

日本語化

https://www.ubuntulinux.jp/japanese を参考に:

% wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
% wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
% sudo wget https://www.ubuntulinux.jp/sources.list.d/bionic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
% sudo apt update
% sudo apt upgrade
% sudo apt install ubuntu-defaults-ja

日本語入力として fcitx を使いたいので:

% sudo apt install fcitx fcitx-mozc

Menu → Control Center → Language Support でできるはずなんだけど、エラーが出る。

org.freedesktop.PolicyKit.Error.Failed: ('system-bus-name', {'name': ':1.69'}):
 org.debian.apt.install-or-remove-packages

原因はよくわからないので、あきらめて手動で設定。$HOME/.pam_environment に次の行を設定

LANGUAGE        DEFAULT=ja_JP.UTF-8

一旦ログアウトしてログインして、画面右上のキーボードアイコンを右クリックしてメニューから「設定」→「入力メソッド」で Mozc を追加。

Ctrl+スペースで日本語入力できるようになります。

f:id:tmtms:20181223130054p:plain

再起動

一度実行した WSL は画面を閉じてもそのまま動いてるようなので、完全に再起動するにはコマンドプロンプトから一旦終了させる必要があります。

wslconfig /t Ubuntu

Ubuntu を起動したあとは次の手順を実行します。

$ sudo service cgroupfs-mount start
$ sudo service dbus start
$ sudo service lightdm start

Docker

Docker も動くみたいです。ただし Ubuntu を管理者として実行する必要があります。

$ sudo apt install docker.io
$ sudo service docker start
$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

普通に起動した Ubuntu の端末と、管理者として起動した Ubuntu の端末は同じ Ubuntu を共有しているのに、service docker start でちゃんと起動するのは管理者として起動した端末の方だけという。WSL謎い…。

いまいち…

…と、ここまでの設定でまあそれなりに動くようになったんですけど、あくまでもそれなりにって程度です。

Docker が起動しない挙動は謎だし、Compiz をウィンドウマネージャーとして使えないし。

ウィンドウの切り替えキーの Alt-Tab は Windows が奪っちゃうので Ubuntu の中では使えません(これはXサーバー側の問題な気はする)。

日本語化のところでエラーが出たように、管理者として実行する必要がある処理はうまく動きません。 ウィンドウが落ちることもあります。 たぶん、polkit か dbus か systemd まわりだと思うのですが、わかりませんでした。

最近の Linux は systemd が動作しているのが前提になってることがあるので、systemd が動かない WSL では限界かもしれません。

デスクトップ環境として Ubuntu を使う場合は、やはり最新版を使いたいもんですが、18.10 はさらに systemd 依存が進んでいるのか、デスクトップ環境を動かすことができませんでした。

やっぱり本格的にデスクトップ環境として使うには VirtualBox に Ubuntu をインストールして VM のコンソールに直接デスクトップを表示した方がいいです。結局自分もそうしてます。