zsh

Linux Zaurus(例えばSL-C760)では、カーネルから各ジョブへ、サスペンド時にSIGSTOPシグナルを、サスペンド復帰時にSIGCONTシグナルを発するようだ。

ところがembeddedkonsole-ja上で走らせるソフトにはそもそも使用中にSIGSTOP&SIGCONTシグナルが発せられるということを想定していないソフトが多い。

こういったソフトの場合、embeddedkonsole-ja上で走らせたままサスペンドさせると、そのソフトはサスペンド復帰時にバックグランドジョブへ入ってしまう。

これはLinux ZaurusのSIGSTOP問題などと呼ばれている。

これは例えば、標準で入っているviコマンドで手軽に試せる。embeddedkonsole-ja上でviを立ち上げたまま本体をサスペンドさせる。サスペンドから復帰すると、立ち上がっているはずのviの姿はなく、プロンプト画面になっている。これはviが消えたのではなく、バックグランドジョブに入っただけ。試しに、

bash-2.05$ jobs

してみるとバックグラウンドに回っているviを確認することができる。そしてここでフォアグラウンドへ戻そうと、

bash-2.05$ fg %1

などとしても、表示が崩れてしまってどうしようもない。

この問題の対策がいくつかある。
1.サスペンド前に問題が起きそうなソフトを終了させる。
2.embeddedkonsole-jaを立ち上げたら 'set +m' を実行する。
3.各ソフトごとにaliasを設定して、alias内でソフト起動前に 'set +m' を、
  ソフト終了後に 'set -m' を実行させる。
4.シェルをbashではなく、SIGSTOP問題へ対処できるものへ替える。
5.カーネルをSIGSTOP問題を解決したものへ替える。
など。これらの方法は全て自己責任。

ちなみに後ろへいくほど難易度が高い。自分は1と3と4をごちゃ混ぜにして使っている。

上述の4に述べたシェルには、例えばzshやfdshがある。zshは操作性がいいので、ここではzshをインストールする。zshのipkgパッケージは多くの方が配布されているが、自分が日常的に利用させていただいているのはこちらのもの。

たたかうデジタリアン
http://www.t12.jp/~ryuta/

こちらのサイトの→「misclab」→「いろいろクロスコンパイル」とたどったところにあるzsh_4.0.6-1_arm.ipkをダウンロードし、インストール。

ただこのままだと、相変わらずデフォルトシェルでbashが立ち上がる。そこで、embeddedkonsole-jaのデフォルトシェルを切替える設定をする。

具体的には、任意のテキストエディターで '/home/QtPalmtop/qpe.sh' を開き、'export SHELL=/bin/bash'という行を見つけて、bashの代わりにzshをフルパスで指定する。

ちなみにzshの場所は

$ which zsh

で見つかるはず。

2004/09/01(23:06:53)