FreeBSD11.2でLxqt環境を作ってみた【一部改訂】

#経緯
　今年のお正月頃、Celeron J3455を積んだ[NUC6CAYH](https://kakaku.com/item/K0000949017/spec/#tab)を中古で入手していた。
　同じCPUを積んだITXマザーでファイルサーバーを組んでいて、意外と動作がきびきびしていて､メモリさえ十分積んでいればデスクトップでも使えることは確認済み。
　で、入手したマシンにはWindows10 Proのライセンス付きだったが、趣味のFreeBSDマシンも兼ねて低消費電力なデータ分析用コンピュータを作ることにした。
##目標
　システム環境を組み立てるにあたり、次のような目標とした。
　1.とりあえずqgisとpythonを使えるようにする。
　2.できるだけqtベースのソフトウェアで揃える。
　3.ハードウェアの能力はできるだけ引き出す。　
##FreeBSDを選ぶ理由
　現状ではUnixクローンを使うなら、Linuxのほうが簡単だし、ソフトウェア・ハードウェアも充実している。
　しかし、FreeBSDなどBSD系OSは、アプリケーションまで含めてプロジェクトが管理しているため、アプリケーションや情報がまとまっているので使いやすい。
　私がFreeBSDを選ぶのは、前世紀末にUnixサーバの管理をするために使い始めて、慣れているからという理由が大きい。
　あと、WindowsやLinuxと使い比べていて、同じスペックのマシンではFreeBSDのほうがレスポンスが良い感じがする。
##インストールするデスクトップ環境など
　このマシンでは文書作成などはしないので、デスクトップ環境にはそれほど高機能は要らない。
　レスポンスが早くデザインが良いデスクトップ環境で、かつqtベースのものを入れる。
　現状ではqtベースのデスクトップ環境としては、[KDE](https://kde.org/)、[Lumina](https://lumina-desktop.org/)、[Lxqt](https://lxqt.org/)がある。
　老舗のKDEが最も充実しているが、Windows並に高機能なため、いろいろインストール必要があるのと、見た目がWindowsに似すぎてきたのでおもしろみがないので却下。ちなみにpkgでインストールしたが、光回線でダウンロードしても三時間以上はかかるくらい、いろいろインストールする。
　LuminaはTrueOSプロジェクトで開発されていて、かなりレスポンスの良いデスクトップ環境で、一時、使っていたともあるけど､デザインが好きではないという理由で今回は却下。
　Lxqtは元々はLxdeというデスクトップ環境を開発していた人たちが、GUIツールキットをqtに変更して開発したものらしい。Lxdeは我が家のファイルサーバで使用中で、シンプルですっきりしたデザインが好み。ということで、デザイン重視でLxqtをインストールすることとした。
　で、ブラウザにFalkon、データ処理用にqgis3、Python3を入れる。
　Python3は[翔泳社刊『Pythonによるあたらしいデータ分析の教科書』](https://www.shoeisha.co.jp/book/detail/9784798158341)の実習をできるようにJupyter Notebookが利用できるようにする。
##注意点
　このマシンはGPUがインテルHD Graphic500ということで、カーネルまわりで注意点がある。
　portsからgraphics/drm-next-kmodをインストールしないとXのビデオドライバが動作しないが、最新の12.0ではdrm-next-kmodをインストールできない（[参考情報](https://www.freshports.org/graphics/drm-next-kmod)）。
　参考情報ではDeletedになっているけど、確かports自体はインストールできた（メモ取り忘れた・・）。
　このため今回は11.2をインストールする。

#手順
 数年前までは後藤大地さんの書かれた[『FreeBSDビギナーズバイブル改訂第二版』](http://www.ongs.co.jp/publications/books/freebsd_bible2/index.html.en)を参考にインストールしていたけど、さすがに状況が変わっている（当時、勢いのあったAnthyは開発者が止まったらしい・・・）。
　で、今回はネットで検索して、SilverSackさんの「FreeBSDで遊ぼう」というサイトを参考にした。
　特に『[デスクトップ環境の構築(LXDE1.0_8 on FreeBSD 11.x)(i386版/amd64版)](http://silversack.my.coocan.jp/bsd/lxdeonbsd11x.htm)』というページを参考に、というかそのまんま真似てLxqtをインストールしている。
　SilverSackさん、大変参考になる情報を公開して頂きありがとうございます。
##FreeBSDのインストールとdrmの設定
　ベースのFreeBSDはISOイメージをダウンロードしてUSBメモリに書込む。
　書込ソフトは[Etcher](https://www.balena.io/etcher/)というソフトをWindows10 Proで使ったが、このソフトで書き込む際はシステム管理者権限のあるユーザーでログインしないとうまく書き込みできない。実行する際、「管理者として実行」で書き込んだイメージではブートできなかった。
 UEFIの設定をUSBメモリから起動するように設定し、ブートすると新しいコンソールが動作しているため、UEFIのメッセージが高解像度でテキストが表示される。
　メニューに沿いベースシステムのインストールは完了。
　ベースシステムとportsを更新しておく。
　freebsd-update fetch install
　portsnap fetch extract update
　rootでは動作しないソフトウェアがあるため、標準ユーザーは作っておくこと。
　再起動後、portsからgraphics/drm-next-kmodをインストールする。drm-next-kmodはports～入れる必要がある。また6/9現在では依存するdialog4portsのソースが入手できない。
　pkg install ports-mgmt/dialog4ports
　cd /usr/ports/graphics/drm-next-kmod
　~~pkg install graphics/drm-next-kmod~~ （6/9訂正）
　/etc/rc.confに起動時にdrmモジュールを読み込むように次の設定する。
　kld_list="/boot/modules/i915kms.ko"
 なおbootにも同名の標準モジュールがあるので混同しないように注意。
　[FreeBSDのWikiのgraphics](https://wiki.freebsd.org/Graphics)を見に行ったところ、pkg install drm-kmodでもいいみたい。また、2019年6月17日現在ではdialog4portsは自動でインストールできました。
 再起動が成功すれば、X.orgなどのインストールに進む。
##X.org環境の作成
 先のSilverSackさんのページを参考に、X.org、日本語フォント、日本語入力をインストールし、キーボード、デーモン等を設定する。
　私はログインマネージャは使わないので、それらは省いた（トラブルが起きたとき対処しやすい）。
　インストールしたパッケージは次のとおり。
　pkg install x11/xorg
　pkg install japanese/font-std
　pkg install japanese/font-vlgothic
　~~pkg install japanese/uim-mozc　textproc/uim-gtk textproc/uim-qt5~~
　2019年6月20日現在、uim-qt5を使う設定にするとX上のプログラムを終了するときにコアダンプすることがわかった。fcitx-qt5を使うようにする。
　pkg install japanese/fcitx-mozc textproc/fcitx-qt5 textprc/fcitx-gtk
##Lxqt、Falkon、qgisのインストール
　Lxdeの代わりにLxqtをパッケージからインストールする。
　pkg install x11-wm/lxqt
　pkg install www/falkon
　pkg install graphics/qgis
　オフィスソフトはLibreOfficeが一般的だけど、Calligraに含まれるデータベースkexiがなかなか良さそうなので入れてみる。
　pkg install calligra
　2019年6月5日現在では、qgisをインストールすると3.6.0がインストールされる。もう一つqgis-ltrというのがあるが、こちらは3.4ではなかろうか。
　Windows版で3.6を使っているが、十分安定しているので、機能の面を考えても3.6で良いように思う。
##python環境の構築
　続いてPython環境の構築。
　参考書の大半が既に3系に移行している以上、3系を入れるのが妥当と思う。
　pkg install python3
　Pythonを入れてnumpy等のパッケージを入れようとpipを使ったが、どうもうまくいかない。
　portsをみると、numpy、pandas、scikit-learn、matplotlib、Jupyter NotebookはFreeBSDのパッケージでインストールできる。
　つまり、
　pkg install math/py-numpy math/py-pandas math/py-matpltlib 
　pkg install www/py-notebook science/scikit-learn
でインストールできた。
　pipを起動するとダンマリする原因は不明。
　もしかすると時間がかかっているだけかも。
　このあたりまでやったら、再起動して一般ユーザーでログインし直して、ユーザー独自の環境設定を行う。
##作業に使う一般ユーザーの.xinitrc編集
 lxqtの起動は、
　~~exec startlxqt~~
　ck-launch-session /usr/local/bin/startlxqt
とする。lxqtのwikiを見に行ったところ上記のように設定するように書いてあった。
　これでXを起動すると、シックなデスクトップ環境が日本語を使える状態で起動する。

#注意点
　今回はまった点。
　これに気がつかないとクラシカロイドのベートーベンみたいに「なぜだ～」と叫ぶ羽目になる。
##qt5とuimの連携
　textproc/uim-qt5を入れないと日本語入力できない。
##qt5とfcitxの連携
　パッケージをインストールすると、
　　export QT_IM_MODULES=xim
 にするようメッセージがでるが、これではqt5を使うプログラムに入力できない。
　 export QT_IM_MODULES=fcitx
 ととするとfalkonなどで日本語入力できる。
##日本語の設定
　ja_JP.UTF-8にしたほうがいいみたい。
##mozcの動作
　rootでは動作しない。
　scim-anthyの場合、rootで動作確認できたけど、これはできない。
##カーネルのチューニング
　現在Falkonにはバグがあるみたいで、カーネルの調整をしないとWeb閲覧中、動作が止まる。
　/etc/sysctl.confに下記のように書き込むと解決する。
　　net.local.stream.recvspace=65535
　　net.local.stream.sendspace=65536
##drm-next-kmod
　Xを使うユーザーをvideoグループのメンバーにする。
 pw groupmod video -m ユーザー名
##jupyter-notebookの起動
　ターミナルを開いてjupyter notebookで起動する。
##プリンターの設定【2020.8.1修正】
　ブラザー製MFC9460CDNを使っているので、これをセットアップする際のメモ。
　CUPをセットアップしたLinuxマシンがあれば、CUPS経由でプリンタ共有をすれば良い。ただし、両面印刷などの細かい設定ができない。この際、/etc/hostsに名前解決のための設定を入れることを忘れないこと。これを忘れるとプリンタの名前はわかるけど通信できない状態になって悩む。
　パッケージからgutenプリントをインストールすると、単独でプリンタを利用できる。9460がないのでmfc9500を設定する。しかし、これの場合モノクロになってしまう。
　次に[ブラザーのサポート](https://support.brother.co.jp/j/b/faqend.aspx?c=jp&lang=ja&prod=mfc3820jn&faqid=faq00100683_000)を参考にしようとGenericを探してみるが該当する物が見つからない。そこでGENERICからPCL Color Laser-CUPS-Gutenprintを選ぶとカラーになるが、これも片面印刷になるほか画質が悪い。
　配布されているプリンタ関係ファイルを書き換えると、中のコマンド自体はFreeBSDでも動きそうなので使えそうだが、ネットで見つかる情報では、そのまま利用できない。プリンタのモデル毎にディレクトリ構成とかかなり違う感じ。
　[他のモデルの解説を書かれている方の記事](https://qiita.com/HirotoKagotani/items/83618bfbde77dc028fff)を参考にして、print/foomaticをインストールするとmfc9450cdnが選べるようになるが、日本語表示がおかしい。
【2020.8.1】
　次の手順でMFC-9460CDNを利用できるようになった。
　まず、パッケージからLinuxエミュレータを追加する。
　次にcupsの管理画面からプリンタを追加する。この際、9460は無いので、最も型番の近い9450を選ぶ。
　これでカラー印刷、両面印刷など、ほぼWindowsと同じような感じで使えるようになった。　
 
#動作で改善すべき点
##終了するとコアダンプ
　他のデスクトップ環境では、クラッシュしない限りコアダンプしなかったような・・・。
　Lxqtのメニューからログアウトしてもコアダンプしている。
　もしかして、Lxqtを起動している状態でターミナルを開く、そしてsuしてrootになるとダメなのかも。
　いろいろ試したけど、わからないのでFreeBSDのメーリングリストに相談してみる。
##コアダンプの原因がわかった。
　.xinitcの内容を確認してみた方が良いとのアドバイスがあり、試したところQTのIM関係で動作がおかしいことがわかった。
　fcitx-mozcに代えたところ、解決した。
　これも含めて、本文を少し手直しする予定。
　
##コアダンプの原因追及の記録
　当初、原因が全くわからず何回もOS全体を入れ直していた。
　パッケージをしれた後、たまたま.xinitrcを書き戻さずにstartxしたところtwnがコアダンプしないことに気がついた。しかし、X11のドライバとかサーバで入れ忘れがあるに違いないと思い込んでいたため、またOS再インストールしていた。
　何回やってもダメだったので、freebsd-users-jpのメーリングリストに設定内容と現象を投稿し、アドバイスを求めたところ「startxでXを起動するなら.xinitrcの内容を確認した方が良い」というアドバイスを頂いた。
　そこで、それまで使っていた.xinitrcは捨て、X11標準のxinitrcである/usr/X11R6/lib/X11/xinit/xinitrcをホームにコピーし（以下、新.xinitrc）、twmの起動をlxqtの起動に書き換えてみたところ、コアダンプしない。
　ここで、X11とLxqt関係のソフトウェアは正常に動いていることがわかった。
　結局次の手順で確認した。
　新.xinitrcに日本語ロケールを設定してみる。->コアダンプしない。
　新.xinitrcにuim-mozcの関係の設定を入れてみる。->コアダンプする。
　コアダンプしているqt5用のQT_IM_MODULEをコメントアウトする。->コアダンプしない。
　ここで、qt5用の日本語入力周りが怪しい。
　export QT_IM_MODULE=uimをexport QT_IM_MODULE=fcitxに代えてみる->コアダンプしない。
　uimからfcitxに代えて正常なら、環境変数だけuimにしてuim-qt5をアンインストールしたらどうなるか試したら、コアダンプしない。
　ということで、uim-qt5が原因と認定。
##qt5で使える日本語入力
　scim-anthyはqt5用ブリッジが無いので使えないのですね。