Fumiya_Senoo’s diary

日々の気になったこと、役立ったことを記録しています

Pomera DM250 に Linux をインストールして、 i3status を導入したのに、メモリ使用量が表示できなかった

原因はわかった。

解決方法も分かった。が、解決はしていない。(面倒くさかった)

DM 250 に Linux を導入する

参考にしたページだけ。

Debian on Pomera DM200/DM250 – 記録

pomera DM250 の Linux 化のメモ - Qiita

i3status 導入したのに、メモリ資料量が表示できなかった件

事象

メモリ使用量が「can't read memory」と表示されている。

原因

/proc/meminfo を見ると、 MemAvailable の行が存在しなかった。

解決方法

王道の解決方法は Linux カーネルをビルドしなおすことになるはず。が、この解決方法はちょっと現実的ではない(/proc/meminfo の表示内容を変更したいだけのために Linux カーネルをビルドするのはいくら何でも大仰すぎる)。

現実的な解決方法は i3status 以外を使用する。

調べると、いろいろ存在する(conky とか)。が、簡単に自作できるようなので、それでいもいいかなと。

i3status のふるまいと代替物の自作

i3status コマンドを実行してみるとわかるが、定期的に1行分標準出力に文字列を表示するだけのアプリケーションである。つまり、同等なものを作ればよい。

例えば、シェルスクリプトで書くなら以下のような感じ。(実際には echo の部分は表示したい内容)

#!/usr/bin/env bash

num=0
while :
do
    num=`expr $num + 1`
    echo "$num"
    sleep 5
done

おまけ

どうやって原因を特定したか

i3status のソースコード(i3status/print_mem.c at main · i3/i3status · GitHub)を見ると、 /proc/meminfo が開けない(read 出来ない) or /proc/meminfo の中に特定の6行が表示されていないと「can't read memory」と表示してしまう。

通常ユーザーで、

cat /proc/meminfo

してちゃんと表示されるので、 read できないはないだろう。で、 /proc/meminfo を見てみると↑に書いた原因であった。

そして、 /proc/meminfo を表示する部分のソースコード(linux/meminfo.c at master · torvalds/linux · GitHub)を見る限り、普通、 MemAvailable の行が表示されるはずなのだが、表示されていなかった。

結局、困ったときはソースコードをあたることになるんだなぁ。こういう時の原因追及のしやすさがオープンソースのいいところよね。

DM250 Linux 環境での Tips

オリジナル環境で生成されるテキストファイルの形式

UTF-8 の場合 BOM 付きであった。 hexdump 最強。(そもそも設定で ShiftJIS か UTF-8 かは選べます)

オリジナルの環境と Linux 環境でファイルを共有する

Linux 側は /mnt/sd/ にマウントされている。オリジナル側は SD カードに保存すればよい。

US 配列で認識させる

/etc/default/keyboard を編集しても、なぜか日本語配列で認識されてしまったので、 .zshrc に以下を追加した。

setxkbmap -layout us