これまで使ってきたScientific Linuxは遠い昔に開発を終了し,もともとのディストリビューションであるCentOSを使ってくれ,と放り投げてしまいました。新しいPCを導入しようかな,とふと思いたって,Scientific LinuxがだめなのでしょうがないのでCentOSをインストールしようと素直に考えました。ところが,なんと,CentOSも通常の安定版のリリースはもうやらない,と2020年の暮れに宣言をしていました。
こうなるとどのようなディストリビューションを使ったら良いのかわからなくなってしまいます。CentIOSはRedHat Linuxがベースですが,こうなるとDebianベースのUbuntu系を使うしかない,ということになります。
Ubuntuはsuでrootユーザーになれない,という仕様が基本的に嫌いでこれまでずっと避けてきました。しかし,人気があるために開発リソースも多く安定しているようですし,ハードウェアへの対応も早くてまるでwindowsのようにたいていのPCに簡単にインストールできてしまいます。選り好みをしている余裕もないので,Ubuntu系のディストリビューションを試すことにしました。
なんでもよいのですが,本家Ubuntuはデカくて重いのでさっさと候補から脱落,軽い系,ということでLubuntu, Xubuntuあたりを考えました。しかし,ちょっと前までは大人気だった(らしい) Linux Mintをなんの脈略もなく使ってみることにしました。
私の使い方はとても単純で,たんに,VMWareが動いて計算も少々できればよい,という程度なのでハードルはそれほど高くないはずでした。しかし,リモートサーバーのX Windowアプリケーションをローカルに表示したり,逆に,別のマシンにX Windowアプリの画面を転送したりできることは絶対に必要でした。いわゆる「初心者むけ」のディストリビューションはこのあたりのネットワークに自由にアクセスする,という部分が強く制限されていて全然unixのありがたみがない,というものがほとんどで,Ubuntu系はその最たるもの,という印象をこれまで持っていたこともUbuntuを使わなかった理由のひとつです。
2020年の春にUbuntu 20.04 LTSがリリースされて少し長めのサポート期間が保証されています。当然,このバージョンをベースにしたディストリビューションを選ぶわけですが,Linux Mint 20.1 Ulyanaを
公式サイトから落としてきます。
インストールはとても簡単でisoイメージをDVDに焼いてDVDからPCを起動します。HDDに何か別のOSが入っていたりするとどうもインストールが挙動不審でした。そこで,以下のようにしてインストールしました。
1. DVDから起動して,インストーラを起動せずにライブシステムでOSを起動してしまいます。
2. 起動したら適当に端末を起動して,
sudo fdisk /dev/sda
と叩いて,fdiskを起動します。mでヘルプ,pでパーティションリストの表示,dでパーティションの削除,wで設定の書き込み,です。これだけ知っていればfdiskを使ううえで困ることはないと思います。HDD上にあるパーティションを有無を言わさずdで全部削除して,wで書き込んで,qで終了します。
3. ライブシステム上にあるインストーラを起動してインストールをはじめます。
4. インストールが終わったら再起動。
5. ログインすると「はじめに」だか「ようこそ」だかの画面が表示されます。まず,ドライバとセキュリティアップデートをします。
6. セキュリティアップデートはなんだか大量にありますが,黙って全部選んでインストールしてしまいます。インストールしたら再起動を促されますがとりあえず放置して,ドライバのアップデートをします。
7. NVIDIAのグラフィックカードを入れているのでドライバとしてNVIDIAのドライバが「推奨」されています。だまって,推奨されているドライバに入れ替えます。ここまできたら再起動。
これで単純なクリーンインストールは完了です。昔(って,どれくらい昔やねん...)と違って,インストールはサクサクできてしまいます。しかし,ネットワーク周りの設定は,この後,はまりまくります。いろいろと安全指向でネットワークにはできるだけつながらないようになっていて,かつその設定が隠蔽されているのでどこで何が効いているのよくわからないのです。
Xを自由に使えるようにするためにいろいろとはまりました。以下,ネットワーク周りの設定です。
1. sshdがデフォルトでインストールされていない,というのはある意味驚きです。windowsと同じくらい使いにくいシステムで,これならmacOSのほうがよほどunixらしいシステムであるように思います。とにかく,
sudo apt install openssh-server
としてsshdをインストールします。
2. /etc/ssh/ssh_configを編集して,
ForwardX11 yes
ForwardX11Trusted yes
とします。
3. /etc/ssh/sshd_configはデフォルトで
X11Forwarding yes
となっているはずなのでそれを確認しておきます。noとなっていればyesに変更します。
4. たぶん,いらない,と思うのですが,~/.ssh/configファイルを作って,
ForwardX11 yes
と書いておきます。
5. sshdを再起動。かなり乱暴ですが,直接
/etc/init.d/ssh restart
で再起動してしまいます。
ここまでできれば,リモートホスト側でssh -X [LinuxMintのIP]と叩けばリモートログインができるようになります。
まず,ローカルホスト(host名をhogeとします)からLinux Mint (host名をmintとします)にリモートログインして,mintのXアプリをhogeに表示させます。これは上記の設定でほぼ問題なくできるはずです。
1. hogeの上でX serverが起動しているという前提です。
2. mintにはxtermがインストールされていないので一応,インストールしておきます。
sudo apt install xterm
3. hoge上の適当なターミナルエミュレータからssh -X mintとしてmintにログイン
4. mint上でexport DISPLAY=hoge:0.0
5. xtermなどとすれば,hogeの画面にxtermが表示される。
4はLinux標準のbashの場合ですが,csh系のシェルを使っている場合は,
setenv DISPLAY hoge:0.0
とします。「=」があったりなかったりしてややこしいです。
問題はこの先です。hogeのXアプリをmintの画面に表示させようとすると,どこかのセキュリティ設定に阻まれてうまくいきません。これはmint上のX serverが6000番ポートをlistenしていないことがhogeのXアプリをmintの画面に表示できない原因です。
全然効いていない設定もあるのですが,やったことをひととおり羅列しておきます。
1. たぶん,これは効いていないのですが,/etc/X11/xinit/xserverrcを編集して,
exec /usr/bin/X -nolisten tcp "$@"
を
exec /usr/bin/X "$@"
に修正します。高機能なウィンドウマネージャが動いていると,この設定はウィンドウマネージャの設定で上書きされてしまっているようです。
2.
ここに書かれている通り,ウィンドウマネージャによって設定が異なります。LinuxMint Xfce版の場合は,
ps -ax | grep lightdm
とやると
3070 ? SLsl 0:00 /usr/sbin/lightdm
というようなのがでてくるのでどうやらlightdmが走っているようです。
3. /usr/share/lightdm/lightdm.conf.d/50-xserver-command.confを編集して,
xserver-command=X -core
となっているところに,「-listen tcp」を追加して
xserver-command=X -core -listen tcp
とします。
4. /etc/lightdm/lightdm.confを作成して(もともと存在しないので),以下の内容を書き込みます。
[Seat:*]
xserver-allow-tcp=true
xserver-command=X -listen tcp
5. lightdmを再起動します。
sudo systemctl restart lightdm
6. netstat -an | grep 6000とやると,
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
tcp6 0 0 :::6000
のように表示されて,6000番ポートをlistenしていることがわかります。
7. mint上の適当なターミナルエミュレータで
xhost +
ssh -X hoge
とやってhogeにログインします。xhost +は任意のリモートサーバーの画面表示を許可する,という意味です。許可するリモートサーバーを限定する場合はxhost + hogeというようにホスト名を入れます。
8. hoge上でxtermなどとやると,mintの画面にhogeのxtermが表示されます。
というわけで,なんとかXの画面を2台の計算機の間で相互にやり取りできるようになりました。これはかなり深い罠でした...