2018年秋、とうとうこの日がやってきました。毎年バージョンアップされるmacOSが我が家のメインマシンであるMacBook Pro 2011をサポート対象外にしてしまいました。
macOSは2世代ぐらい前のバージョンまではセキュリティパッチを当ててくれるようなんですが、もはや最新の機能は使えない。ウチのMBPはCore i7の入った(当時の)最高級グレードで、ディスクを500GBのSSDに変えてメモリも16BGまで増設しているので、普通に使う分には全く問題ないんですが。
FreeBSDデスクトップマシン
先日CentOSサーバーを触ってみたんですが、基本的にはFreeBSDサーバーの方が使い慣れています。
LinuxでもUbuntuあたりならWindowsやMac並みに何も考えずにインストールできそうですが、たまたまParalles Desktopに動作検証用のFreeBSD 11.2が入っていたので、これにデスクトップ環境を入れてみます。来るべきmacOSとの別れの日に備えて検証を進めておくのです。…そんなこと言ってても、新しいMac買っちゃうかもだけど。
X Window Systemを入れよう
unix系のGUIを利用するには、OSとGUIとの橋渡しをするウィンドウマネージャを入れなくてはなりません。FreeBSDのpkgではXorgが用意されているのでこれをインストールします。
# pkg install xorg
〜中略〜
# pw groupmod video -m user_name || pw groupmod wheel -m user_name
インストールが終わったら、デスクトップを利用するユーザーをvideoグループとwheelグループに所属させます。XorgをインストールするとTWMウィンドウマネージャが入ってくるので、この時点でstartxすると一応GUIが立ち上がります。
GUIを終了してターミナルに戻るにはxtermをexitで終了させなくてはなりません。デスクトップメニューのExitだとTWMが終了するだけです。
Xfceデスクトップ環境を構築する
TWMはあまりにも古臭いので、軽量デスクトップのXfceを入れることにします。

デスクトップを走るネズミが可愛い。
Xfceもpkgでインストールできます。
# pkg install xfce
インストールが終わったら、/etc/rc.confに以下を追記。
dbus_enable="YES"
そして初期化ファイル~/.xinitrcに以下を記載。
. /usr/local/etc/xdg/xfce4/xinitrc
たったこれだけ。簡単!
日本語化する
ただまぁ、これだけだと日本語が文字化けします。それに日本語入力もできない。
最低限のフォントと日本語入力のMozcをインストール。
pkg install ja-font-std
〜中略〜
pkg install ja-ibus-mozc
〜中略〜
そしてMozcが使えるように、設定を追記して~/.xinitrcは最終的にこうなりました。
export GKT_IM_MODULE=ibus
export QT_IM_MODULE=xim
export XMODIFIERS=@im=ibus
/usr/local/bin/mozc start
ibus-daemon -r --daemonize --xim
. /usr/local/etc/xdg/xfce4/xinitrc
続いて、Xを起動してSettingsのIBus Preferencesで設定します。

IBus Preferences設定パネルのInput MethodタブでMozcを追加します。

Japaneseを選んでリストの中からMozcを選択。

なお、Mozcは半角英数字モードがあるので、元からあったEnglishは削除しました。
Mozcのキーバインドは「ことえり」に合わせますが、USキーボードなので全角半角切替キーを再設定します。

IBus Preferences設定パネルでJapaneseを選んでPreferencesボタンを押すとMozc Settingsパネルが現れるので、KeymapのKeymap styleからkotoeriを選んだ後に、Customize…ボタンを押します。

Mozc keymap editorパネルが開いたら、KeyセルをクリックしてKey列をソートしてZenkaku/Hankaku項目を探します。4項目ほどあるので、それぞれZenkaku/Hankakuセルをダブルクリックしてキーコードを変更します。
GUIを自動起動する
とりあえずXを動かせるようになったので、WindowsやMacのように起動後に自動でGUI画面にしてみましょう。
普通はFreeBSDを起動するとCUIモードでlogin:プロンプトが表示されてログイン待ちになりますが、ディスプレイマネージャxdmが入っていればGUIモードでログイン待ちをすることも可能です。
# pkg install xdm
設定ファイルをふたついじる必要があります。ひとつめは/etc/ttys。8個目の仮想ターミナルをonにします。
ttyv8 "/usr/local/bin/xdm -nodaemon" xterm on secure
もうひとつはユーザーごとの~/.xsession。内容はCUIで準備した~/.xinitrcと同じもの。なんで別ファイルなのかな?
ここまで設定しておくと起動後CUIログイン画面にならず、こんな感じでGUIのログイン画面になります。デスクトップ環境によっては自前のカッコいいログイン画面になるみたいです。

ちなみに~/.xsessionファイルを作り忘れると、ユーザー名とパスワードを入力してもGUIログイン画面に戻ってしまいます。そんな時は慌てず騒がず、ctrl+alt+F1キーを押してCUIログイン画面に戻りましょう。
と、ここまで書いておいて何ですが、rootではGUIを立ち上げたくないのでxdmは利用せずに、GUIを利用するユーザー(シェルはbash)の~/.bash_profileでXを自動起動するようにしました。
startx
たったこれだけ。ログイン画面こそCUIになりますが、ユーザーごとにGUIを使うか使わないかを手軽に設定し分けることができますよ。
X11Forwardingの設定
さて、Parallelsで起動した仮想マシンにはIPアドレスがあります。FreeBSDならifconfigコマンドで仮想マシンに割り当てられたIPアドレスがわかるので、ssh接続すればリモートログインができます。VPS上のサーバーと違ってXが入っていますから、ssh経由でGUIプログラムを操作することもできます。
まずはリモートの設定。Parallels側のFreeBSDのsshdの設定。ファイルは/etc/ssh/sshd_configです。
X11Forwarding yes #コメントアウトされていた項目を有効化
次にローカルの設定。Macの場合、/etc/ssh/ssh_configファイルをsudoで編集。
ForwardX11 yes #コメントアウトされていた項目を有効化して、noをyesに書き換え
ssh接続時は-XCオプションを加えてログイン後、プログラムを起動。
$ ssh -XC local
〜略〜
[takeru@freebsd ~]$ gvim &

このようにmacOS上でXのgVimが起動しました。