Ubuntu Linux 22.04 設定メモ

# この記事について

この記事は、Ubuntu Linux 22.04に関する個人的なメモです。
私が自分のパソコンでUbuntuを使っているため、 ソフトのインストールの記録などをメモしています。 
私の他にもLinuxを使う人の役に立つと思い、メモを公開しています。
なお、私がインストールしたのは、Japanese Teamが配布している[日本語Remix版](https://www.ubuntulinux.jp/japanese)です。
日本語Remix版は、日本語優先の設定がされているものですので、おすすめです。

# ハードウェア構成

* CPU: Intel Core i9 12900K
* メモリ: 128GB
* グラフィックカード: AMD RADEON R9 380X
* ストレージ: SSD WESTERN DIGITAL WD_Black SN770 250GB × 1個 (OS用), SSD PLEXTOR PX-1TM10PGN 1TB (ホームディレクトリとVMware用), HDD × 3個(バックアップ用)

# ユーザの作成

インストール時にはダミーのユーザを作って、あとからユーザhirayamaを追加する。hirayamaのユーザIDとグルーブIDをこれまで使ってきた値にしたいため。ただし，GUIツールでは，ユーザIDやグルーブIDを変えられないようなので，vipw, vigrコマンドを使って変更した。

インストール後もダミーのユーザのアカウントは残しておこう。Ubuntuではrootでのログインをしないような設計思想になっているので、何かのミスでhirayamaがログインできなくなったときに、ダミーユーザでログインことができる。

# インストールに際して参考にしたページ

これに書いてあることは、基本的に本記事では割愛する。

- [Ubuntu 22.04 LTS をインストールした後やること11選](https://qiita.com/outou_hakutou/items/0a59b539457ccf084593)

- [Ubuntu22.04LTSをインストールした後に行う11のこと](https://gamingsym.in/jp/ubuntu22-04ltsをインストールした後に行う11のこと/)

- [Ubuntu 22.04 をインストールしたら設定すること 10 ヶ条](https://zenn.dev/sprout2000/articles/8ea4a77d81583a)

# 日本語ディレクトリを英語に

デスクトップとかダウンロードなど日本語名のディレクトリが、ホームディレクトリに作られている。日本語ディレクトリだと、何かと不便なことが多いので、英語ディレクトリにしておく。コマンドは下記の通り。

```
$ LANG=C xdg-user-dirs-gtk-update
```

ディレクトリ中にファイルがあると、元のディレクトリが残ってしまうらしいので、早めにやっておくのがよそさう。

# 基本ツール

設定作業をするうえで、あると便利な基本ツールを早めにインストールしておく。

後回しでよい(基本でない)ツールについては、本ページ下段の[その他よく使うソフトのインストール](#その他よく使うソフトのインストール)の節を参照。

## 基本コマンド

パッケージ名のメモ

- vim
- nkf
- lv
- zsh zsh-doc
- git
- build-essential
- ssh
- autofs

## 設定関係アプリ

パッケージ名のメモ

- synaptic
- gnome-tweaks
- gnome-shell-extension-manager (GNOME Shell拡張機能の管理。後述のxremapやCoverflow-Alt-Tabで使う)

# 固定IPアドレスを設定する．

 `/etc/hostname`の中身が、インストール時に設定したホスト名（私の場合は`snowdrop`）になっていることを確認する。

 `/etc/hosts`に，127.0.1.1という気持ちの悪いIPアドレスが書かれているので，ここを，

```
192.168.39.135             snowdrop   snowdrop.sao.kono
```

にした。

`/etc/hosts`にはIPv6関係の設定も書かれていたが、特にいじらずに放置した。

続いて、GUIからネットワークの設定をする．
「設定」->「ネットワーク」->「有線」の歯車アイコン->「IPv4」->「手動」

- アドレス: 192.168.39.135
- ネットマスク: 255.255.255.0
- ゲートウェイ: 192.168.39.254
- DNSサーバ: 192.168.39.137

IPv6は使わないので、「IPv6設定」を「無効」にしておいた。

続いては、ネットワークのドメイン名（私の場合は`sao.kono`）を設定する。
昔(16.04のとき)は「ドメインを検索」という設定項目があったのだが、20.04以降ではなぜか見当たらない。

```
% sudo nmtui
```

で設定できる。「検索ドメイン」という設定項目がある。
ここに、sao.konoを記入する。

参考URL:
https://www.hiroom2.com/2018/05/29/ubuntu-1804-network-ja/

再起動(`sudo systemctl restart systemd-resolved`)してから`/etc/resolv.conf`を見ると、`search sao.kono`が設定された。
`nameserver 127.0.0.53`が奇妙だが、GUIのネットワークの設定ツールから，ちゃんとDNSの設定をしてあるので，これは気にしないことにする。(GUIのネットワークの設定ツールの設定結果が書かれるファイルはこれではないようだ。)
今となっては`/etc/resolv.conf`は直接編集してはいけないらしい。編集するのは`/etc/systemd/resolved.conf`の方とのこと。

# /etc/hosts.allow, /etc/hosts.deny

これらは、他のコンピュータからこのコンピュータへのアクセスを制限するための設定ファイル。

`/etc/hosts.allow`の設定内容はこんな感じ。必要最小限のマシンからのアクセスのみ許可している。

```
ALL: 127.0.0.1
ALL: 192.168.39.135
sshd: 192.168.39.0/255.255.255.0
```

`/etc/hosts.deny`の設定内容はこんな感じ。原則アクセス不可にしている。

```
 ALL: ALL
```

# ssh

sshすることも、されることもあるので、sshというメタパッケージを入れる。

念のため、設定ファイル`/etc/ssh/sshd_config`を見て、`PermitRootLogin`(rootでのログイン)が制限されていることを確認する。

# automount

autofsパッケージをインストールする。`/etc/auto.master`は設定ファイルだが、`/etc/auto.net`はスクリプトになっている。

```
 $ sudo mkdir /net
```

でマウントポイントnetを作った。

`/etc/auto.master`の中で、コメントアウトされている/netの行(下記)を有効に(コメントをはずして)して、再起動(`sudo systemctl restart autofs`)した。

```
 /net    -hosts
```

`/net`の下から、コンピュータ名/ディレクトリ名でアクセスすれば、exportされているディレクトリを自動的にマウントする。別段`/etc/fstab`等を書き換える必要ない。便利でありがたい。

# キーバインドの変更 Wayland編

X11のころは、 [Ubuntu Linux 20.04 設定メモ](https://qiita.com/j0306043/items/5666e67bcbfd099be7d5) のようにしてキーバインドを変更していたが、Waylandになってからは古いやり方は効かなくなった。

Waylandでキーバインドを変更する候補は下記。

- [k0kubun/xremap](https://github.com/k0kubun/xremap) 精力的に更新されている。アプリごとに異なる設定を割り当てられるのが秀逸。
- [sezanzeb/input-remapper](https://github.com/sezanzeb/input-remapper) Ubuntuの公式リポジトリにも入っており、パッケージ名は、input-remapper。マクロ用の機能が充実している。

どちらにしようか迷ったが、xremapを採用した。
私がやりたかったキーバインドに近い設定が、xremapの設定例にあったため。
ダウンロードするのは、xremap-linux-x86_64-gnome.zip。
インストールやその他の準備は、[xremapの公式サイト](https://github.com/k0kubun/xremap)に従ってやった。

私の設定例。
xremapは、Ctrl_LとCtrl_Rを区別しており、それぞれに異なるキーバインドが可能(LRをつけずに単にCtrlとすることで、区別しない設定も可能)。そのため、私はCtrl_Rを使うときのみEmacs風の操作を設定している。一方で、Ctrl_Lは本来の動作のまま。すると、例えば、ブラウザ等でCtrl_R-fは(xremapによる)カーソル移動、Ctrl_L-fは(本来の動作の)検索ができる。本来の操作を残しつつ、Emacs風の操作も加えることができて、便利。

```
# A workaround for the Wayland bug: https://github.com/k0kubun/xremap/issues/179
keypress_delay_ms: 20
#
modmap:
  - name: Global
    remap:
      # Japanese Keyboard: [Alt_L] [Muhenkan] [Space] [Henkan] [KatakanaHiragana] [Alt_R] [Compose] [Ctrl_R]
      CapsLock: Ctrl_L
      Muhenkan: Shift_L
      Henkan: Ctrl_R
      KatakanaHiragana: Backspace
      Alt_R: KatakanaHiragana
      Compose: Reserved
      Ctrl_R: Muhenkan
keymap:
  - name: Global
    remap:
      # Underscore without Shift
      RO: Shift-RO
  - name: Emacs-like basic keybinds
    application:
      only: [Opera, Google-chrome, Firefox, Slack, Vmplayer]
    remap:
      Ctrl_R-b: Left
      Ctrl_R-f: Right
      Ctrl_R-p: Up
      Ctrl_R-n: Down
      Ctrl_R-a: Home
      Ctrl_R-e: End
      Ctrl_R-d: Delete
      Ctrl_R-h: Backspace
      Ctrl_R-k: [Shift-End, Delete]
      Ctrl_R-o: [Enter, Left]
```

気になったこと: gnome-terminalやlibreofficeなど一部のソフトで誤動作する。例えば、キーに設定した動作と異なる動作をする。[xremapの公式サイトのIssues](https://github.com/k0kubun/xremap/issues)を見ると、このへんの誤動作の多くは、X11では発生しなくてWaylandでのみ発生している。どうやら、xremapのバグではなく、Wayland側の不具合らしい。Waylandはまだ発展途上のようである。``keypress_delay_ms: 20``を設定するとだいぶましになるが、これは[Waylandのバグに対するxremap側の暫定的な対処](https://github.com/k0kubun/xremap/issues/179)であることに注意。

# ホームディレクトリのパス

私は、OSのSSDとホームディレクトリその他データ用SSDの2つに分けている。
そのせいで私のホームディレクトリのパスが標準と異なる。
標準ではユーザ名hirayamaのホームディレクトリは/home/hirayamaとなるところが、/diskd/home/hirayamaとなっている。これがSnapとすこぶる相性が悪い。
まずもって、Snap版のFirefoxやSlackなどは、下記のエラーを出して起動しない。

```
Sorry, home directories outside of /home are not currently supported.
```

参考URL:

- [firefox snap does not work with home directories outside of /home](https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1967844)

**追加更新情報**: Version 2.59以降のsnapdであれば、標準とパスが異なるホームディレクトリもサポートします。

- [Home directories outside of '/home'](https://snapcraft.io/docs/home-outside-home)


AppArmorともすこぶる相性が悪い。
AppArmorは、ファイルアクセスを監視するセキュリティ機能。
ホームディレクトリのパスが標準的でないと、AppArmorでブロックされまくる(syslogに「`apparmor="DENIED"`」が出る)。
SnapがAppArmorの機能を前提として動いているため、AppArmorを無効化するわけにもいかない(余談だが、Ubuntu 22.04では、AppArmorをアンインストールすると、Snapもアンインストールされてしまう)。

これではあまりに不便なので、/diskd/home/hirayamaのパスを標準の/home/hirayamaのように見せかける設定をする。
すぐに思いつくのは、シンボリックリンクだが、これは本物のパスではないことがAppArmorにバレるので不可。
解決策としては、バインドマウントを使う。
これは、ディレクトリをディレクトリにマウントする方法。
私の場合、`/etc/fstab`に下記を追加した。

```
# bind-mount of /diskd/home on /home 
/diskd/home	/home	none	bind	0	0
```

これにより、/diskd/home/hirayamaを、標準のパス/home/hirayamaに見せかけることができた。

参考URL:

- [Bind マウントとコンテキスト依存のパス名](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/5/html/global_file_system_2/s1-manage-pathnames)

注意点

- 注意点1: 上記に加えて、`sudo vipw`により、ユーザhirayamaのホームディレクトリを`/diskd/home/hirayama`から`/home/hirayama`に修正する(辻褄を合わせる)ことを忘れずに。
- 注意点2: 元々の(本来の)/homeの下にあった各ユーザのホームディレクトリは、/diskd/homeのマウントにより隠されてしまう。元々の/homeを利用していた他のユーザ(今回の場合、インストール時に作成したダミーユーザ)が影響を受けるので、その措置を考えないといけない。シンプルな解決策は、バインドマウントする前に、予め/homeの下の必要なユーザのホームディレクトリを/diskd/homeの下にコピーしておくことかな。もしくは、ホーム全体を(/diskd/homeを/homeのように)マウントする代わりに、特定のユーザのホームディレクトリを個別に(/diskd/home/hirayamaを/home/hirayamaのように)マウントするようにすれば、他のユーザに影響を与えずに済む、など。


# 日本語入力

日本語Remix版をインストールしたので、日本語入力は問題ない。
半角全角キーで日本語入力のオンオフを切り替えることができる。
インプットメソッドとしては、IBusが入る。
IBusだと用例が表示されないなどの制限があるが、日本語入力そのものは支障ない。
Fcitx5にする手もあるが、とりあえず様子見。

参考URL:

- [Ubuntu 22.04 LTSにおける、Waylandとアプリケーションの微妙な関係](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0717)
- [Ubuntu 21.10でFcitx 5を使用する](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0689)

## MozcのPPAを登録

2022年8月時点では、Jammy用の更新はない。
いずれ、ppa:japanese-testers/mozc を登録する予定。

# Opera

公式サイトからdebファイルをダウンロードして、インストールすればよい。
インストールすると、ついでにOperaのstable版PPAがリポジトリに追加される。
Snap版のFirefoxが不具合が多く評判が悪いので、私はOperaを使っている。

## OperaとEvinceとApparmorの組み合わせの不調

私はデフォルトブラウザをOperaにしている。
ハイパーリンク入りのPDFをEvinceで表示したときの話。
マウスでリンクをクリックすると、本来はブラウザが起動して、リンク先のページを表示するはずなのだが、Operaブラウザが起動しない。
syslogを見ると、AppArmorにブロックされている。

```
% tail -f /var/log/syslog | grep -i apparmor
Mar 27 13:21:31 snowdrop kernel: [239897.725852] audit: type=1400 audit(1679890891.675:164): apparmor="DENIED" operation="exec" class="file" profile="/usr/bin/evince" name="/usr/lib/x86_64-linux-gnu/opera/opera" pid=180384 comm="sh" requested_mask="x" denied_mask="x" fsuid=14040 ouid=0

```

AppArmorの設定ファイル/etc/apparmor.d/abstractions/ubuntu-browsersを見ると、

```
/usr/bin/opera Cx -> sanitized_helper,
```

は書かれているが、/usr/lib/x86_64-linux-gnu/opera/operaは書かれていない。
operaの実行ファイルとしては、/usr/lib/x86_64-linux-gnu/opera/operaが実体で、/usr/bin/operaはそれへのリンクであるので、実体の方を書かないといけないのかもしれない。
で、/usr/bin/operaのところを/usr/lib/x86_64-linux-gnu/opera/operaに書き換えてみたが、何やら別のエラーをsyslogに吐いて、Operaが起動しない。
この行は元に戻して、代わりに以下の行を追加して、operaのアクセスを許可するようにする。

```
/usr/lib/x86_64-linux-gnu/opera/opera Ux,
```

この後、AppArmorを再起動する。

```
sudo service apparmor restart
```

operaが起動するようになった。
sanitized_helperを使わないので、セキュリティ的には良くないかもしれない。

# Emacs

以下のパッケージを入れた。バージョンとしては、Emacs27が入った。

- emacs
- emacs-mozc
- fonts-takao (Emacsで使うときに、私が好きなフォント。余談だが、これをインストールすると、標準のNotoフォントよりも高い優先度で標準フォントとして使われるようになるようで、Gnome等のフォントもこれになる。)

## Package cl is deprecated

Emacs 27を起動すると、「Package cl is deprecated.」という警告が出て、うっとうしい。
私自身はinit.elでclパッケージは使っていなくても、各種のツールでそれが使われているため、ユーザ側ではclパッケージの依存を回避できない。
とりあえず表示を出なくすることはできるので、これをして様子見する。
init.elに下記の設定をする。

```
(setq byte-compile-warnings '(cl-functions))
```

参考URL:

- [Emacs27で"Package cl is deprecated"を抑制する方法](https://tam5917.hatenablog.com/entry/2021/03/30/180301)


## EmacsのXIMを無効化

Emacs上では、XIM経由のIBusではなく、mozc.elの方を使いたいので、XIMを無視する設定をする。
`$HOME/.Xresources`に

```
! XIMを無効化
Emacs*useXIM: false
```
とすればよい。

## emacs-mozcの設定

`~/.emacs.d/init.el`に、下記の設定を入れると、最低限使えるようになる。

```
(require 'mozc)
(setq default-input-method "japanese-mozc")
```

なお、他のサイトでよく書かれている `(set-language-environment "Japanese")`は設定不要、 というか設定してはいけない。 これを設定してしまうと、なぜか日本語ファイル名が化けるようになる。

デフォルトではC-\で日本語入力のオンオフだが、半角/全角キーで日本語入力を切り替えたいときは、下記の設定をどうぞ。

```
(global-set-key [zenkaku-hankaku] 'toggle-input-method)
(add-hook 'mozc-mode-hook
	  (lambda()
	    (define-key mozc-mode-map [zenkaku-hankaku] 'toggle-input-method)))
```

少し解説すると、 global-set-keyにより、半角/全角キーでMozcモードをONできるようになる。 一方、mozc.elは、mozc-modeに入ると、半角/全角キーのイベントを奪ってしまうた め、そのキーをglobal-set-keyするだけでは、日本語入力をOFFにする切り替えがうまくいかない。mozc-mode-mapのキーバインドも合わせて変更する必要がある。

その件に関する参考URL:

- http://d.hatena.ne.jp/Nos/20120317/1331985029
- http://d.hatena.ne.jp/kitokitoki/20110815/p3

ちょっとだけ便利になる小技は、日本語入力のときに、カーソルを赤色にすること。これをすると、モードラインまで視線を動かさずに、Mozcモードになっているかいないかをカーソルの色で判断できるので、お勧め。

```
(defun th:check-mozc-and-set-cursor-color ()
  (if mozc-mode
      (set-cursor-color "red")
      (set-cursor-color (face-attribute 'default :foreground))))
(add-hook 'input-method-activate-hook 'th:check-mozc-and-set-cursor-color)
(add-hook 'input-method-inactivate-hook 'th:check-mozc-and-set-cursor-color)
(run-at-time t 2 ;; repeat in every 2 seconds.
	     'th:check-mozc-and-set-cursor-color)
```
少し解説すると、 2つのadd-hookは、MozcがONになったときとOFFになったときにカーソルの色を変えるための設定。 run-at-timeは、念の為。 hookを通らない場面でも、確実にカーソルの色が正しくなるようにしている。 これがあると、 例えば、Emacsで複数のウィンドウを使っていて、MozcモードがON状態のバッファと OFF状態のバッファとの間でカーソルを行き来したときにも、 カーソルの色が変わる。 2秒毎にチェックを繰り返しているが、2秒という値は適当に決めたもので、深い意味はない。

あとは、かな入力する人は、下記をどうぞ。 ￥キーで長音が出るようになる。(デフォルトでは「ろ」になってしまうのを修正)

```
(mozc-keymap-remove-entry mozc-keymap-kana-106jp ?\\)
(mozc-keymap-put-entry mozc-keymap-kana-106jp ?\\ "\u30fc")
```

## migemo.el

ローマ字タイピングで(かな漢字変換なしで)、日本語を検索できて便利。
準備として、下記のC言語Migemoのパッケージをインストールする。

- cmigemo

migemo.elはMELPAからインストールする。
設定ファイルには、最低限下記の設定が必要。Migemoの辞書のディレクトリを書く。

```
(require 'migemo)
(setq migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict")
(migemo-init)
```

設定については、migemo.elの公式サイト
https://github.com/emacs-jp/migemo
を参照。

## icomplete.el

icomplete.elを使うと、C-x C-f(`find-file`)でファイルを選択するとき、楽ができる。
下記は、特にicomplete-minibufferのチューニング。

### minibuffer-force-completeの不具合

ディレクトリをM-TAB(`minibuffer-force-complete`)で選んだのにもかかわらず、その直後の候補に並ぶのは、選択したディレクトリの一つ上のファイル・ディレクトリのまま、という不具合がある。
対処法等は、下記URL:

- http://emacs.1067599.n8.nabble.com/bug-32757-27-0-50-icomplete-mode-s-M-TAB-doesn-t-as-documented-td465503.html

上記URLによると、この不具合が発生するのはEmacs 26の場合で、Emacs 27ではバグ修正されているというのだが、私の手元のEmacs 27.1ではまだ発生する(直っていない)。
私はM-TABではなく、M-fに割り当てた。

```
(define-key icomplete-minibuffer-map (kbd "M-f") 
  (lambda ()
    (interactive)
    (call-interactively #'minibuffer-force-complete)
    (when minibuffer-completing-file-name
      (completion--flush-all-sorted-completions))))
```

## emacs-w3m

Emacsには標準でewwというWebブラウザが組み込まれているが、本記事時点でewwは日本語フォームの表示や処理ができないので、使えない。代わりに、w3mを使う。こちらは日本語関係を正しく扱える。
w3mを単体で使うことはまずないが、私はEmacsからw3m.elを使うことはある。
下記のパッケージをインストールした。

- w3m
- w3m-img
- w3m-el

Basic認証をするサイトに自動的にユーザ名とパスワードを送りたいときには、`~/.w3m/passwd`に設定しておくとよい。
ファイルのアクセス権(パーミッション)を600にすること。
下記は架空のサンプル。これでは使っていないが、「port」でポート番号を指定できるみたい。

```
machine www.wi2q93fx.com (←サーバ名)
realm ABCDE Page (←「Username for *****:」と聞かれるときの*****の部分)
login nanashi (←ログイン名)
passwd 39gonbei (←平文パスワード)
```

`~/.w3m/passwd`の情報は、なぜか[w3mの公式サイトのマニュアル](http://w3m.sourceforge.net/MANUAL)には出ていない。
下記のサイトを参考にした。

- [w3mでベーシック認証をパスする。](https://frym.jp/?p=455)
- [trusty (1) w3m.1.gz](https://manpages.ubuntu.com/manpages/trusty/man1/w3m.1.html)
- [w3m Set user name password automatic login](https://topic.alibabacloud.com/a/w3m-set-user-name-password-automatic-login_8_8_20217565.html)
- [w3m (text-based web browser)](https://raisan.hatenablog.jp/entry/r_env_4)

### おまけ:URL埋め込みパスワードは無効

過去には、`http://nanashi:39gonbei@www.wi2q93fx.com/auth_page.html`みたいにURLに直接ユーザ名(この例では`nanashi`)とパスワード(この例では`39gonbei`)を埋め込んでアクセスすれば、Basic認証のページに入ることができた。
しかし、今は、多くのブラウザでこれは無効になっている。w3mもしかり。
まあ、セキュリティ上の理由だろうから、仕方がない。

参考URL:

- [ベーシック認証を簡単にログインしたい！－URLに直接ログイン情報を埋め込んでみよう](https://aun.tools/blog/jitan/basic-authentication/)

# Zshの機能強化

Zsh標準の予測候補機能がいまいち使いにくいので、代わりのものを探して、 fasdとzsh-autosuggestionsを入れることにした。

## zsh-autosuggestions

オフィシャルサイトに[PPAを追加する方法](https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md)は載っていたが、あえてオフィシャルサイトに書かれているGit cloneによる方法でインストールした。自分のホームディレクトリの`~/.zsh.d/packages/`にインストールしたい都合があるため。
.zshrcファイルのZsh標準の予測候補機能の設定を無効にしたうえで、 以下の設定を.zshrcに追加する。

```
### Enabling zsh-autosuggestions
### This was installed from GitHub manually.
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=5' # Color ID (0-7?) for suggestion. The number of colors supported by the terminal may be tested by the command 'echotc Co'.
bindkey '\Cj' autosuggest-execute # Accepts and executes the current suggestion by crtl-enter. (It seems like \Cj = \C\n)
```
zsh-autosuggestionsが提示する予測候補で確定したいときには、C-j(C-Enterでもよい)する設定をしている。

## fasd

Ubuntu標準パッケージにあるので、それをインストール。
パッケージ名は、fasd。

以下の設定を.zshrcに追加する。

```
### Enabling fasd for quick access to files and directories.
### This was installed from GitHub manually.
eval "$(fasd --init auto)"
```

fasdのzコマンドが超便利。cdの代わりのコマンドだが、ディレクトリ名の一部を指定すれば、最近アクセスしたそれらしいディレクトリにcdしてくれる。

超便利なfasdであるが、心配なことが一つ。
[fasdの公式Githubリポジトリ](https://github.com/clvv/fasd)が「This repository has been archived by the owner. It is now read-only.」になってしまっている。
今後どうなってしまうのだろう。

# Samba

インストールしたパッケージ

- samba

私がやりたいのは、Linux側のホームディレクトリをまるごとWindowsからアクセスすることである。もちろん、自分のホームディレクトリに Windows側からアクセスするときには、ログイン名とパスワードで認証を行うようにする。このような使い方をする場合には、/etc/samba/smb.confに設定をする。以下は、私の設定のdiffである。特に重要な部分は、`[homes]`セクションの設定。別途、Windows側のworkgroupを確認して、「workgroup」に忘れずに設定しておくことと、 

```
% diff smb.conf.org smb.conf
29c29
<    workgroup = WORKGROUP
---
>    workgroup = HIRLAB
33a34,37
> # Added by Hirayama
>    allow insecure wide links = yes
>    wide links = yes
> 
175,177c179,181
< ;[homes]
< ;   comment = Home Directories
< ;   browseable = no
---
> [homes]
>    comment = Home Directories
>    browseable = no
181c185
< ;   read only = yes
---
>    read only = no
185c189
< ;   create mask = 0700
---
>    create mask = 0644
189c193
< ;   directory mask = 0700
---
>    directory mask = 0755
196c200
< ;   valid users = %S
---
>    valid users = %S
```

`# Added by Hirayama`の部分は、`[global]`セクションに設定したもの。 セキュリティが下がるが便利になる。

```
allow insecure wide links = yes
wide links = yes
```

これは、シンボリックリンクが張られている先が、ホームディレクトリの 階層の外部であってもアクセスを認めるという設定。 デフォルトで`unix extensions = yes`になっているため、 上記の2行とも設定することに注意。(どちらか片方だけではうまくいかない。)

あとは、samba用パスワードを設定する。

```
% sudo smbpasswd -a hirayama
```

samba用パスワードが記録されるファイルは，`/var/lib/samba/private/passdb.tdb`らしい。

```
% sudo pdbedit -u hirayama -v
```

で，samba用パスワードが設定された日時を確認できる。

以上の設定で，Windows側から，`\\snowdrop\hirayama`というパスで，自分のホームディレクトリにアクセスできるようになった。

# cronを使って、データのバックアップ

## システム管理者としてのバックアップ

Linuxでは、`/etc/cron.daily/`に、処理を記述したshスクリプトを入れておけば、その処理が毎日(dailyで)行われる(`/etc/crontab`参照)。

そこで、以下の内容のshスクリプトを用意し、`localbackup`というファイル名にし、実行権を付けて、`/etc/cron.daily/`においた。
この中で、圧縮にはgzipではなく、高速高性能なzstdを使っている。
Ver.1.31以降のtarは、zstd圧縮のオプションを標準で持っている。
ただし、過去の名残りで、下記の記述は古い形式となっている。
`--use-compress-prog=pzstd`というオプションを指定しているところがそう。
気が向いたら、今の書き方に修正する。

```
#!/bin/sh
# By Hirayama

HOSTNAME=$(hostname)
THISDIR=$(cd $(dirname $0) && pwd)
FREQUENCY=${THISDIR##*/cron\.}
BACKUPDIR=/diskb/backup
# Backup of 'etc', 'var', 'usr' of $HOSTNAME
cd / && /usr/bin/nice -n 19 tar cvf ${BACKUPDIR}/${HOSTNAME}-${FREQUENCY}.tar.zst --use-compress-prog=pzstd --warning=no-file-ignored etc var usr > ${BACKUPDIR}/${HOSTNAME}-${FREQUENCY}.log 2> ${BACKUPDIR}/${HOSTNAME}-${FREQUENCY}-error.log

# Backup of vmware-disk'
#cd /diskd && /usr/bin/nice -n 19 tar cvf ${BACKUPDIR}/vmware-disk-${FREQUENCY}.tar.zst --use-compress-prog=pzstd --warning=no-file-ignored vmware-disk > ${BACKUPDIR}/vmware-disk-${FREQUENCY}.log 2> ${BACKUPDIR}/vmware-disk-${FREQUENCY}-error.log

# Backup of /diskd/home
umask 077 && cd /diskd && /usr/bin/nice -n 19 tar cvf ${BACKUPDIR}/home-${FREQUENCY}.tar.zst --use-compress-prog=pzstd --warning=no-file-ignored home > ${BACKUPDIR}/home-${FREQUENCY}.log 2> ${BACKUPDIR}/home-${FREQUENCY}-error.log
```

/etc/cron.weekly/や/etc/cron.monthly/にも、同様にlocalbackupファイルを おいた。ファイルの中の$FREQUENCYは、ディレクトリ名に応じて， weekly, monthlyのようになるようにしてある。

さて、このlocalbackupが実際に起動される時刻は、/etc/crontabに設定する。 私は、真夜中に実行されるように時刻を設定しておいた。はずなのが、なぜか、 昼にバックアップが開始されてしまう。変だな、と思って、よくよく /etc/crontabをみると、anacronがある場合には、実行しないようになっていた。 昼にバックアップを開始していたのは、cronではなくanacronの方だった。 anacronがあっても、真夜中に実行してほしいので、/etc/crontabのanacronに 関する判定を削除した。以下がそのdiff。

```
% diff crontab.org crontab
19,21c19,21
< 25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
< 47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
< 52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
---
> 25 0	* * *	root	cd / && run-parts --report /etc/cron.daily
> 47 1	* * 6	root	cd / && run-parts --report /etc/cron.weekly
> 52 2	1 * *	root	cd / && run-parts --report /etc/cron.monthly
```

私のマシンは、ずっと電源を入れっぱなしなので、anacronは不要。とはいえ、 anacronが全く起動しないようにするには、別途作業が必要になるので、 anacronは放置。`/etc/cron.daily/0anacron`というスクリプトがあるおかげで、cronが動作すると、anacronのタイムスタンプも更新されるようになっている。そのため、cronが実施された日は、昼間にバックアップが開始されることはない。というわけで、anacronは放置しておいてかまわない。

## ユーザ個人のバックアップ

(ルートの権限ではなく)自分の権限で研究室のNFSサーバにバックアップするため、`crontab -e`コマンドを使って、個人的なバックアップの設定をした。設定内容は割愛する。 (参考 `man crontab`) 

`crontab -l`コマンドで設定内容を見ることができる。
実際には、/var/spool/cron/crontabs/にユーザ名のファイルが置かれる。

# LibreOffice

今後ずっと新しいLibreOfficeを使っていきたいので， ppa:libreoffice/ppaを登録した。

```
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt update
sudo apt upgrade
```

LibreOfficeを起動すると、`Warning: failed to launch javaldx - java may not function correctly`とか出るので、下記パッケージを追加でインストール。

- default-jre
- libreoffice-java-common

# Gnomeデスクトップ関係

GNOME Shell拡張機能は、以前はFirefoxを用いてインストールしていたが、FirefoxのSnap化の都合で、できなくなった。今は、Extension Managerを用いてインストールする。
Extension Managerを起動するには、`extension-manager`コマンドを実行する。もしくは、「アクティビティ」から「extension」を検索して、見つかったアイコンをクリックする。

- [Extension Managerを使った拡張機能の追加方法](https://xtech.nikkei.com/atcl/nxt/column/18/02107/062200003/)で紹介されているおすすめの拡張機能から、「Customize IBus」、「Improved Workspace Indicator」。

- [Coverflow Alt-Tab](https://extensions.gnome.org/extension/97/coverflow-alt-tab/) (Alt-Tabによるウィンドウ切り替えが見やすくなるGNOME Shell拡張機能。標準機能だと切り替え画面が小さすぎて見にくかったが、これなら大きくて見やすい。)

- [system-monitor-next](https://extensions.gnome.org/extension/3010/system-monitor-next/): 下記CPUメーター等参照。

# CPUメーター等
CPUやネットワークなどのセンサ表示として、下記は個人的に入れておきたい。

- ~~indicator-multiload (System Load Indicator)~~ 不調なので、やめた。
- system-monitor-next (GNOME Shell拡張機能)
- gkrellm
- libcanberra-gtk-module (gkrellmで使われるモジュール)

## indicator-multiload

Ubuntu 22.04.1現在、表示が不調。表示が異常にちっちゃすぎで時々ピカピカする。
Waylandを使っていると発生するみたい。
バグで、他の人もそうなっているみたい。
使い物にならないので、これはやめた。

- [app indicator top bar flickering 22.04](https://askubuntu.com/questions/1409960/app-indicator-top-bar-flickering-22-04)
- [system load indicator does not show memory usage, ignoring preferences](https://bugs.launchpad.net/ubuntu/+source/indicator-multiload/+bug/1974063)

## system-monitor-next

上記のindicator-multiloadの代替として、system-monitor-nextを使うことにした。
これは、GNOME Shell拡張機能として提供されているもの。

参考URL:
- [system-monitor-next 公式サイト](https://extensions.gnome.org/extension/3010/system-monitor-next/)
- https://kledgeb.blogspot.com/2022/07/ubuntu-2204-230-cpu.html

これを使うには、「libgtop2-dev」が必要なので、事前にインストールしておく(管理者権限で)。

```
% sudo apt install libgtop2-dev
```

続いて、GNOME Extension Magagerを起動して、system-monitor-nextをインストールする。
こちらは、ユーザ権限で実行する。

1. `extension-manager`コマンド(sudoなし)により、GNOME Extension Magagerを起動。
1. GNOME Extension Magagerの「探す」から「system-monitor-next」を検索して、「追加」。
1. 念のため、ログインし直す。

system-monitor-nextの設定を変えてもすぐに反映されないことがある。反映させるには、GNOME Extension Maganerにおいて「system-monitor-next」を一旦無効に切り替えて再度有効にするか、ログインし直すかする。

## gkrellm

gkrellmはそのままではログイン時に自動起動してくれないので、手作業で「自動起動するアプリケーション」に登録する。コマンド名の欄は、単に`gkrellm`だけ。

下記は設定変更のメモ

上部のフレームをマウスの右ボタンクリックするか、マウスでgkrellmをアクティブにして、F1キーを押す。
「全般」->「プロパティ」->「同じ種類のウィンドウの中で最下面にする」にチェックを入れてしまうと、マウスでgkrellmをアクティブにすることができなくなり、設定画面が出せなくなってしまうので注意。もし、これをやってしまった場合は、gkrellmを終了して、~/.gkrellm2/user-configの「below 1」を「below 0」に書き換えて、再度gkrellmを起動する。

- 「全般」->「オプション」の「終了時にウィンドウの位置を保存...」にチェックを入れる。
- 「全般」->「プロパティ」の下記をチェックする。
  - 「貼り付けモードにする」
  - 「タスクとしてタスクバーに格納しない」
  - 「タスクとしてページャに格納しない」

# 日本語LaTeXのインストール
以下のパッケージを入れれば、texlive等、日本語LaTeXを含めて一式が入るみたい。

- texlive-full

あと、Emacs用の入力支援ツールAUC-TeXも入れておく。 国内向けでは野鳥(パッケージ名:yatex)が人気だが、 私はAUC-TeX派。AUC-TeXは、Emacsのpackage.elの方でインストールしようかな。

## 日本語フォント

Tex Live 2020以降は、LuaTeXが標準で原ノ味フォントをPDFファイルに埋め込むようになった。
原ノ味フォントは、フリーの日本語フォントとしては信じられないほど高品質で、LuaTexで生成されるPDFの美しさに十分満足している。

参考URL:

- https://qiita.com/trueroad/items/5030c9460da71065a721

過去には、私は「[LaTeX(dvipdfmx)で生成されるpdfファイルに日本語フォントを埋め込む](https://qiita.com/j0306043/items/5666e67bcbfd099be7d5#latexdvipdfmx%E3%81%A7%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%82%8Bpdf%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80)」みたいなことをしていたが、この設定は、LuaTeXを使う限りは、不要になった。

過去の名残りでpLaTeXを使うこともまだあるので、dvipdfmxによるPDF生成に原ノ味フォントを埋め込むように設定しておく。

```
% sudo kanji-config-updmap-sys haranoaji
```

# VMware

## 起動時の警告

### libaio1

VMwareを起動すると、

```
An up-to-date "libaio" or "libaio1" package from your system is preferred.
```

と言われる。
パッケージlibaio1をインストールすると静かになる。

### proxy.xml

VMwareを起動すると、

```
I/O warning : failed to load external entity "/etc/vmware/hostd/proxy.xml"
```

と言われる。
ファイルが存在しないために出る警告なので、下記のようにして、ダミーのproxy.xmlを置くと静かになる

```
% sudo mkdir /etc/vmware/hostd
% echo -e '<ConfigRoot>\n</ConfigRoot>' | sudo tee /etc/vmware/hostd/proxy.xml
```

下記参考ページによると、このファイルは過去の名残りであり、今のVMwareではもう使われていない。ファイルが存在しないのは正常であるので、警告は無視してよいとのこと。
そのため、ダミーファイルの中身は適当なXMLっぽいものにしておけばよいということになる。

- [VMware emits "I/0" warning when launched from bash shell](https://communities.vmware.com/t5/VMware-Workstation-Pro/VMware-emits-quot-I-0-quot-warning-when-launched-from-bash-shell/td-p/2870381)

### スワップ領域

VMwareを起動すると、

```
VMware Player recommends 8GB of system swap space for the set of currently running virtual machines. 2GB of system swap space is available. For optimum performance increase the amount of system swap space, or configure all virtual machine memory to use reserved host RAM under Preferences.
```

と言われる。

![Screenshot from 2022-09-22 10-21-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210549/649f31d8-ea2e-c5fa-1e10-582194aa9c1b.png)

Ubuntu 22.04のデフォルトのスワップサイズは2GBであるが、VMwareは8GBをおすすめしている。
このおすすめの数字は、仮想マシンに割り当てたメモリサイズにより変わるようだ。
試しに、仮想マシンに8GBを割り当てると、「... recommends 4GB ...」となり、仮想マシンに16GBを割り当てると、「... recommends 8GB ...」となった。割当サイズの1/2なのかもしれない。

英語メッセージが提案している解決法は2つ。1つ目は、システム(Ubuntu側)のスワップサイズを大きくすること。2つ目は、VMwareに「reserved host RAM」(ホストRAMの確保)を設定すること。
十分な容量のメモリが搭載されている今の時代、スワップサイズを大きくする必要性はないと思われるので、2つ目の選択肢の「reserved host RAM」の方を設定することにする。
しかし、VMware PlayerのFile -> Player Preferencesを見ても該当する項目がない。実は、「reserved host RAM」の項目は、VMware Workstationにはあるが、Playerにはない。項目はないが、自分で設定ファイル/etc/vmware/configを直接書き換えることで設定可能。

```
echo -e 'prefvmx.minVmMemPct = "100"' | sudo tee -a /etc/vmware/config
```

参考URL:
- https://communities.vmware.com/t5/VMware-Workstation-Player/Vmware-Player-warns-me-to-enable-quot-reserved-host-RAM-quot-but/td-p/962373

設定すると、警告表示は出なくなる。

## VMwareのvmmon, vmnetのビルドに失敗

Ubuntuのカーネルをアップグレードすると、VMwareのvmmon, vmnetのビルドに失敗することがある。
このVMwareは、UbuntuがホストOS(ゲストOSはWindows)という前提であることに注意。

### 原因

vmmon, vmnetのソースファイルの書き方に古いところがあるため、カーネルが新しくなるとビルドできなくなってしまうため。

### 対策

本来は公式にVMwareが速やかに修正対応してほしいところだが、実際はなかなか動いてくれない。
現実的な対処としては下記の案がある。

1. カーネルのアップグレードを諦めて、元に戻す。すなわち、カーネルをダウングレードする。
1. vmmon, vmnetを修正する。

ここでは、vmmon, vmnetを修正することにより対処する。

参考URL:
- https://communities.vmware.com/t5/VMware-Workstation-Pro/VMware-16-2-3-not-working-on-Ubuntu-22-04-LTS/m-p/2905535#M175399
- https://github.com/mkubecek/vmware-host-modules

[mkubecek氏のリポジトリ](https://github.com/mkubecek/vmware-host-modules)に、vmnetとvmmonの修正版があるので、それを取ってきてインストールする。

```
cd /usr/lib/vmware/modules/source
sudo git clone https://github.com/mkubecek/vmware-host-modules
cd vmware-host-modules
sudo git checkout player-16.2.3
sudo make && sudo make install
sudo tar -cf vmnet.tar vmnet-only
sudo tar -cf vmmon.tar vmmon-only
sudo cp vmmon.tar vmnet.tar /usr/lib/vmware/modules/source/
sudo vmware-modconfig --console --install-all
```

注意点:
- 「player-16.2.3」のところは、ブランチ名。使用しているVMware Playerのバージョンに合わせる。ブランチ名の選択肢は、[mkubecek氏のリポジトリ](https://github.com/mkubecek/vmware-host-modules)のbranchesを確認する。

## VMware Kernel Module Updaterに止められる(2024年1月12日)

起動しようとすると、モジュール(vmmon, vmnet)のコンパイルを要求される。
これ自体はUbuntuのカーネルをアップデートした後などによくあることなので、要求通りコンパイルすればよい。

しかし今回(2024年1月12日)はちょっと違っていた。下記のようなウィンドウが出てコンパイルに進めない。

![Screenshot from 2024-01-12 09-14-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210549/08a07201-a631-be9f-ff35-9d9555957072.png)

```
VMware Kernel Module Updater
Before you can run VMware, several modules must be compiled and
loaded into the running kernel.

GCC
GNU C Compiler (gcc) version 12.3.0, was not found. If you installed
it in a non-default path you can specify the path below. Otherwise 
refer to your distribution's documentation for installation
instructors and click Refresh to search again in default locations.
```

### 原因
GCCのバージョンの相違のため。アップデートしたUbuntuのカーネルが、GCC version 12.3.0でコンパイルされたものであるのに対して、PCにインストールされているGCCがversion 11であるため。

### 対策
PCにインストールされているGCCをversion 12.3.0にアップデートする。
Ubuntu 22.04用のGCC version 12は公式に出ている。
なので、それをインストールすればよい。

参考URL:
- https://packages.ubuntu.com/search?suite=jammy-updates§ion=all&arch=any&keywords=gcc-12&searchon=names
- https://forum.ubuntuusers.de/topic/vmware-player-verlangt-gcc-c-compiler-version-/

```
sudo apt update
sudo apt install gcc-12 gcc-12-base libgcc-12-dev
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 20
sudo update-alternatives --config gcc
```

最後のコマンドは、PCの標準のコンパイラをgcc-12に設定するためのもの。

これにより、いつものようにモジュールのコンパイルが通る。


## VMwareが固まる(フリーズする)

VMwareを使用すると、ある程度の時間(30秒から数十分程度)、異様に動作が重くなることがある。topで見てみると、kcompactd0というプロセスがCPU使用率を食っている。数秒なら我慢もできようが、数十分固まったままでは仕事にならない。
原因はメモリの断片化(による連続するメモリ領域の不足)によるもののようである。

### 原因

kernel-mmのメンテナによると、VMwareがメモリのhigh-order allocation(詳細不明、連続するメモリ領域のこと?)を大量に要求するために発生しているらしい。
緩和策はあるが、根本的な解決策はないらしい。

参考URL:
https://bugzilla.redhat.com/show_bug.cgi?id=1694305

メモリが断片化した状態でVMwareを使うと、(一見メモリに十分な空きがあるように見えても)連続するメモリ領域が不足するので、kcompactd0がメモリをデフラグして、連続するメモリ領域を確保しようとするという流れ。

kcompactd0によりVMwareが固まったときには、下記のコマンドで一時しのぎとしては回復できる。これは管理者権限でキャッシュを開放している。
所詮一時しのぎなので、しばらくするとまた症状が再発する。

```
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
```

Linuxのメモリ管理と確認方法については、下記が詳しい。

参考URL:

- https://blog.natade.net/2019/02/05/組み込みlinux-物理メモリ-buddyinfo/
- https://qiita.com/Kernel_OGSun/items/05f6a0de88aa29e0a212

### 対策

私の対策としては、VMwareを起動する直前に下記を実行しておいて、それからVMwareを起動することにした。
これの対策により、VMwareが固まることなく、すこぶる調子がよくなった。

```
sync
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"
sudo sh -c "echo 1 > /proc/sys/vm/compact_memory"
```

`sync`は念の為。
`drop_caches`の方はキャッシュの開放、`compact_memory`の方はメモリのデフラグをしている。原因となるメモリの断片化を事前にしっかり減らしてからVMwareを起動することにより、症状を緩和するという作戦。

# Inkscape

ドロー系グラフィックソフト。
最新版(の安定版)を使いたいので、InkscapeのPPAを登録した。

```
sudo add-apt-repository ppa:inkscape.dev/stable
sudo apt update
sudo apt install inkscape
```

## 拡張機能: TexText

InkscapeのVer.1.0以降には、LaTeXの式を書く機能が標準で備わっているが、書いた式を再編集はできない。
TexTextを使うと、再編集可能なLaTeXの式が書けるようになる。

公式サイト:
https://textext.github.io/textext/

にしたがって、インストールする。

デフォルトでは、`~/.config/inkscape/extensions/textext/default_packages.tex`に、TeXText用のLaTeXのプリアンブルを設定する。
日本語を使えるようにするため、私は下記のようにdocumentclassに「bxjsarticle」を設定している。
その他、よく使うパッケージを指定しておくとよい。

```
\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard]{bxjsarticle}

\usepackage{amsmath,amsthm,amssymb,amsfonts}
\usepackage{color}
%Use Times (NOT New Roman) clone fonts.
\usepackage{newtxtext}
\usepackage[varg]{newtxmath}
```

# その他よく使うソフトのインストール

インストールしておきたい、私がよく使うソフトのパッケージ名の健忘録

- imagemagick imagemagick-doc (画像編集関係のコマンド群)
- gimp (写真加工が得意なグラフィックツール)
- sbcl sbcl-doc clisp clisp-doc (Common Lispを使いたいことがある)
- python3 python-is-python3 python3-dev python-dev-is-python3 python3-pip (Pythonは3系列でいく)
- ubuntu-restricted-extras (MP3, Timesフォントなど、法的な理由により手動でインストールする必要がある重要ツール)
- vlc (動画再生)
- ldap-utils (研究室のLDAPサーバの情報を確認したいことがある)
- gettext autoconf libtool bison flex tcl-dev tk-dev (野良インストール時に必要になることがある)
- convmv (Macユーザからもらったファイル名がUTF-8-Mac(NFDの変種)なのをNFCに変換するときに使う)
- sshfs (SSH越しにマウントできるのは便利)
- pandoc (マークアップファイルのコンバーター。主に、LaTeXをMS Wordに変換して、英文校正ソフトにかけるために使用している。)
- [LinuxでPDFを編集するためのツール](https://qiita.com/j0306043/items/dceba3e36845076aa5f1)
- nextcloud-desktop (Nextcloudのファイルを同期する)