原因はわかった。
解決方法も分かった。が、解決はしていない。(面倒くさかった)
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