Ubuntu Linux 20.04 設定メモ

# この記事について

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

# ハードウェア構成

* CPU: Intel Core i7
* メモリ: 32GB
* グラフィックカード: AMD RADEON R9 380X
* SSD/HDD: SSD Plextor M3Pro 128GB × 1個 (OS用), LSI MegaRAID SAS 9265-8i RAID 6 実容量680GB (ホームディレクトリとVMware用), HDD × 2個(バックアップ用)

# ユーザの作成

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

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

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

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

- [Ubuntu 20.04 LTSをインストールした直後に行う設定 & インストールするソフト](https://sicklylife.jp/ubuntu/2004/settings.html)
- [Ubuntu 20.04 LTSのインストール直後にやっておきたいことまとめ](https://linuxfan.info/ubuntu-20-04-basic-settings)

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

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

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

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

# 基本ツール

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

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

## 基本コマンド

パッケージ名のメモ

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

## 設定関係アプリ

パッケージ名のメモ

- synaptic
- gnome-tweaks
- gnome-shell-extension-workspaces-to-dock (これはワークスペースを個人的な好みに設定したいため)

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

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

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

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

にした。

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

続いて、GUIからネットワークの設定をする．
「設定」->「ネットワーク」->「Ethernet」の歯車アイコン->「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`等を書き換える必要ない。便利でありがたい。

# キーバインドの変更

私は変換キーや無変換キーにCtrlやShiftを割り当てている。
親指で操作できて、便利だから。
キーバインドを変更するには、システムをいじる方法と、ユーザごとに設定する方法とがある。
当然ながら、システムをいじるとそのシステムを利用するユーザ全体に影響が及ぶので注意。

## システムのキーバインドの変更

システムのファイルをいじる場合のやり方。
管理者権限が必要。

参考URL:
http://keyamb.hatenablog.com/entry/2016/06/04/130022

いじるファイルは`/usr/share/X11/xkb/symbols/inet`。 バックアップをとっておく。

```
% cd /usr/share/X11/xkb/symbols/
% sudo cp inet inet.org
```

`xkb_symbols "evdev" {`から下の設定を変える。

```
% diff inet.org inet
107,109c107,119
<     key <HKTG>   {      [ Hiragana_Katakana     ]       };
<     key <HENK>   {      [ Henkan                ]       };
<     key <MUHE>   {      [ Muhenkan              ]       };
---
> //    key <HKTG>   {      [ Hiragana_Katakana     ]       };
> //    key <HENK>   {      [ Henkan                ]       };
> //    key <MUHE>   {      [ Muhenkan              ]       };
>     key <CAPS> { [ Control_L, Control_L ] }; // Caps_Lock
>     key <MUHE> { [ Shift_L ] }; // Muhenkan
>     key <HENK> { [ Control_L, Control_L ] }; // Henkan_Mode
>     key <HKTG> { [ BackSpace ] }; // Hiragana_Katakana
>     key <RALT> { type[Group1] = "ONE_LEVEL", symbols[Group1] = [ Hiragana_Katakana ] }; // Alt_R
>     key <COMP> { [ NoSymbol ] }; // Menu
>     key <RCTL> { [ Muhenkan ] }; // Control_R
>     key <AB11> { [ underscore, underscore ] }; // backslash underscore
>     modifier_map Control { <HENK>, <CAPS> };
> 
```

`<RALT>`の設定が複雑なのは、修飾キー(元のAlt_R)としての機能を無効にするため。

## ユーザごとのキーバインドの変更

私は試していないが、ユーザ側の設定のみでキーバインドは変更できるらしい。
方法を下記にメモしておく。

ディレクトリを作る。

```
% cd ~
% mkdir .xkb
% mkdir .xkb/keymap
% mkdir .xkb/symbols
```

`~/.xkb/symbols/my_keymap_at109jp`というファイルを作り、内容を下記のようにする。

```
partial modifier_keys
xkb_symbols "my_keys" {
  replace key <CAPS> { [ Control_L, Control_L ] }; // Caps_Lock
  replace key <MUHE> { [ Shift_L ] }; // Muhenkan
  replace key <HENK> { [ Control_L, Control_L ] }; // Henkan_Mode
  replace key <HKTG> { [ BackSpace ] }; // Hiragana_Katakana
  replace key <RALT> { [ Hiragana_Katakana ] }; // Alt_R
  replace key <COMP> { [ NoSymbol ] }; // Menu
  replace key <RCTL> { [ Muhenkan ] }; // Control_R
  replace key <AB11> { [ underscore, underscore ] }; // backslash underscore
  modifier_map Control { <HENK>, <CAPS> };
};
```

`setxkbmap -print`の実行結果を、`~/.xkb/keymap/my_kbd`に入れる。

```
% setxkbmap -print > ~/.xkb/keymap/my_kbd
```

`~/.xkb/keymap/my_kbd`のxkb_symbolsの行に`+my_keymap_at109jp(my_keys)`を追加する（下記の例のように）。

```
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+jp+us:2+inet(evdev)+my_keymap_at109jp(my_keys)"	};
	xkb_geometry  { include "pc(pc105)"	};
};
```

あとは、ログイン時に下記のコマンドを実行すればよいはずなのだが、まだ試していないのでうまく行くかどうか不明。

```
xkbcomp -I$HOME/.xkb $HOME/.xkb/keymap/my_kbd $DISPLAY
```

# Opera

ウェブブラウザOperaのstable版PPAをリポジトリに追加してインストール。私はOpera派。

Operaのキーを追加

```
wget -qO- https://deb.opera.com/archive.key | sudo apt-key add -
```

Operaのstable版PPAをリポジトリに追加

```
sudo add-apt-repository "deb [arch=i386,amd64] https://deb.opera.com/opera-stable/ stable non-free"
```
インストール

```
sudo apt install opera-stable
```

# 日本語入力

日本語Remix版をインストールしたので、日本語入力そのものはできるようになっている。
半角全角キーで日本語入力のオンオフを切り替えることができる。
悪名高きCtrl+Spaceによる日本語入力のオンオフもデフォルトで無効になっている。

## MozcのPPAを登録

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

# Emacs

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

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

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

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

```
(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`)で選んだのにもかかわらず、その直後の候補に並ぶのは、選択したディレクトリの一つ上のファイル・ディレクトリのまま、という不具合がある。
これが発生するのはEmacs 26の場合で、Emacs 27ではバグ修正されているらしい。
対処法等は、下記URL:

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

私はM-TABではなく、M-fに割り当てた。
UbuntuのEmacsのバージョンが26のうちは、これでやり過ごすことにする。
Emacs 27になれば、直っているだろう。

```
(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))))
```

### minibuffer-force-completeとの齟齬

Emacs 26のicompleteでは、M-.(`icomplete-forward-completions`)やM-,(`icomplete-backward-completions`)による候補表示段階では、`completion-ignored-extensions`変数に従ってバックアップファイル等が候補から除去される。
それなのに、`minibuffer-force-complete`により選択確定すると、選択した覚えのないバックアップファイルが選択されてしまう誤動作が発生した。
これは、`minibuffer-force-complete`側は、バックアップファイル等も候補に残しているために発生する。
バックアップファイルを候補から除去するかしないかの方針が、icomplete側と`minibuffer-force-complete`側とで合っていない(齟齬がある)のが原因なので、対策としては、方針を一致させればよい。
今回は、`minibuffer-force-complete`においても、バックアップファイルを候補から除去するように設定した。

参考URL:

- http://epian-wiki.appspot.com/wiki/Memo/20100828085804/Emacs:find-file時の一覧にバックアップファイルを表示しない
- https://stackoverflow.com/questions/1731634/dont-show-uninteresting-files-in-emacs-completion-window

```
(defadvice completion-file-name-table (after ignoring-backups-f-n-completion activate)
  "filter out results when they match completion-ignored-extensions."
  (let ((res ad-return-value))
    (if (and (listp res)
             (stringp (car res))
             (cdr res)) ; length > 1, don't ignore sole match
        (setq ad-return-value
              (completion-pcm--filename-try-filter res)))))
```

## edit-server.el

ChromeのtextareaにEmacsから書き込む機能。
読むときはブラウザを使うが、textareaに書くときだけはEmacsで書きたいという人にお勧め。
GmailのメールをEmacsから書きたいときに重宝している。
(別途gmail-message-modeというものあるらしいが、私は使っていない。)

### 準備

準備手順概要:
- Chromeに「Edit with Emacs」の拡張機能をインストール
- Emacsに「edit-server.el」をインストール。下記の初期設定をする。

詳しくは公式サイトを参照:
https://www.emacswiki.org/emacs/Edit_with_Emacs

edit-server.elはMELPAからインストールする。
私は、設定ファイルに、下記のようなhookを設定した。

```
(when (require 'edit-server nil t)
  (edit-server-start)
  (add-hook 'edit-server-start-hook
            (lambda ()
              (when (string-match "mail.google.com" (buffer-name))
                ;; Emulating plain text by PRE tag.
                (goto-char (point-min))
                (insert "<PRE>\n")
                (save-excursion
                  (insert "\n</PRE>\n"))))))
```

Gmailのメール本文のtextareaの場合、EmacsでHTMLのテキストを書くのが基本操作らしいが、私はプレーンテキストしか使わないつもりなので、mail.google.comを検出して、PREタグで囲むことで、プレーンテキストを模倣している。

### 使い方

あらかじめEmacsとChromeを起動しておく。
Chromeのtextareaに「edit」というアイコンが付いているので、それをクリックするとEmacsのフレームが起動する。
Emacsで書いたら、C-c C-cする。Emacsのフレームが閉じて、Chromeのtextareaに今書いたテキストが挿入される。

# Mew

標準パッケージよりも最新安定版の方を使いたいので、 そちらを野良インストールすることにした。
http://www.mew.org/ja/git/
に書かれている方法で、インストールした。 具体的には、作業用のディレクトリを作って、そこで下記のようなことをした。

```
% git clone git://github.com/kazu-yamamoto/Mew.git
% cd Mew
% git pull
% make distclean
% ./configure
% make
% sudo make info
% sudo make jinfo
% sudo make install
% sudo make install-jinfo
```

あと個人的な好みではあるが、現代において.elcファイルはもう不要(あるとかえってチューニングの足かせになる)と思うので、.elcファイルは手動で消して おいた。

```
% cd /usr/local/share/emacs/site-lisp/mew
% sudo rm *.elc
```

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

- stunnel4 (セキュアにPOPするため)

## Mewでメール本文を検索 HyperEstraier

Mewは基本機能として、grepによるメール検索ができるが、検索対象がSubjectやToなどのヘッダフィールドに限られており、メール本文を検索することができない。メール本文を検索するには、拡張機能のHyper Estraierを使うと良い。 (Mewのマニュアルにある、「日本語の全文検索をしたい場合は、"mg" をインストール」という話は古いので、mgは使わないこと。) Ubuntuの場合、hyperestraierパッケージをインストールすれば、依存するものもすべて入る、、、はずだったが、このパッケージは16.04(Xenial)を最後にその後は提供されなくなった。以後は自力で野良インストールするしかない。もう古いソフトなので、メンテしてくれる人がいなくなってしまったようだ。

### HyperEstraierの野良インストール

HyperEstraierは強力な全文検索エンジン。

[HyperEstraier公式サイト](https://dbmx.net//hyperestraier/intro-ja.html)
によると、下記のライブラリに依存しているので事前にこれらをインストールしておく必要がある。

- libiconv : 文字コード変換。バージョン1.9.1以降（glibcにも同梱）。
- zlib : 可逆データ圧縮。バージョン1.2.1以降。
- QDBM : 組み込み用データベース。バージョン1.8.75以降。

Ubuntu用パッケージ名を推測すると、

- libiconvはglibcに入っているようなので、Ubuntu用パッケージ名は、libc6-dev
- zlibのUbuntu用パッケージ名は、zlib1g-dev
- QDBMのUbuntu用パッケージ名は、libqdbm-dev

あたりをインストールしておけばよさそう。

上記の公式サイトから、ソースのtarファイル(hyperestraier-1.4.13.tar.gz)をとってきて、展開して、野良インストールする。

```
./configure
make
make check
sudo make install
```

インストール完了

### MewからHyperEstraierを利用する

初めて検索する前に、mewestコマンドを実行して検索用インデックスを作る。Mew側の設定は特にない。 Mewのマニュアルに「検索エンジンの初期値は、最初に見つかった利用できるものに自動的に設定されます。」となっているため。 なお、検索用インデックスは自動更新されないので、ユーザ権限のcronで毎時間mewestコマンドを実行することにする。 検索方法は、Mewのマニュアルにあるが、私がよく使うものは下記。

- 「C-u k /」: フォルダを指定して、その中のメールを検索する。
- 「k /」: すべてのメールを検索する。

試したところ、ISO-2022-JPのプレーンテキストのメールだけでなく、Base64エンコードされたUTF8メールでも、quoted-printableのメールでもちゃんと検索できた。しかも検索が速い。私の持っている10万通以上のメールの中から、体感的にはさくっと検索結果が出る。すばらしい。

### +trashフォルダの検索

しばらく使って気がついたこと。+trashフォルダのメールが検索できない。変だなと思って、mewestスクリプトを見てみたところ、検索用インデックス作成において、trashが除外されてた。私は+trashフォルダも検索してほしいので、mewestを書き換えて対応した。私は、日々わんさか来る業務メールをチラ見して、自分に関係なさそうなものはどんどん+trashフォルダに放り込んでいき、後で必要になったら検索すればいいや、というスタイルで運用しているので、+trashフォルダも検索したい。

mewest変更点: trashの代わりに、spamを除外することにした。

```
--- mewest.org	2020-08-17 15:13:52.094120192 +0900
+++ mewest	2020-08-17 15:16:25.266332983 +0900
@@ -160,7 +160,7 @@
 # "[0-9]*" matches both "123" and "234.mew".
 
 ${FIND} "`path_conv \"${TGTDIR}\"`" \
-  -type d -name "trash" -prune -o \
+  -type d -name "spam" -prune -o \
   -type d -name ${INDEXDIR_ORG} -prune -o \
   -type d -name ${INDEXDIR_REPLICA} -prune -o \
   -type f \( -name "[0-9]" -o -name "[0-9]*[0-9]" -o -name "[0-9]*${SUFFIX}" \) -print |\
```

## Mewの対話

Mewには対話という機能がある。 これを利用するには、下記のパッケージをインストールする。

- sqlite3
- ruby-sqlite3

対話用インデックスを作るコマンドはcmew。対話用インデックスは自動更新されないので、ユーザ権限のcronで毎時間cmewコマンドを実行することにする。

# 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標準パッケージにはないが、オフィシャルページに[PPAを追加する方法](https://github.com/clvv/fasd/wiki/Installing-via-Package-Managers)が載っていたので、それに従ってインストールした。

```
sudo add-apt-repository ppa:aacebedo/fasd
sudo apt-get update
sudo apt-get install 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してくれる。

# ja_JP.EUC-JP

参考URL
http://d.hatena.ne.jp/orangehat/20090421

過去の私の資産(遺産?)にはEUCで書かれたものが多いので、EUC-JPのロケール を使いたい。しかし、標準インストールしただけのUbuntuでは、EUC-JPロケールは使えない。現在使えるロケールは、「locale -a」で確認できる。

```
% locale -a | grep 'ja_JP'
ja_JP.utf8
```

ロケールを追加するコマンドは、「locale-gen」。指定できるロケールは、 `/usr/share/i18n/SUPPORTED`ファイルに書かれているもの。確認すると、 ja_JP.EUC-JPというロケールが書かれているので、これをlocale-genに指定す る。

```
% grep -i 'ja_JP' /usr/share/i18n/SUPPORTED
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
% sudo locale-gen ja_JP.EUC-JP
Generating locales...
  ja_JP.EUC-JP... done
Generation complete.
```

再度、「locale -a」すると、ja_JP.EUC-JPではなく、ja_JP.eucjp(ハイフンがない)と表示される。

```
% locale -a | grep 'ja_JP'
ja_JP
ja_JP.eucjp
ja_JP.utf8
```

実際にロケールを指定して、ロケール依存コマンドを試してみた感じでは、 ja_JP.EUC-JPでも、ja_JP.eucjpでも大丈夫のようだ。

# Samba

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

- samba

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

```
% diff smb.conf.20200819 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/`においた。
この中で、pzstdはzstd圧縮の並列処理版。Ubuntuには標準で入っている(と思う)。
tarの圧縮にpzstdを使うときには、`--use-compress-prog=pzstd`というオプションを指定すればよい。
Ver.1.31以降のtarであればzstd圧縮のオプションを標準で持っているが、Ubuntu 20.04のパッケージのtarはVer.1.30なので、このようにしなければならない。

```
#!/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/にユーザ名のファイルが置かれる。

# a2ps
コマンドでテキストファイルをプリンタに印刷したいことがある。 そのようなときに使うコマンドがこれ。一応日本語のEUCコードには対応している。`a2ps --list encodings`すると、対応しているコードを確認できる。それによると、オプションに`--encoding=euc-jp`を指定すると，EUC-JPコードの日本語テキストを扱うことができる。例えば，

```
% a2ps --encoding=euc-jp foo.txt
```

のようにすれば，EUC-JPコードのテキストファイルfoo.txtを， デフォルトプリンタに印刷できる。

```
% a2ps --encoding=euc-jp foo.txt -o foo.ps
```

のようにすれば，EUC-JPコードのテキストファイルfoo.txtを，PSファイル foo.psに変換できる。

UTF(ユニコード)に対応していないことは残念ではあるが， nkf等でEUC-JPに変換しながらa2psを使えば良いので，日本語を 扱う上では困らない。 今後はこの作戦で行くことにする。

実は，UTFに対応したa2psのようなものとして，mpageコマンドがある。 しかしUTFコードの日本語テキストをmpageで変換したPSファイルは， evinceやghostscript上ではちゃんと表示されるのに， いざ印刷するとプリンタ側でエラーとなり弾かれてしまう。 プリンタはしっかりポストスクリプト対応プリンタなのに。 mpageが生成したPSファイルの中を見ると， 生の日本語テキストが含まれている。これが良くないのかもしれない。 解決法としては、そのPSファイルをps2pdfコマンドでPDFに変換すると、 evinceなどのPDFビューワを使って印刷できるようになる。

逆に、a2psで生成したPSファイルをps2pdfコマンドでPDFに変換しようとすると、 `GPL Ghostscript 9.50: Unrecoverable error, exit code 1`してしまう。不思議だ。

# LibreOffice

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

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

LibreOfficeを起動すると、`Please ensure that a JVM and the package libreoffice-java-common is installed.`とか出るので、下記パッケージを追加でインストール。

- default-jre
- libreoffice-java-common

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

- indicator-multiload (System Load Indicator)
- gkrellm
- libcanberra-gtk-module (gkrellmで使われるモジュール)

## gkrellm

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

下記は設定変更のメモ

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

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

- texlive-full

昔は日本語対応xdvi(パッケージ名はxdvik-ja)をインストールしていたが、今となっては、インストールしない。
ビューワとしては、xdviではなく、PDFをevinceで見ればよい。

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

## LaTeX(dvipdfmx)で生成されるpdfファイルに日本語フォントを埋め込む

参考URL http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?OTF
参考URL http://www.fugenji.org/~thomas/texlive-guide/index.html

日本語フォントをPDFに埋め込みたいので、[モリサワフォント](https://www.morisawa.co.jp)と[ヒラギノフォント](https://www.screen-hiragino.jp)を購入した。
下記はモリサワフォントの場合であるが、ヒラギノフォントの場合も以下の流れは同じ。

まずは、フォントのインストール。/usr/share/fonts/opentypeの下に morisawaというディレクトリを掘り、そこにフォントファイルを入れる。 フォントキャッシュのクリアもする。

```
% ls /usr/share/fonts/opentype/morisawa
A-OTF-FutoGoB101Pro-Bold.otf   A-OTF-MidashiGoPro-MB31.otf
A-OTF-FutoMinA101Pro-Bold.otf  A-OTF-MidashiMinPro-MA31.otf
A-OTF-GothicBBBPro-Medium.otf  A-OTF-RyuminPro-Light.otf
A-OTF-Jun101Pro-Light.otf
% sudo fc-cache -f -v
```

TeX Liveには、始めからモリサワフォント用のmapファイルが用意されている。 そのため、コマンド一発で、モリサワフォントを埋め込む設定ができる。 とてもありがたい。

モリサワフォントをPDFファイルに埋め込むように設定する。

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

(フリーのフォントを埋め込みたい場合には、morisawaの代わりに、ipaや ipaexが指定できる。)

dvipdfmxによるPDF生成には埋め込まれるようになった一方で、dvipsによるPS 生成は文字化けするようになった。まあ、よしとする。

ついでに、kanji-config-updmap-sysコマンドの他の使い方例を以下に残しておく。

フォントを埋め込まないように設定する。

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

現在の設定と選択可能候補を確認する。

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

埋め込みの設定の後，何らかの理由で一時的にフォントを埋め込まずにPDFを作りたい ときには，-fオプションでcid-x.mapを指定すればよい。例えば 以下のようにする。

```
% dvipdfmx -f cid-x.map foo.dvi
```

一時的に埋め込むフォントを変えてPDFを作りたいときには、 -fオプションでptex-\*.mapを指定する。 「\*」のところには、上記の方法で確認した選択可能候補の名前が入る。 例えばヒラギノにしたいときには、下記のようにする。

```
% dvipdfmx -f ptex-hiragino-pron.map foo.dvi
```

# AppArmorのアンインストール

AppArmorは、ファイルアクセスを監視するセキュリティ機能。
私の場合、ホームディレクトリのパスが標準的でないため、 AppArmorでブロックされやすい。
セキュリティ的には下がってしまうが、AppArmorを無効化し、アンインストールした。

```
% sudo systemctl stop apparmor
% sudo systemctl disable apparmor
% sudo apt purge apparmor
```

# 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が固まる(フリーズする)

VMwareを使用すると、ある程度の時間(30秒から数十分程度)、異様に動作が重くなることがある。topで見てみると、kcompactd0というプロセスがCPU使用率を食っている。数秒なら我慢もできようが、数十分固まったままでは仕事にならない。
当初は、透過的なHugePages(transparent hugepages)の仕業かと思ったが、透過的なHugePagesの設定をいじって無効化しても症状が再発することから、どうやら透過的なHugePagesは関係ない、と結論した。
原因はメモリの断片化(による連続するメモリ領域の不足)によるもののようである。

## 原因と対策

### 原因

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を起動することにより、症状を緩和するという作戦。

## 透過的なHugePagesを無効化しても、VMwareのフリーズ対策には関係ない

過去の[Ubuntu 16.04のときには効果があった](https://www.kono.cis.iwate-u.ac.jp/~hiki2017/?平山%3A%3AUbuntu+Linux+16.04+64ビット版#l7)が、今は
透過的なHugePagesを無効化しても、VMwareのフリーズ対策には関係ない、と判断した根拠を記す。

Ubuntuのデフォルトでは、下記「透過的なHugePagesの無効化」にもあるように、透過的なHugePagesの設定は、madviseになっている。madviseは、明示的に要求された場合のみ有効になるという設定。つまり、デフォルトの状態で、すでにほぼ無効化されている。
で、実際に、VMwareがフリーズしているときにメモリの使用状況を確認した結果が下記。

```
% cat /proc/meminfo | grep -i HugePages
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
```

AnonHugePagesが0のままなので、透過的なHugePagesは使われていない。
これより、Ubuntu 20.04のデフォルトでは、VMwareは透過的なHugePagesを使っていない、と結論した。

# 透過的なHugePagesの無効化

VMwareのフリーズ対策には関係なかった(効果がなかった)が、将来のためや試してみたい人のために、透過的なHugePagesの無効化の設定方法を書き残す。

参考URL: 

- https://kb.juniper.net/InfoCenter/index?page=content&id=KB35206&actp=METADATA
- https://gist.github.com/shino/5d9aac68e7ebf03d4962a4c07c503f7d
- https://www.belbel.or.jp/opensuse-manuals_ja/cha-tuning-memory.html

(「透過的」でない方の標準の)HugePagesは、大容量メモリを消費するアプリケーションのメモリ管理を効率よくするために、従来よりも大きなサイズのページを使う仕組み。 *透過的な* HugePagesは、動的に大きなサイズのページを使うようにするための機能らしいが、実行中にメモリー割当ての遅延が生じる欠点があるらしい。 具体的には、標準の4Kbのページを大きなサイズのページに変換(defrag)していて動作が重くなるらしい。 

まずは、現在の設定を確認する。 madviseが角括弧で囲まれているので、madviseが選択されている。
madviseは、明示的に要求された場合のみ有効になるという設定。

```
% cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
% cat /sys/kernel/mm/transparent_hugepage/defrag
always defer defer+madvise [madvise] never
```

参考URL: カーネルのドキュメント
https://www.kernel.org/doc/html/latest/admin-guide/mm/transhuge.html

上記のファイルの中身を書き換えれば、一時的には透過的なHugePagesを無効にできる。しかし、一時的なものなので、再起動すると元に戻ることに注意。 永続的に設定するには、起動ファイルを修正する必要がある。

(15.04以降の)Ubuntuは起動システムがsystemdなので、それに沿った方法にしないといけない。
`/etc/systemd/system/disable_transparent_huge_pages.service`というファイルを新規に作り、内容を下記にする。

```
[Unit]
Description = Disable transparent huge pages

[Service]
Type = oneshot
User = root

ExecStart = /bin/sh -c "/bin/echo never | /usr/bin/tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart = /bin/sh -c "/bin/echo never | /usr/bin/tee /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy = multi-user.target
```

これをOS起動時に読むように設定する。

```
% sudo systemctl enable disable_transparent_huge_pages.service
```

再起動後に、設定を確認する。ちゃんとneverになった(無効化された)。

```
% cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
% cat /sys/kernel/mm/transparent_hugepage/defrag
always defer defer+madvise madvise [never]
```

# Inkscape

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

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

## ありがちな問題と対処法

参考URL:

- [旧バージョンのInkscapeファイルをInkscape 1.0 に変換したら、Display unitsが変更できない問題とその対処法](https://qiita.com/j0306043/items/b49cad4c701fdaa3effe)

## 拡張機能: TexText

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

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

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

# Gnomeデスクトップ関係

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

# HDD/SDDのSMART情報

HDD/SDDの健康状況の確認をしたいことがたまにある。
そのときに便利なツールが下記。

- smartmontools
- gsmartcontrol

smartmontoolsがSMART情報を確認するためのパッケージで、それをインストールするとsmartctlというコマンドが使えるようになる。
gsmartcontrolはそのコマンドのGUIフロントエンド。

使用例:
https://ubuntuapps.net/blog-entry-279.html

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

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

- imagemagick imagemagick-doc (画像編集関係のコマンド群)
- gimp (写真加工が得意なグラフィックツール)
- sbcl sbcl-doc (高速なCommon Lisp)
- clisp clisp-doc (GNUのCommon Lisp)
- python3 python-is-python3 python3-dev python-dev-is-python3 (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に変換するときに使う)