この記事について
この記事は、Ubuntu Linux 20.04に関する個人的なメモです。
私が自分のパソコンでUbuntuを使っているため、 ソフトのインストールの記録などをメモしています。
私の他にもLinuxを使う人の役に立つと思い、メモを公開しています。
なお、私がインストールしたのは、Japanese Teamが配布している日本語Remix版です。
日本語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がログインできなくなったときに、ダミーユーザでログインことができる。
インストールに際して参考にしたページ
これに書いてあることは、基本的に本記事では割愛する。
日本語ディレクトリを英語に
デスクトップとかダウンロードなど日本語名のディレクトリが、ホームディレクトリに作られている。日本語ディレクトリだと、何かと不便なことが多いので、英語ディレクトリにしておく。コマンドは下記の通り。
$ 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:
ちょっとだけ便利になる小技は、日本語入力のときに、カーソルを赤色にすること。これをすると、モードラインまで視線を動かさずに、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:
私は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公式サイト
によると、下記のライブラリに依存しているので事前にこれらをインストールしておく必要がある。
- 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を追加する方法は載っていたが、あえてオフィシャルサイトに書かれている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を追加する方法が載っていたので、それに従ってインストールした。
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に埋め込みたいので、モリサワフォントとヒラギノフォントを購入した。
下記はモリサワフォントの場合であるが、ヒラギノフォントの場合も以下の流れは同じ。
まずは、フォントのインストール。/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が速やかに修正対応してほしいところだが、実際はなかなか動いてくれない。
現実的な対処としては下記の案がある。
- カーネルのアップグレードを諦めて、元に戻す。すなわち、カーネルをダウングレードする。
- 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氏のリポジトリに、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氏のリポジトリの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のときには効果があったが、今は
透過的な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:
拡張機能: TexText
InkscapeのVer.1.0以降には、LaTeXの式を書く機能が標準で備わっているが、書いた式を再編集はできない。
TexTextを使うと、再編集可能なLaTeXの式が書けるようになる。
公式サイト:
https://textext.github.io/textext/
にしたがって、インストールする。
Gnomeデスクトップ関係
- 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に変換するときに使う)