2015年5月18日月曜日

jessie - systemd - journalctl - ANSI escape

jessie - systemd - journalctl - ANSI escape

wheezy から jessie に dist-upgrade したマシンで、sudo journalctl -l とかすると、systemd は bold 表示する目的で ANSI エスケープシーケンス使っているのがうまく解釈されずに生で見えてしまう。


これ、読みづらいので何とかすべく調べてみた。

$ sudo journalctl -l
だと上記画像の状態。調べてみると SYSTEMD_PAGER という環境変数に "less -j4aR" 設定するとかあったので、ためしに設定してみる

$ sudo -s
# env SYSTEMD_PAGER='less -j4aR' journalctl -l


じゃぁ、"lv -c" でもいけるよね.. ということで試したら問題ない。

そこで、一般ユーザーの.bachrc に export SYSTEMD_PAGER='lv -c' と書いて(ターミナル起動しなおして)みて、sudo journalctl -l すると、だめ..

なぜだかしばらく悩んで.. この SYSTEMD_PAGER 環境変数が引き継がれてないことに気づいた..

これ.. sudo だ..

sudo, sudoers

/etc/sudoers を読んでみると、冒頭に、

Defaults env_reset

という記述がある。そこで、man sudoers してみると、env_keep オプションが見つかる。現状の sudo の状況を確認するには、root ユーザで sudo -V してみろという記述も見つかったので、やってみる。

$ sudo -s
# sudo -V
[...]

状況確認ができたので、SYSTEMD_PAGER 環境変数を保護するようにしてみる。ちなみに、まずい環境変数設定されてぼこぼこにされるのはみんな嫌だと思うので、冒頭の Defaults env_reset を無効にするようなことはやってはいけない。

visudo

/etc/sudoers ファイルは visudo というコマンドで編集する。これはロックがかかったり、万一、記述ミスがあったりすると、sudo できなくなってしまうので、こういう状況を避けるためにチェッカーが動いてくれる優れものだ。

$ sudo visudo

してみると、vi じゃなくて nano が起動してしまった..





nano を使い慣れている方はそのまま編集されるといいと思うのだが、僕はなれてないので、これを vim に替えたい。

そのまま nano を終了するには、末尾の案内にしたがって  Ctrl - X をタイプする。



変更保存するか聞かれるので "N" で保存しないを選択..

以前の Debian だと、環境変数 EDITOR とかで切り替えられたのだが、jessie だと、EDITOR 読んでもらえないみたいなので、update-alternatives で /usr/bin/editor を切り替えないとだめみたい。

まず状況確認..


$ update-alternatives --display editor
editor - 自動モード
  リンクは現在 /bin/nano を指しています
/bin/ed - 優先度 -100
  スレーブ editor.1.gz: /usr/share/man/man1/ed.1.gz
/bin/nano - 優先度 40
  スレーブ editor.1.gz: /usr/share/man/man1/nano.1.gz
/usr/bin/vim.basic - 優先度 30
  スレーブ editor.1.gz: /usr/share/man/man1/vim.1.gz



$ sudo update-alternatives --config editor
alternative editor (/usr/bin/editor を提供) には 4 個の選択肢があります。

  選択肢    パス              優先度  状態
------------------------------------------------------------
* 0            /bin/nano            40        自動モード
  1            /bin/ed             -100       手動モード
  2            /bin/nano            40        手動モード
  3            /usr/bin/vim.basic   30        手動モード
  4            /usr/bin/vim.tiny    10        手動モード

現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 3
 
update-alternatives: /usr/bin/editor (editor) を提供するためにマニュアルモードで /usr/bin/vim.basic を使います


これで visudo を呼ぶと vim で編集できるようになる。

$ sudo visudo





OK.
man sudoers して、env_keep を使って SYSTEMD_PAGER をリセット対象から外すように指定してみる。





$ env SYSTEMD_PAGER='lv -c' sudo journalctl -l



OK.

これで一般ユーザ の(rootじゃないよ) ~/.bashrc に

exports SYSTEMD_PAGER='lv -c'

と 書いておくと次からはなにも考えずに sudo journalctl -l しても ANSIエスケープシーケンス見えてしまうことはない && bold (フォントの関係などで bold できないばあいは一段明るい色で強調表示される)表示される。はず。

------

PS.


vim をカラフルにするには、(ここの画像のは jellybeans.vim)カラー設定を書くかいただいてきて、~/.vim/colors に *.vim ファイルを保存するか ln -s しておく。

jellybeans の場合、
https://github.com/nanotech/jellybeans.vim から git clone するか http で zip をもらってきて unzip する。

で、 ~/.vimrc に
set background=dark
colorscheme jellybeans
syntax on
filetype on

みたいにかいておくとできる。

0 件のコメント:

コメントを投稿