GhostBSD 24.07.3の環境構築(その1;Live環境でX Window Systemのテスト)

結局,慣れているFreeBSD系がよいだろう,ということでFreeBSDベースのデスクトップ環境である,GhostBSDをインストールすることにしました。公式webページのDownloadからOfficial Imageをダウンロードします。Official Imageはデスクトップ環境としてMATEが採用されています。Community ImageとしてXFCE4のバージョンもあります。どちらも試しましたが,Community Imagesは微妙に未完成な部分がまじっているような感じでやめました。ダウンロードしたのはGhostBSD 24.07.3で,FreeBSD 14.1 Stableがベースのバージョンでした。

ダウンロードしたisoイメージはRaspberry Pi Imagerで4GBのUSBスティックに書き込みました。

PCのUSBポートに差し込んでBIOSというかUEFIが起動したらF11を叩いて起動ドライブを選択するメニューを呼び出してUSBに書き込まれたUEFIのブートドライブを選択します。USBという選択肢も表示されますが,UEFIを選択します。USBスティックをUSB3 (A typeです)のポートに差し込むとなぜか起動ドライブとして認識されなかったのでUSB2のポートに差し込みむとちゃんと起動できました。USBスティックがUSB2だからなのかもっと別の理由なのかよくわかりません。兎に角,動けばこっちのもの,です。

インストールしてダメだったときにまた消すのも面倒なので,期待通りの動作を実現できるかをLive Systemで試してみました。起動用のUSBから起動すると勝手にLive Systemがたちあがって,ghostbsdというユーザーで勝手にログインします。パスワードはありませんし,rootのパスワードもありませんのでsuすれば即rootになります。

予想どおり,リモートのXアプリをghostBSDのデスクトップ上に表示させる方法でハマりにハマりました。なぜにそういうXのもっとも便利で基本的な機能を殺しているのか謎です。もちろんセキュリティ上の問題が多いことは十分に理解していますが,どうやったらその機能を有効化できるかが,LinuxにしろghostBSDにしろディストリビューションごとにてんでバラバラでハマってしまいます。

まずは,

pkg install xorg

として,xhostが使えるようにします。デフォルトでXが動いているのにxhostがインストールされていない,ってどういうことなの,という疑問を感じますが気にしたら負けです。

次に,sshによるX11のフォワーディングの設定をします。sshdはインストールされているので,

/etc/ssh/ssh_configに

ForwardX11 yes

を,/etc/ssh/sshd_configに

X11Forwarding yes

を設定します。どちらも行頭のコメントをはずしてnoをyesに変更するだけです。

これだけではまだダメで,Xがtcpをlistenするようにせねばならないのですが,その設定がどうしてもわかりませんでした。

ps -ax | grep X

とすると,

xinit /home/ghostbsd/.xinitrc -- /usr/local/bin/X :0 -auth /home/ghostbsd/.serverauth.XXXXX
/usr/local/libexec/Xorg :0 -auth /home/ghostbsd/.serverauth.XXXXX

というような行が表示されます。XXXXXは適当な数字でたぶん,何かのプロセス番号です。

ps -axの出力をみるとxinitで~/.xinitrcに書かれている設定を読み込んでデスクトップマネージャ(ここではmate-session)を起動しているようです。そのときにxinitのオプションとしてXサーバーのディスプレイ番号を指定しています。ディスプレイ番号は,xinitはstartxによって起動されています。startxは/usr/local/bin/startxでたんなるシェルスクリプトです。startxを起動するときに

startx -- -listen tcp

とやればXに-listen tcpというオプションが渡されてXが起動します。このようにオプションを渡すことができればXがtcpをlistenするようになります。

このことから,非常に乱暴ですが,xinitを起動しているstartxスクリプトのなかでxinitを起動しているところに無理やり-listen tcpというオプションを書き込んでおけば期待どおりの動作をすると考えられます。

rootになって/usr/local/bin/startxをviで開くと一番最後のほうに

xinit "$client" $clientargs -- "$server" $display $serverargs

という行があって,確かにstartxからxinitが起動されています。変数$displayはディスプレイ番号,変数$serverargsでオプションを設定しています。

ディスプレイ番号については,/tmp/.X11-unix/X?というファイルが存在するかを調べて,もし存在すれば?の次の番号をディスプレイ番号に割り当てる,という動作をstartxのなかでやっています。/tmp/.X11-unix/X0というファイルがあれば,ディスプレイ番号は1になります。何もなければ0です。実はこのディスプレイ番号でもハマりました。なぜか,あれこれと設定を試しているときにX0というファイルが残っていてディスプレイ番号が1になってしまいました。ssh -Xでリモートにログインしたときに自動的に設定されるDISPLAY変数がディスプレイ番号を0に設定してしまうのでディスプレイ番号が1だったりするとそれだけでとても面倒なことになってしまうのです。なぜそのようになるかもよくわからないので,rootになってX0を強制的に消すことでディスプレイ番号が0となるように力技ですすめました。

$serverargsはオプションを設定する変数で-auth以下の文字列が設定されていますが,それ以外に最初から設定することができるようにstartxの冒頭部分に変数の定義が書かれています。オプション変数は空欄になっていて,
serverargs=""
と書かれています。この部分に
serverargs=" -listen tcp "
と書いておくとstartxがxinitを起動したときにオプションを追加して,

xinit /home/ghostbsd/.xinitrc -- /usr/local/bin/X :0 -listen tcp -auth /home/ghostbsd/.serverauth.XXXXX

という具合にして起動します。

このようにしてXが起動すれば,
netstat -an | grep LISTEN
とすると

tcp4 0 0 *.6000 *.* LISTEN
tcp6 0 0 *.6000 *.* LISTEN

と表示されて,ちゃんと6000番ポートをLISTENしていることがわかります。ディスプレイ番号が1番の場合は6001番ポートをlistenします。

これでたぶん,リモートのXアプリを手元のghostBSDの画面に表示することができそうです。BSD系で日本語環境の構築などはかなり気が重いのですが,ユーザーIDの設定などはLinuxのようなうるさいことは何もいわないので私が期待している動作をさせることができそうです。

なんとかなりそうだ,ということがわかったので,PCのSSDにghostBSDをインストールすることにします。Live Systemで起動するとデスクトップ上にインストール用のアイコンが表示されているので,このアイコンをダブルクリックすればインストールがはじまります。

bunsenlabs Boronの環境構築(その4;挫折への道)

というわけでひととおりのインストールを完了して使えそうになったので,これまで使っていた古いPCを移動させてその場所に新しいRyzen 9のPCを置きました。埃だらけで大掃除するところからやる羽目になりました。

1. モニタのワナ
日頃の環境では,モニターを2つ使っていて,解像度が1920x1200と1920x1080のモニタでしたが,1920x1080のモニタを新しく2560x1440のモニタに置き換えてbunsenlabs Boronを起動しました。2つのモニタをちゃんと認識してどちらもちゃんとデスクトップ画面が表示されたのでさすがはLinuxだと感心しました。ここまでは順調でした。

デフォルトの設定ではdisplay portに接続したメインの2560x1440の右にHDMI接続の1920x1200のモニタが置かれる,という設定になっていました。しかし,モニタの設置の都合上,左右を逆にしたいのですが,xrandrで設定はできるものの,なぜかマウスポインタの座標は左右がいれかわらず,画面とまったく違う場所をポイントする,という罠にはまってしまいました。いくらなんでもこれでは使えません。左右が反対のままで使うというのもストレスですからとてもやってられません。かなりあれこれ試したものの,2枚のモニタの左右を正しく入れ替えることができず挫折しました。

2. UIDとGIDのワナ
Linuxでは一般ユーザーのユーザーIDは1000番以上を使うことになっていて,グループについてもLinuxの多くのディストリビューションではユーザー名と同じ名前のグループで,かつ,ユーザーIDと同じ番号をグループIDに使うことになっているようです。30年以上前にSony NEWS Stationにアカウントを作って計算をするようになって以来,ユーザーIDとグループIDは100番台の同じ番号を使い続けてきました。そうしないと遠い昔に作ったファイルのパーミッションが異なってしまってアクセスできなくなってしまいます。

Scientific Linuxではなんとか誤魔化してユーザーIDとグループIDを100番台のものに設定して,過去のファイルやFreeBSDのサーバーのホームディレクトリへのNFS経由のアクセスで齟齬が生じないようにできていましたが,Boronではもはやどうにもならなくなってしまいました。vipwでUIDやGIDを強制的に変更すると,何かが整合しないとか言われてユーザー名がないユーザーというわけのわからんものになってしまったりします。設定ファイルがあちこちに隠されていて,vipwだけでは設定が完結しないというのは絶望的です。ユーティリティというかコマンドで変更しようとしても,その番号は既に使っているよ,といわれて受け付けてくれないし,どうしようもありません。これでまた挫折への一歩を進めることになってしまいました。

3. キーボードのワナ
キーボードはUSB接続のHappy Hakking Keyboard Professional 2を長年使い続けてきました。不具合なんてまったく無縁だったのですが,Boronではなぜかチャタリングが発生して同じキーを勝手に連打していたり,叩いたキーが入力されなかったりすることがしょっちゅう発生することに気がつきました。気が付くっていうよりはいつもトラブっている感じです。キーボード入力でトラブルのはさらなるストレスで,モニタの左右が逆で,勝手にターミナルにaaaaaaaaaaなんて連打されていて止まらなかったりすると,さすがにPCを蹴飛ばしたくなってしまいます。

キーボードが突然壊れた,ということも考えられなくはないのですが,USBからLive Systemとして起動したGhost BSDではそのようなトラブルは一切発生しなかったのでBoronの問題だと考えられます。

ここにきて,ストレスは最高潮に達して,もはやBoronを使うのは無理,と判断して別のOSをインストールすることにしました。どんなOSをインストールするか,が問題ですが,上記のような無用のストレスは避けたいところです。たいして高望みをしているとは(自分的には)思っていないのですが,便利さを追求するあまりに自由度がまったくないお仕着せの環境に自分をあわせるのは道具として計算機を使うという本来の目的からは完全に本末転倒です。FreeBSDは自由度は高いし使い慣れていますがそもそも,Xが立ち上がらない罠にはまることはよくあることなのでなかなか踏み切ることができません。

こんなことやっていたらいつまでたっても仕事に戻れない,というなんかバカみたいなことになってしまっています。うーむ。

bunsenlabs Boronの環境構築(その3;アプリケーションのインストール)

OSのおおまかな設定が終わったら次はアプリケーションソフトのインストールです。もう,これはrootになってapt installでガンガンインストールしていくだけです。

1. 入力メソッドfcitxの設定

apt-get update
apt install task-japanese task-japanese-desktop
apt install fcitx-mozc

としたあと,いったんlogoutしてloginしなおすとimにfcitxが,日本語変換にはmozcが使えるようになります。設定は,右クリックして,メニューの下のほうにあるAll Applications -- 設定 -- Fcitx設定 とたどると「入力メソッドの設定」というウィンドウが起動します。

キーボード - 英語(US) 不明
Mozc 日本語

が表示されます。Mozcをダブルクリックするとキーボードレイアウト:というポップアップがでてくるので英語(US)にしてOKをおしておきます。たぶん,この設定はせずにデフォルトの「既定」のままでよいのかもしれませんが,もはや何がどこに影響するのかわからないのでとりあえず設定して問題はなさそうなのでそのままにしています。

ウィンドウのタブのなかの「全体の設定」を選ぶとキーの設定ができます。「入力メソッドのオンオフ」にはCtrl+Spaceが設定されていますが,このままではemacsと競合してしまうため変更しなくてはなりません。Ctrl+Spaceと書かれている部分をクリックすると入力待ちになるのでShift+Spaceを叩くとそれが設定に反映されます。macOSではCommand+Spaceを使っているので同じ設定にしたいのですが,そうするとこんどはウィンドウのメニューを表示するショートカットとぶつかってしまってimの切り替えができません。しょうがないのでShift+Spaceで妥協しました。

2. Mozcの設定
imの切り替えができるようになったら,次はmozcの設定をします。先ほどと同じ設定メニューのなかにある「Mozcの設定」を選ぶと「Mozcプロパティ」が起動します。いつも使っている句読点がカンマとマルなので,それを選びます。「キー設定」はATOKにしておきます。本当はWnnにしたいところですが,そんなメニューはないし,カスタマイズをするのは面倒なので手間をかけずにATOKにしています。

3. 開発環境のインストール

apt install gcc make linux-headers-amd64
apt install gfortran byacc
apt install scilab wxmaxima

VScodeはマイクロソフトのサイトにいってLinuxのDebian用(.deb)をもらってきます。Linux用には32ビット版は用意されていないようですが64ヒット版でOKです。

ダウンロードしたらダウンロードされたディレクトリへ移動して

sudo apt install ./code_1.93.1-1726079302_amd64.deb

としてインストールします。ターミナルから
code
と叩けば起動します。あるいは,メニューからAll Applications --> 開発とたどるとVisual Studio Codeが追加されているのでこれをクリックしても立ち上がります。

VScodeが起動したら,VScodeの左に並んでいるアイコンの下にある「田」の字を押して検索窓にfortranと入れるとModern Fortran拡張がリストに表示されるのでinstallというボタンを押してインストールします。これで最低限の環境は整ったことになります。

Rのインストールはなんだかよくわかりませんが,公式サイトに書かれているように何もかんがえずにコマンドを叩きました。sudoを省くのが面倒だったの一般ユーザーになってから実行しました。
sudo apt update -qq
sudo apt install --no-install-recommends software-properties-common dirmngr
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
sudo add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
sudo apt install --no-install-recommends r-base

これでターミナルでRと叩けばRが立ち上がります。終了はq()です。

RStudioは,公式サイトからUbuntu 22/Debian 12と書かれているものをダウンロードして,ダウンロードされたファイルが置かれているディレクトリで,
sudo apt install ./rstudio-2024.04.2-764-amd64.deb
としてインストールします。rstudioと叩けば起動します。

4. エディタなどのインストール
まずはgnuplotをインストール。
apt install gnuplot

個人的にはエディタはemacsがないと生きていけないのですが,ついでにneovimも入れておきます。
apt install emacs
apt install neovim

5. TeX関連のインストール
日常生活では必要なものを諸々インストールしていきます。まずはTeX
apt install texlive-full

6. 画像やドロー関連
apt install gv tgif gimp inkscape ipe
apt install exiftool
apt install qgis gmt
apt install paraview
apt install graphicsmagick

7. 文書関連
apt install nkf latexdiff diffpdf pdfarranger a2ps cmigemo

8. ネットワーク関連
apt install wget wput telnet iperf3 chromium ethtool

9. ユーティリティ関連
apt install lhasa mpack dos2unix