NetBSD上に最小限のデスクトップ環境を用意する＋VNCでアクセスできるようにする

[NetBSD Advent Calendar 2018](https://qiita.com/advent-calendar/2018/netbsd)、1日目の記事です。~~日もとっぷり暮れてしまってからの投稿です...。~~
今日はNetBSDをデスクトップ用途で使う場合の設定手順を紹介しようと思います。

## 背景

sshとかで端末にログインして作業するような生活をしていると、「GUIは無くてもまあ何とかなる」と思ってしまうことがあります。とはいえ、古いノートPCにNetBSDをインストールして利用するような場合にはGUI環境があれば良いなと思うこともあります。

もちろんNetBSDでもGUIな環境は構築できますが、毎回手順を忘れてググるのと、微妙にハマったりすることがあるので、備忘録的な意味も兼ねて設定手順を記録しておきます。

## 手順を試してみた環境

今回はNetBSD-8.0(amd64)な環境で手順を試しています。

## 今回のゴール

今回構築するGUI環境では、以下ができればOKとします。

 * X11の設定手順が行えること
 * デスクトップ環境が利用できる状態になること
 * 日本語入力が行えること
 * VNCでリモートからアクセスできるようになること

## 事前準備

GUI環境の設定に際して、以下の項目は事前に設定を済ませた状態にしておきます。

 * [NetBSDのインストール](https://qiita.com/furandon_pig/items/8b7d13a119067098d561)
 * [sudoの設定](https://qiita.com/furandon_pig/items/5479293cb21d6fd9f17c#sudo%E3%81%AE%E8%A8%AD%E5%AE%9A)を済ませておきます。

## 必要なパッケージ

まずは今回の設定に必要となるパッケージをインストールします。

```sh 
$ # Xfceデスクトップ環境用のパッケージ
$ sudo -i pkg_add -v xfce4 xfce4-panel xfce4-wm-themes xfce4-icon-theme
$
$ # 日本語フォント
$ sudo -i pkg_add -v ja-sazanami-ttf
$
$ # 日本語入力用のパッケージ
$ sudo -i pkg_add -v scim-uim scim-anthy
$
$ # VNCサーバ
$ sudo -i pkg_add tigervnc
$
$ # メモ帳的なアプリケーション
$ sudo -i pkg_add -v leafpad
$
$ # Webブラウザ
$ sudo -i pkg_add -v firefox
```

また、 `pkgse` というパッケージをインストールしておくと、Yumで言うところの `yum search` 的なことができて便利です。

```
$ sudo -i pkg_add -v pkgse
```

## X11の設定

X11の設定は、[以前の記事](https://qiita.com/furandon_pig/items/a1a636a5fa7dbe6d9f23#x%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B)にもあるように、以下の手順で `/etc/xorg.conf` を用意すればOKです。

```sh 
$ sudo Xorg -configure
$ sudo X -config /root/xorg.conf.new
$ sudo cp /root/xorg.conf.new /etc/xorg.conf
```

### X11起動時にXfceを起動させる

X11の起動は `xinit` コマンドで行いますが、その際に `$HOME/xinitrc` を用意しておくとX11の起動と共にXfceが立ち上がります。

私の環境では以下のような `$HOME/.xinitrc` を用意しています。

```sh 
# .xinitrc

[ $HOME/.Xmodmap ] && xmodmap $HOME/.Xmodmap

export LANG=ja_JP.UTF-8

# ASCII文字の0x07(BEL)が来ても音を鳴らさないようにする
xset b off
# デスクトップの背景色を紺色にする
xsetroot -solid midnightblue

# プロジェクタでデスクトップを移す際の画面サイズ設定
# (ノートPCとかでない限り不要な設定かも)
#xrandr --addmode VGA 1280x800
#xrandr --addmode VGA 1024x768

# 日本語入力周りの設定
export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
uim-xim &
uim-toolbar-gtk &
export XMODIFIERS="@im=uim"

# Xfceを起動する
exec xfce4-session
```

## 日本語入力まわりの設定

今回の日本語入力設定では、 `uim` と `anthy` を使用します。

### 日本語入力ON/OFFキーの変更

Anthyのデフォルト設定では、日本語入力のON/OFFを行うキーシーケンスが `Shift+SPACE` になっています。知らないと微妙にハマる(日本語入力ONの状態から戻せなくなる)ので、自分の使いやすいキーシーケンスに変更しておきます。今回は `Shift+O` に設定してみます。

以下のコマンドでUIMの設定画面を開きます。

```sh 
$ uim-pref-gtk
```
<img width="398" alt="img001.png" src="https://qiita-image-store.s3.amazonaws.com/0/61137/f22034cd-ae11-0bc5-2fcc-1afb2f9c6ce6.png">

Anthyのオン・オフのキーシーケンスを設定します。キーを取得した後に「追加(A)」を押さないと設定が有効にならないので注意してください(忘れがちです...)。
<img width="393" alt="img002.png" src="https://qiita-image-store.s3.amazonaws.com/0/61137/423e9bcf-6a02-0181-141e-33de107d1ebe.png">

設定が完了したら、最後に「適用」または「OK」ボタンを押します(これも忘れがちです...)。
<img width="397" alt="img003.png" src="https://qiita-image-store.s3.amazonaws.com/0/61137/af1537e3-0b15-00f0-ff4e-41c7e013f74d.png">

これで日本語入力が行えるようになりました。
<img width="196" alt="img004.png" src="https://qiita-image-store.s3.amazonaws.com/0/61137/4ea2caab-0861-98ef-c4fa-8b67def8c1c9.png">

## VNCの設定

次はVNCの設定です。コンソールから `xinit` コマンドを実行するとX11起動→Xfce起動となりますが、VNCのデフォルト設定では `$HOME/.xinitrc` を読み込みません。
そのため、以下の手順でVNCサーバ起動時に `$HOME/.xinitrc` のが参照されるようにします。

### VNCでもXfceが起動するようにする

具体的にはVNC(tigervnc)の設定ファイルである `$HOME/.vnc/xstartup` で `.xinitrc` を実行するように設定します。なので、 `$HOME/.xinitrc` は `chmod +x` しておきます。

```sh 
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
OS=`uname -s`
if [ $OS = 'Linux' ]; then
  case "$WINDOWMANAGER" in
    *gnome*)
      if [ -e /etc/SuSE-release ]; then
        PATH=$PATH:/opt/gnome/bin
        export PATH
      fi
      ;;
  esac
fi
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
$HOME/.xinitrc
```

VNCサーバを起動します。

```
$ vncserver -depth 24 :0
```

### VNCにセキュアに接続する

VNC自体は暗号化の機能を提供しないため、ローカルマシンの仮想マシン上で動かすような場合を除き、何らかのセキュリティ確保が必要です。一番手っ取り早い対応方法は、sshのトンネリング機能を利用するというものです。

以下の手順で5900番ポートの通信はsshによって暗号化されます。この方法であれば、クラウド上のインスタンスで動作しているVNCサーバにも安全に接続できます。

```
$ ssh -L 5900:localhost:5900 <ホスト名>
```

## まとめ

NetBSDで最小限のデスクトップ環境を設定する手順を紹介しました。
後は必要に応じてパッケージでGUIなアプリケーションをインストールすれば通常利用においてはあまり困らないかと思います。

明日の記事ではNetBSDを利用したUSBメモリのちょっとした利用Tipsを紹介できればと思います。