vagrant で立ち上げたCentOS 7 にリモートデスクトップ+日本語環境設定を行うシェルスクリプト

# はじめに
最近、dockerの勉強のためにvagrantでCentOS 7 を立ち上げました。
立ち上げたCentOS 7 に、リモートデスクトップと日本語環境の設定を行ったのですが、思ったより苦戦したので共有します。
行った設定はシェルスクリプトにまとめ、vagrantのprovisonで実行できるようにしました。

+ OS：Windows 10(64bit)
+ vagrant：Vagrant 1.7.4
+ CentOS 7 box：https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

# 目次
1. リモートデスクトップ+日本語環境設定を行うシェルスクリプト
2. 使い方
3. 苦戦したところ
4. 感想

# 1.リモートデスクトップ+日本語環境設定を行うシェルスクリプト
```sh:provision.sh
# xrdp、VNCをインストール
sudo yum -y install epel-release
sudo yum -y install xrdp
sudo yum -y install tigervnc-server

# デスクトップ環境をインストール
sudo yum -y groups install "GNOME Desktop"
sudo systemctl set-default graphical.target

# 元のcolor設定ではリモートログイン時にエラーになるため、32bitから24bitに変更
sudo sed -i -e 's/max_bpp=32/max_bpp=24/g' /etc/xrdp/xrdp.ini

# 日本語環境のインストールと設定
sudo yum -y install ibus-kkc vlgothic-*
sudo localectl set-locale LANG=ja_JP.UTF-8
source /etc/locale.conf

# リモートログイン時の日本語設定
if grep -e 'export LANG=ja_JP.UTF-8' /etc/xrdp/startwm.sh; then
  :
else
  sudo sed -i -e 's/#export LANG=$LANG/#export LANG=$LANG\nexport LANG=ja_JP.UTF-8/g' /etc/xrdp/startwm.sh
fi

# xrdpで使用するポートを開放
sudo firewall-cmd --permanent --zone=public --add-port=3389/tcp
sudo firewall-cmd --reload

# xrdpのサービスを起動し、自動起動を有効
sudo systemctl start xrdp.service
sudo systemctl enable xrdp.service
```

# 2.使い方
Vagrantfile のprovisionにシェルスクリプトを追加するだけです。

```sh:Vagrantfile
... 
config.vm.provision :shell, :path => "provision.sh"
...
```

# 3.苦戦したところ
## 元のcolor設定ではリモートログイン時にエラーになる
xrdpをインストールしてそのままサービスを起動してログインすると、以下のようなエラーが出ます。
>
VNC error – only supporting 8, 15, 16 and 24 bpp rdp connections

[ここ](http://d.hatena.ne.jp/teandt/20151101)を参考にすると、/etc/xrdp/xrdp.ini の max_bpp=32 と設定しているところが原因だと分かりました。

```ini:/etc/xrdp/xrdp.ini
...
max_bpp=32
...
```
color設定を行っているところらしいのですが、24ビット以下を指定しないとエラーになるようです。そのため、max_bpp=32 を max_bpp=24 に変更します。今回のシェルスクリプトではsedコマンドを使って置換しました。

```sh:provision.sh
...
# 元のcolor設定ではリモートログイン時にエラーになるため、32bitから24bitに変更
sudo sed -i -e 's/max_bpp=32/max_bpp=24/g' /etc/xrdp/xrdp.ini
...
```

## リモートログイン時の日本語設定
color設定を変更しリモートデスクトップ接続できるようになったのですが、何故か英語環境のままでした。localeがUSの状態です。しかし、SSHで接続するとちゃんとlocaleがJPになっています。[先程のcolor設定変更時に参考にしたサイト](http://d.hatena.ne.jp/teandt/20151101)や[ここ](http://cobitech.blogspot.jp/2015/12/centos-71-xrdp.html)を参考にすると、/etc/xrdp/startwm.sh にリモートログイン時の日本語設定が出来ていないことが原因だと分かりました。

```sh:/etc/xrdp/startwm.sh
...
#. /etc/environment
#export PATH=$PATH
#export LANG=$LANG
...
```
このファイルに export LANG=ja_JP.UTF-8 を追加する必要があるようです。

```sh:/etc/xrdp/startwm.sh
...
#. /etc/environment
#export PATH=$PATH
#export LANG=$LANG
export LANG=ja_JP.UTF-8 # 追加
...
```
今回のシェルスクリプトではsedコマンドを使って、#export LANG=$LANG の次の行に export LANG=ja_JP.UTF-8 を追加するようにしました。また、このままではprovisionする度に export LANG=ja_JP.UTF-8 が追加されてしまうので、grepして既に追加されていた場合は追加しないようにif文で判断するようにしました。

```sh:provision.sh
...
# リモートログイン時の日本語設定
if grep -e 'export LANG=ja_JP.UTF-8' /etc/xrdp/startwm.sh; then
  :
else
  sudo sed -i -e 's/#export LANG=$LANG/#export LANG=$LANG\nexport LANG=ja_JP.UTF-8/g' /etc/xrdp/startwm.sh
fi
...
```

# 4.感想
dockerを勉強するつもりだったのに、気づいたらリモートデスクトップと日本語環境の設定でかなり時間を使ってしまいました...。でも、コピペする時とか結構便利なので、やっぱり時間掛かってもやったかいはあったと思います。これからはprovisionに追加して vagrant up すればすぐに使えますからね！次はdocker関係でなにか投稿したいです。