メインPC新調 (ソフトウェア編)

前回の続きです。


Ubuntu 20.04 インストール

旧PCの Ubuntu 18.04 上で Ubuntu 20.04.1 ja (日本語Remix) をダウンロードしてブータブルUSBメモリを作成。

組み立てOSが何も入ってない状態で USB メモリを挿して起動したら普通にインストーラが起動しました。Ryzen PRO 4000 シリーズ(Renoir) の内蔵GPUが 20.04 の初期状態で動かないことがあるという話を聞いていましたが、HDMI で Full-HD モニターを繋いだ限りは大丈夫でした。*1

インストール先の SSDパーティションをいつものように切っていたら、インストールに進もうとすると、EFIシステムパーティションが必要だよ、このままだとブートしなくなるよ、みたいな警告が出て、EFIシステムパーティションて何?ってなったので調べました。

OSのブートローダーを入れる用のパーティションのようですね。MBRが手狭になったからこんなのできたんですかね?128MBもあれば十分みたいなので、それで設定しました。念の為 HDD の方にも作っておきました。なんかあった時にブートドライブにするかもしれないので。SSD は残り全部 / に、HDD は残り全部 /home に、swap パーションはナシ、で行きました。

その先は特にトラブルなくデスクトップが立ち上がりました。デスクトップは標準の Xorg を使いました。Wayland はまだ安定性が心配なのと、旧メインPCでベンチマークを測定しても特に速いわけではなかった(むしろ Xorg よりちょっと遅い)ので今回はパスしました。

デスクトップは今まで GNOME Flashback を使っていたのですが、home には Ubuntu 10.04 あたりからずっと引き継いできた秘伝のタレみたいな設定が仕込まれていて、トラブルの際に何がどうなってるのかよくわからなくなってきて放置になってる件もいくつかあり、この際一度まっさらな状態からやり直したいということもあって、今回から標準のデスクトップ環境を使うことにしました。標準のデスクトップならトラブルの際に情報も集めやすいというのもあって。

センサー関係

まずはハードウェアのトラブルをいち早くキャッチできるように、CPUやSSD/HDDの温度を確認できる体制にしたいと、hddtemp と lm-sensors をインストール。

$ sudo apt install hddtemp
$ sudo apt install lm-sensors
$ sensors-detect
...

sensors-detect は適当にやったのでよくおぼえていません… 基本デフォルトだったと思います。

この後 sensors-applet をインストールしたのですが、起動の仕方がわからず使用を断念。gnome-panel じゃないと使えない?

Ubuntu Software から適当に見繕った Hardware Sensors Indicator というのをインストールしました。パッケージ名は indicator-sensors です。

Preference で読み取るセンサーを選びます。CPU 温度は k10temp-pci-xxxx の Tdie、GPU 温度はたぶん amdgpu-pci-xxxx の edge、NVMe SSD の温度は nvme-pci-xxxx の Composite を見ればよいようです。HDD は HDD の型番が出てくるのでそれを。

これで温度が簡単に監視できるようになったのですが、トラブルが。indicator-sensors を起動したまま画面ロックまたは他のユーザーのデスクトップに切り替えてから戻ってくると、デスクトップがグレーアウトして、

Authentication is required to check power state for WDC WD40EFZX-...

という認証画面が表示されてデスクトップが一切操作できなくなってしまう現象が発生しました。キャンセルしても速攻再表示されます。認証すれば閉じると思ったのですが、一度は成功したものの、その後何度やっても認証が通らなくなって諦めて Ctrl+Alt+F3 でコンソール画面に入って X 関係のプロセスを kill するはめになりました…

どうやら以下の issue と同じ現象のようですが、まだ解決していないようです。

とりあえず HDD の温度表示は諦めて、Preference の Plugins タブから udisks2 を無効化しました。エラーメッセージでググるpolkit の設定ファイルを書き換えることで回避できるようなのですが、意味がよくわからないので敬遠しました。ていうか hddtemp 使ってないんですね。hddtemp を使うプラグインがあればいいのに…

ECC メモリは認識されている?

以下のコマンドでメモリが ECC かどうか確認できます。

$ sudo dmidecode -t 17
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.
# SMBIOS implementations newer than version 3.2.0 are not
# fully supported by this version of dmidecode.

Handle 0x0016, DMI type 17, 84 bytes
Memory Device
	Array Handle: 0x000F
	Error Information Handle: 0x0015
	Total Width: 72 bits
	Data Width: 64 bits
	Size: 16384 MB
	Form Factor: DIMM
...

ECC メモリでは Data Width と Total Width が同じ(64 bits)になるそうです。

エラー検出用のドライバは EDAC (Error Detection and Correction) というのですが、dmesg で EDAC がロードされて ECC が有効化されているのが確認できます。

$ dmesg
[    0.000000] Linux version 5.8.0-59-generic (buildd@lcy01-amd64-022) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 (Ubuntu 5.8.0-59.66~20.04.1-generic 5.8.18)
...
[    4.140391] EDAC amd64: F17h_M60h detected (node 0).
[    4.140441] EDAC amd64: Node 0: DRAM ECC enabled.
[    4.140442] EDAC amd64: MCT channel count: 2
[    4.140517] EDAC MC0: Giving out device to module amd64_edac controller F17h_M60h: DEV 0000:00:18.3 (INTERRUPT)
[    4.140520] EDAC MC: UMC0 chip selects:
[    4.140522] EDAC amd64: MC: 0: 16384MB 1:     0MB
[    4.140524] EDAC amd64: MC: 2:     0MB 3:     0MB
[    4.140527] EDAC MC: UMC1 chip selects:
[    4.140528] EDAC amd64: MC: 0: 16384MB 1:     0MB
[    4.140529] EDAC amd64: MC: 2:     0MB 3:     0MB
[    4.140530] EDAC amd64: using x8 syndromes.
[    4.140545] EDAC PCI0: Giving out device to module amd64_edac controller EDAC PCI controller: DEV 0000:00:18.0 (POLLED)
[    4.140546] AMD64 EDAC driver v3.5.0
...

メモリのエラー発生と訂正の情報は、edac-util で確認できます。

$ sudo apt install edac-utils
$ edac-util -sv
edac-util: EDAC drivers are loaded. 1 MC detected:
  mc0:F17h_M60h
$ edac-util -v
mc0: 0 Uncorrected Errors with no DIMM info
mc0: 0 Corrected Errors with no DIMM info
edac-util: No errors to report.

というわけで ECC は OS 側から認識されているようです。エラー発生・訂正の様子を実際に確認するにはメモリを起動でコケない程度にオーバークロックするとよいそうですが、さすがにそこまではやりませんでした…

データコピー

デスクトップ環境をまっさらな状態から構築する関係で旧PCの home ディレクトリをそのまま移行はしないのですが、データの大半は必要ですし、必要になるたびコピーするのは面倒なので、旧 home をまるごと新PCの適当なフォルダにコピーしました。2TB近くあるので、万一のデータ化けを防ぐために転送方法を工夫しました。

最初は samba をインストールして SMB 署名を有効(smb.conf の [global] セクションで server signing = mandatory を設定)にして nautilus からコピーしようとしたのですが、SMB だとシンボリックリンクのコピーでエラーになり、ずっと確認ダイアログが出てきて前に進まないので*2 ssh と tar を使いました。

まず新PC側に ssh サーバーをインストールします。

$ sudo apt install openssh-server

そして新PC側にコピー先になる一時ディレクトリを作成して(~/tmp とします)、旧PC側で以下のようにして home ディレクトリを丸ごと転送しました(ユーザー名 hoge は適当に置き換えてください)。

cd /home
tar cfpv - -C . hoge | ssh hoge@keynes.local 'tar xf - -C tmp'

tar の p オプションでシンボリックリンクシンボリックリンクのまま転送しています。

ssh を使ったのは暗号化された通信なら通信路でデータ化けが発生すれば送信先で復号できなくなってエラーになることが期待できるからです。エラーにならずに送信が完了すればデータは無事というわけです。

単純なコピーなら scp の方が簡単ですが、scp はシンボリックリンクはリンク先の実体をコピーする形でしかコピーできないので上の方法にしました。

キーボード、日本語入力

mozc の修正

今まで何度か書いてますが、US配列キーボード + かな入力 + NeXT かな配列 という少数派(ていうか他にそんな人いるのかな?)の日本語入力方式を使っている関係で、mozc に自作パッチを当てて使っています。fcitx-mozc, ibus-mozc, emacs-mozc に対応したパッチがこれです。

実際には古いパッチがそのままでは使えなかったので、このパッチは手修正したものから再作成したものです。

作業手順は、まず、apt のソースリポジトリを有効にします。/etc/apt/sources.list の、

# deb-src ...

となっているところのコメントアウトを全部外します。ssh でリモートログインして作業してたのでこうしましたが、デスクトップが使える状態なら「ソフトウェアとアップデート」の「Ubuntu のソフトウェア」タブから「ソースコード」にチェックを入れたほうが早いです。

以下適当な作業ディレクトリを作って作業。

$ sudo apt-get update
$ sudo apt-get install dpkg-dev
$ sudo apt-get build-dep ibus-mozc
$ apt-get source mozc

ここで上のパッチを適用(path/to のところは適当に置き換えてください)。

$ patch -p1 < path/to/mozc-2.23.2815.102-nxkana-20210708.patch

パッチが終わったらビルドします。

$ dpkg-buildpackage -rfakeroot -uc -b

パッチでは changelog は修正していないので元のソースのバージョンと同じバージョンの deb が生成されます。これをそのまま上書きインストールしますが、その前に依存するパッケージをインストールしておきます。途中右往左往して最小限のパッケージがどれだかわからなくなりましたが、emacs と fcitx 関係を入れたのかな…

$ sudo dpkg -i *.deb

mozc のアップデートが降ってくると上書きされてしまいますが、その時は再び上の作業を繰り返す必要があります。

ちなみに最初は changelog に別のバージョンのログを定義してバージョンの違う deb をビルドしていたのですが(-8ubunt1 のところを -8rna1 とかにしてた)、mozc 以外のアップデートが降ってきた時に依存関係のせいなのか元のバージョンに上書きされてしまったので同じバージョンでビルドするようにしました。

キーボードの設定

旧メインPCに繋いでいる HHK (Happy Hacking Keyboard PD-KB02) は、新メインPCの設定が一通り終わるまでは使いたいので予備のキーボードを繋いだのですが、日本語キーボードしかなかったのでインストール時の初期設定は日本語キーボードにしていました。

新PCへの移行の目処がついた時点で HHK を新PCで使うためUSキーボード用の設定に切り替えました。まずコンソールのキーボードを変更。

$ sudo dpkg-reconfigure keyboard-configuration

CUI で設定画面が出るので HappyHacking, English(US) で設定しました。

次にデスクトップにログインして「設定 - 地域と言語」で入力ソースから「日本語」を削除して「英語」を追加して、追加されたエントリをドラッグして先頭に持っていきます。

Shift Space で IME を ON/OFF して入力モードを切り替える派なので、その後 Mozc の設定で「キー設定」をATOKをベースにして以下のように設定しました。

  • 変換前入力中/キャンセル後IMEを無効化 を Shift Space に
  • 直接入力/IMEを有効化 を Shift Space に
  • 入力文字なし/キャンセル後にIMEを無効化 を Shift Space に
  • 入力文字なし/代替空白文字を入力 を Ctrl Shift Space に

デスクトップを一度ログアウトしてログインしなおすと設定が反映されます。これでだいたい思ったとおりの挙動になりました。

emacs の設定

emacs はそのままだとインライン入力(on-the-spot)ができません。ibus-mozc からの入力になり、カーソル位置の下に小さなウィンドウが出てそこに入力文字が表示されて変換・確定して emacs のバッファに入力されることになります。

これは不便なので emacs-mozc パッケージを使いたいのですが、IME の ON/OFF を他のアプリと同じキーで行うには ~/.Xresources に以下の記述が必要です。

Emacs*UseXIM: false

これは X から emacsGUI への IME 入力を無効化する設定です。このあとデスクトップを一度ログアウトしてログインしなおすか、コマンドラインで以下を実行します。

$ xrdb merge ~/.Xresources

あとは ~/.emacs.d/init.el に emacs-mozc の設定をすればいいのですが、素の emacs-mozc は使っているうちに変換候補表示がものすごく重くなることがありました。今でもそうなのかわかりませんが、Ubuntu 18.04 では mozc-popup を入れると解決したので今回も入れます。

まず、melpa からパッケージをインストールできるようにします。

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))

package-list-package して melpa のパッケージが出てきたら*3 mozc-popup を探してインストールします。

で、これをインストールすると依存パッケージとして emacs-mozc の最新版もインストールされてしまうので、上でやった mozc へのパッチの emacs-mozc の分が台無しになります… しょうがないので、emacs の設定の方で解決します。まず、以下のかな配列テーブルを ~/.emacs.d/ にコピーします。

そして ~/.emacs.d/init.el で以下のように設定しました。

(require 'mozc)
(load-file (expand-file-name "~/.emacs.d/mozc-keymap-kana-101us-nx.el"))
(setq mozc-keymap-kana mozc-keymap-kana-101us-nx)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")
(prefer-coding-system 'utf-8)
(global-set-key (kbd "S-SPC") 'toggle-input-method)
(require 'mozc-popup)
(setq mozc-candidate-style 'popup) ; select popup style.

Shift Space で IME ON/OFF の設定も入っています。

GNOMEEmacsキーバインド

GNOME/GTK アプリで Emacs 風のキーバインドが使えるように設定します。dconf で設定してもいいのですが、ミスに気づきにくくてハマりやすいので GUI の dconf-editor をインストールします。

$ sudo apt install dconf-editor
$ dconf-editor

パスをたどって /org/gnome/desktop/interface/gtk-key-theme を Emacs にします。

xkeysnail のインストール

以下の理由から xkeysnail でキーのリマップを設定します。

HHK の Meta キーの件は以前は xkb の設定で解決していたのですが、面倒なのと、Firefox の件でどっちみち xkeysnail を使うので、キーリマップは xkeysnail に一本化しました。

まずインストール。

$ sudo apt install python3-pip
$ sudo pip3 install xkeysnail

設定ファイルを書きます(xkeysnail-config.py とします)。

import re
from xkeysnail.transform import *

define_modmap({
    Key.MUHENKAN: Key.LEFT_ALT,
    Key.HENKAN: Key.RIGHT_ALT,
})

define_keymap(lambda wm_class: wm_class in ("Firefox"), {
    K("C-n"): with_mark(K("down")),
    K("C-b"): with_mark(K("left")),
}, "Firefox")

前半は HHK のメタキー(◇)を Alt にするための設定、後半は Firefox に Ctrl N と Ctrl B が食われないようにするための設定です。

以下で動作を確認します(path/to のところは適当に置き換えてください)。

$ xhost +SI:localuser:root
$ sudo xkeysnail path/to/xkeysnail-config.py -q

上のように xkeysnail は root 権限で実行する必要があります。以前はデスクトップにログインするたびに sudo のパスワード入力をしていたのですが、面倒なので以下を参考に自動実行するように設定しました。

まずグループの作成とユーザーのグループ設定(hoge (ユーザ名)は適当に置き換えてください)。

sudo groupadd uinput
sudo gpasswd -a hoge input
sudo gpasswd -a hoge uinput

/etc/udev/rules.d/input.rules を作成して以下のように設定。

KERNEL=="event*", NAME="input/%k", MODE="660", GROUP="input"

/etc/udev/rules.d/uinput.rules を作成して以下のように設定。

KERNEL=="uinput", GROUP="uinput"

~/.config/systemd/user/xkeysnail.service を作成して以下のように設定(path/to のところは適当に置き換えてください)。

# 1. Copy this to ~/.config/systemd/user/xkeysnail.service
# 2. systemctl --user enable xkeysnail
#
# Note that you need to set proper $DISPLAY on your environment.

[Unit]
Description=xkeysnail

[Service]
KillMode=process
ExecStart=/usr/local/bin/xkeysnail path/to/xkeysnail-config.py -q
ExecStartPre=/usr/bin/xhost +SI:localuser:root
Type=simple
Restart=always

# Update DISPLAY to be the same as `echo $DISPLAY` on your graphical terminal.
Environment=DISPLAY=:0

[Install]
WantedBy=default.target

xkeysnail の -q オプションは入力したキーをシステムのログに残さないための設定です。こうしないと実質キーロガーになってしまうので…

このサービス有効化します。

$ systemctl --user enable xkeysnail
$ systemctl --user start xkeysnail

一度再起動しないと xkeysnail の起動に失敗するので start はいらないかも。ここまできたらPCを一度再起動します。

再びデスクトップにログインして、以下のようにステータスを確認します(hoge や 1234(ユーザID) や /path/to は適当に読み替えてください)。

$  systemctl --user status xkeysnail
● xkeysnail.service - xkeysnail
     Loaded: loaded (/home/hoge/.config/systemd/user/xkeysnail.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-07-05 09:39:27 JST; 16s ago
    Process: 2224863 ExecStartPre=/usr/bin/xhost +SI:localuser:root (code=exited, status=0/SUCCESS)
   Main PID: 2224864 (xkeysnail)
     CGroup: /user.slice/user-1234.slice/user@1234.service/xkeysnail.service
             └─2224864 /usr/bin/python3 /usr/local/bin/xkeysnail /path/to/xkeysnail-config.py -q

 705 09:39:27 keynes systemd[1421]: Starting xkeysnail...
 705 09:39:27 keynes xhost[2224863]: localuser:root being added to access control list
 705 09:39:27 keynes systemd[1421]: Started xkeysnail.

フォントの設定

何かと便利なので Windows と共通のMSコアフォントは入れておきます。

# sudo apt install ttf-mscorefonts-installer

日本語フォントは入ってませんが…

ネットで入手できるフォントはファイルをダブルクリックしてフォントビューアからインストールできますが、数が多くなると面倒なのと、.ttc (TrueType Collection) ファイルはなぜか [インストール] ボタンが無効になってインストールできないのでどうしようかと思っていたところ、~/.local/share/fonts にファイルをコピーするだけでそのまま使えるようになりました。

その他

ruby bundler でデプロイしたスクリプト

このブログを書くのにも使っている HatenaBlogWriter ですが、gem のバージョンを固定するために ruby bundler を使っています。

Ubuntu のデフォルトでは ruby からして入ってないので(python は入ってるのに…) bundler も一緒にインストールします。

sudo apt install ruby
sudo apt install ruby-bundler

旧PCからコピーしたデプロイ先ディレクトリ(/path/to/dir とします)でそのままスクリプトを実行すると、こんな感じのエラーで実行できません。

Traceback (most recent call last):
	2: from /usr/bin/bundle:23:in `<main>'
	1: from /usr/lib/ruby/2.7.0/rubygems.rb:294:in `activate_bin_path'
/usr/lib/ruby/2.7.0/rubygems.rb:275:in `find_spec_for_exe': Could not find 'bundler' (1.16.1) required by your /path/to/dir/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.1`

古い bundler で入れた gem はそのままでは動きません。エラーメッセージの指示通り更新します。

$ bundle update --bundler
Fetching gem metadata from https://rubygems.org/.
Fetching rake 10.5.0
Installing rake 10.5.0
Fetching atomutil 0.1.5
Installing atomutil 0.1.5
Using bundler 2.1.4
Warning: the lockfile is being updated to Bundler 2, after which you will be unable to return to Bundler 1.
Bundle updated!

これでスクリプトが動くようになりました。

VLC

デフォルトの動画プレイヤーは対応コーデックが限られているので VLC をインストールしました。

$ sudo apt install vlc

Full-HD 動画の再生も特に問題なし、と思ったのですが、特定の MPEG2 TS ファイルを開くと途中から映像が止まり音声だけ進む状態になり、やがてマウスカーソルも動かなくなりました。音声はそのまま流れます。外から ssh でログインはできるので X だけハングしている状況のようです。

原因の切り分けのためにまず VLC の [ツール - 設定 - ビデオ] で「Output」を「無効」に設定してみたところ、ハングしなくなりました。なぜかウィンドウのサイズが勝手に変わり続けて気持ち悪いのですが、音声は正常ですし、ハングもしません。

では OpenGL 関係の不具合なのか?と思って今度は「ASCII Art」に設定してみたところ、同じ動画の同じ箇所でハングしてしまいました。ということは OpenGL は関係なく、MPEG2 ビデオデコーダーの不具合?

[ツール - 設定 - 入力/コーデック] の Hardware-accelarated decoding はデフォルトで「自動」になっていて、Ryzen APU の場合、ハードウェアデコーダが使用されているものと思われます。そこでこれを「無効」に設定したところ、ハングしなくなりました。

ソフトウェアデコードは重いのでは、と思ったのですが、さすがに 4コア8スレッドの Ryzen だけあって全く気になりません。再生中に Twitter で実況しても特に重くなる場面はありませんでした。CPU 使用率も MPEG2/Full-HD で20%前後、H264 でも10%前後(何故かH264の方が軽い)で CPU 温度も特に問題なかったので、それ以上設定を試さずにこれで行くことにしました。

shotwell

旧PCでは ~/Photos に写真を入れる設定にしていたのですが、旧PCから

  • ~/.local/share/shotwell
  • ~/.cache/shotwell
  • ~/Photos

を同じ場所にそのままコピーすると問題なく移行できました。ただし、Flickr への写真のアップロードの際は再認証が必要でした。何故かパスワードが通らなくて(アカウントが連携している yahoo.com では通るのに)一度パスワードリセットをする必要がありました。

Nextcloud クライアント

クラウドストレージは以前は Dropbox をメインに使っていたのですが、規約改定で無料で連携できるデバイス数が制限されてしまい使い勝手が著しく悪化したので、最近は昔から借りているさくらのレンタルサーバーに Nextcloud をインストールして使っています。

すでに 13GB くらい使っているのですが、さくらのレンタルサーバー(プレミアム)は一度に大量の転送が発生すると 503 エラーを返すようになり、ブログの画像置き場としても同サーバーを使っている身としてはそれは避けたかったので、ローカルでコピーしてから同期することで転送を防ごうとして試行錯誤していました。

最終的には、

  • 旧PC の Nextcloud クライアントを止める
    • 同期フォルダ直下にある以下のファイルが消える(xxxxxxxxxxxx は乱数っぽい文字列)
      • ._sync_xxxxxxxxxxxx.db-shm
      • ._sync_xxxxxxxxxxxx.db-wal
      • ._sync_xxxxxxxxxxxx.db は残る
  • 同期フォルダをまるごと(._sync_xxxxxxxxxxxx.db も含めて)新PCにコピーする
  • 新PCに Nextcloud クライアントをインストール(sudo apt install nextcloud-desktop)
  • nextcloud を起動して認証、同期フォルダ設定

でなんとかなりました。最初は ._sync_xxxxxxxxxxxx.db が残っていると悪さしそうと思って消していたのですが、それをやると逆にほぼ全ファイルを同期しようとしてダメでした。

XSH2

XSH2 は、とあるプロジェクトで使用している perl ベースの言語で、XMLの処理を簡単に記述できるので使っています。Ubuntu のパッケージはないので、CPAN でインストールします。試行錯誤しましたが、以下の手順でインストールできるはずです。*4

まず libxslt1 の開発用パッケージをインストールします。XSH2 が依存する XML-LibXSLT-1.99 がこれを必要とします。

$ sudo apt install libxslt1-dev

cpan を起動します。初回起動時の初期設定はデフォルトのままで進み、まず XML::LibXSLT を notest install します(test で失敗するため)。

cpan[1]> nostest install XML::LibXSLT
Running install for module 'XML::LibXSLT'
  SHLOMIF/XML-LibXSLT-1.99.tar.gz
...
  SHLOMIF/XML-LibXSLT-1.99.tar.gz
  /usr/bin/make install  -- OK

その後 XML::XSH2 を install します。

cpan[1]> nostest install XML::LibXSLT
...

途中、

	Term::ReadLine::Perl::readline(Term::ReadLine::Perl=ARRAY(0x56316edc7470), "Enter arithmetic or Perl expression: ", "exit") called at test.pl line 54
Enter arithmetic or Perl expression: exit

というメッセージが出て止まりますが、そのままリターンキーを押せば最後まで進んでインストールできました。

CPAN の初期設定で変更していないなら、~/perl5/bin/ に xsh がインストールされます。ここには CPAN が .bashrc を変更して PATH を通してあるので、シェルを立ち上げ直せば xsh が起動するようになります。

Stellarium

プラネタリウムソフトの Stellarium ですが、Ubuntu の公式リポジトリからインストールすると何故か少し古いバージョンが入ります。旧PCでは一時期あった月食のバグ(月食中の空を表示すると落ちる)を回避するために公式 PPA からインストールしていた関係で、旧PCの設定ファイルを新PCにコピーしても設定が一部反映されなくなりました。

仕方がないので新PCでも公式 PPA からインストールするようにしました。

$ sudo add-apt-repository ppa:stellarium/stellarium-releases
$ sudo apt-get update
$ sudo apt install stellarium

その後旧PCから ~/.stellarium を丸ごと新PCにコピーしてから stellarium を起動したところ、無事旧PCの設定が反映されました。

astrometry.net

astrometry.net は天体写真から写野の天球上の位置を特定する(plate solve といいます)ためのソフトです。Ubuntu にもパッケージがあるので、apt でインストールします。

$ sudo apt install astrometry.net

しかしこれだけでは計算できません。星表のデータが必要になります。これが膨大で全部で 30GB 以上あるものをダウンロードしなくてはなりません。これも apt でインストールできるので旧PCには全部いれていたのですが、むちゃくち時間がかかるしサーバーにも負荷がかかるので気が引けます。そこで旧PCからデータを丸ごとコピーすることにしました。

astrometry-data- 系パッケージのファイルリストを見ると、tycho2 (ティコ第二星表)も 2mass (Two Micron All-Sky Survey)も、最終的には /usr/share/astrometry/ に fits データを置いているだけのようです(2mass の方は中身はダウンローダーで別のサーバから fits をダウンロードしています)。その他ドキュメントも /usr/share にインストールしていますが、これは動作には関係ないと思われます。

ということで旧PCから /usr/share/astrometry/ の中身だけコピーします。新PC側で、先に sudo で何か実行して認証を済ませてから(そうしないと ssh と sudo のパスワード入力が被って入力できなくなる)以下を実行。

$ ssh rna@OLD_PC 'tar cfp - -C /usr/share/astrometry .'| sudo tar xvf - -C /usr/share/astrometry/

コピー完了後 solve-field コマンドを実行すると無事 plate solve に成功しました。

未解決の問題

indicator-sensors で HDD 温度表示を有効にすると認証を要求される

上の「センサー関係」で書いた通りです。今は udisks2 プラグインを無効にして、必要な時にコンソールから hddtemp を実行しています。あまり激しく温度変化することはないようなので当分これで行きます。

Emacs の表示欠け

Emacs を使っていると時々表示が欠ける(一部の文字が背景色で塗りつぶされる)ことがありました。こんな感じ。

文字単位で消えるわけではなく一部が欠ける感じなのですが、上の動画のように欠け方が大きくてほぼ1行まるまる消えているように見えることもあります。発生条件は不明ですが C-l でスクロール位置を切り替えていると発生することがあります。発生しないこともありますし、そうでない時に発生することもあります。

当該箇所でカーソルを動かしたり範囲選択したりすると表示が復帰しますが、編集中に発生すると文字の消しすぎと勘違いして再入力してしまったりして厄介です。

サウンドのノイズ

これも発生条件が不明なのですが、何かの拍子にサウンドにノイズが入り初めて、システムサウンドも含めてどのアプリから音を鳴らしてもノイズが入るようになってしまいます。ノイズの入った音のあとにエコーのように同じ音が繰り返されるのが特徴です。

気がつくと直っていることもあるのですが、ずっと直らないことも。ベンチマーク中でも何時間も動画を再生していても再現しないので負荷でチップが熱を持って、みたいな話ではなさそう。

再起動後デスクトップにログインしていきなり再現したこともあります。この時は top でプロセスを見ると pulseaudio が 5% ぐらいCPUを食った状態で張り付いていて、pulseaudio の暴走かなと思い以下のコマンドで pulseaudio だけ再起動すると即直りました。

$ pulseaudio -k

とりあえず再発したらこれでしのぎます…

nautilus で SMB のファイルコピーが遅い

Windows の共有フォルダをファイルマネージャー(nautilus)でマウントしてファイルをコピーすると異様に遅いことに気が付きました。1Gbps のネットワークなのに 30〜40MB/s 前後しか出ません。Windows 同士だと 100MB/s 近く出るのですが。

これは困る、と思ったのですが、調べてみると旧PCでも同じくらいしか速度が出ていないことが判明。なら今まで困ってないからいいか… ということで諦めたのですが、一応調べてみると、どうも GNOME の未解決の不具合(制限?)のようです。

nautilus の SMB は gvfs-smb 経由で GIO API を使っているのですが、この時デフォルトの 64KB のブロッサイズが適用されてしまい、性能が出ないとのこと。適切なブロックサイズをオプションで指定すれば性能が出るのは確認済みですが適切なブロックサイズを検出する方法が難しいようでまだ fix されていません。

apt で cifs-utils をインストールして、以下のように正攻法で cifs ファイルシステムとしてマウントするか(マウントポイントは share ユーザ名は hoge とする)、

$ sudo mount -t cifs //windowspc/share/ share -o "username=hoge"

あるいは逆に Ubuntu 側で samba の共有フォルダを作り Windows 側からコピーしてあげるとフルスピードでコピーできるので、それでしのぐことにしました。

デスクトップ壁紙画像が変更できない

デスクトップの背景を変えようと、設定 - 背景 の [画像を追加] で ~/ピクチャ から画像を選ぼうとしても選べませんでした。ファイルダイアログは開くのですが画像を選んでも [開く] ボタンがグレーアウトしたまま。~/Photos の下のファイルでも同様なので日本語パス名の問題ではないようです。

納得行かないのですが、dconf-editor で /org/gnome/desktop/background/picture-url に画像のURLを file:///home/hoge/ピクチャ/cure-marine.jpg のように設定してやれば変更できるので、当分それでしのぐことにしました。

iPhone からの動画のコピーで nautilus が固まる

USB で iPhone を繋いで iPhone 側で「このPCを信頼する」を許可してからUSBを挿し直したら nautilus から写真とドキュメントにアクセスできるようになったのですが、写真から大きな動画をコピーすると nautilus が固まってしまう現象が発生しました。

プログレスバーが進まなくなって転送速度も0KB/s表示になり、nautilus の操作が一切できなくなりました。しかし実際にはコピー自体は進んでいるようで、コピーが終わると nautilus も復帰し、コピーも成功していました。

いまいち納得いきませんが当面我慢して使っていこうと思います。

まとめ

いくつか問題は残りましたが、おおむね旧PCでできていたことは一通りできるようになりました。新PCはさすがに最新のCPUだけあってサクサク動くし気持ちいいです。

今までネットとテキスト編集程度だけなら低スペックのPCで十分って思ってたのですがそんなことはありませんでした。今どきの Web ページ、JavaScript バリバリに使ってるせいもあって、CPUパワー次第でレスポンス全然違いますね… どうせサーバーサイドが重いんでしょ、と諦めてた TwitterFacebook もサクサク動くようになってびっくり。

メモリも 32GB になると安心して使えます。16GB の時は長期間大量のタブが開いた Firefox を放置しているとメモリ残量が気になりだして Firefox を再起動したり Shotwell の同時起動をためらったりしてましたが、今は何も考えずガンガン起動できる感じです。

ということでこれから5年くらいは新PCでなんとかしのげるかな…

長々と書きましたが、正直これ読んで楽しい人なんてほとんどいないと思うんですけど、自作PCLinux やってる人で困った人が検索で見つけてちょっとは役に立ったりすればいいなと思って公開することにしました。実際今回も今までも自分がそうやって助かっているので。

*1:4K では表示がおかしくなるという話もありますが、Ubuntu 20.04 はデフォルトで HWE (HardWare Enablement) スタックのドライバが入るので、現在はインストール後アップデートをかければ直るものと思われます。

*2:なんでそんなにシンボリックリンクがあるのかというと IIIME 関係のソースをビルドした時に生成されたもののようですが、全部特定していらないものを削除したり、いるものは tar で固めたり、というのは大変すぎるので諦めました。

*3:最初 gnu のパッケージしか表示されなくて遅れて出てくることがある。出てこないなら M-x package-initialize したら出てくるようになるかも。

*4:参考: https://stackoverflow.com/questions/28473981/how-to-reinstall-re-run-module-installation-for-a-failed-install-in-perls-mcpa