起動時に消音を強制解除する

 パペロのボリュームスイッチは

  1. 右に倒すとボリュームアップ
  2. 左に倒すとボリュームダウン
  3. まっすぐ押し込むと消音
  4. 再度押し込むと消音解除

という動作ですが、消音についてエンドユーザは気がつかないことが多く、気づかずに消音にしてしまい「パペロから音が出なくなった」というクレームになりがちです。消音状態は電源を切っても保持されるので、ユーザは消音動作について知るまで「パペロが使えない」状況が続くことになります。

色々な考え方があるとは思いますが、いっそのこと「消音状態は電源を切ると解除される」という動作に変更して出荷するというのも一つの方法だと思われますので、その設定方法をご紹介します。

ボリューム情報保持ファイル

 パペロのボリューム情報を保持しているファイルは

/Extension/robot_platform/conf/VolumeLevel.conf

です。中身は

volumeLevel=10
mute=0

という様なテキストファイルです。”mute=0″が音が出る状態で”mute=1″が消音状態です。したがって起動時に”mute=1″なら”mute=0″に書き換えればよいことになります。

ファイルを書き換えるコマンド

 ”mute=1″を”mute=0″に書き換えるには、sedを使って、

sed -i 's/mute=1/mute=0/' /Extension/robot_platform/conf/VolumeLevel.conf

でできます。sedはオプション無指定のときは結果を標準出力に出力しますが、-iオプションでファイルを直接書き換えます。
“mute=1″の時だけ書き換えるには、

if grep "mute=1" /Extension/robot_platform/conf/VolumeLevel.conf ; then
    sed -i 's/mute=1/mute=0/' /Extension/robot_platform/conf/VolumeLevel.conf
fi

とすればよいでしょう。

起動スクリプト

 パペロの音声関係のプロセスは

/Extension/script/S98-*

のスクリプトで起動されるようですので、その前に実行される様に、

/Extension/script/S97-pre-sound-ctrl

というファイルを作成して処理を記述します。あまり意味はありませんが一応作法にのっとって、以下の様な内容としました。

#!/bin/sh
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
VL_CONF=/Extension/robot_platform/conf/VolumeLevel.conf

start() {
    if [ -w $VL_CONF ] ; then
        if grep "mute=1" $VL_CONF ; then
            sed -i 's/mute=1/mute=0/' $VL_CONF
        fi
    fi
}

stop() {
    echo do nothing
}

restart() {
    stop
    start
}

case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    restart
    ;;
*)
    echo "usage: $0 { start | stop | restart }" >&2
    exit 1
    ;;
esac
exit 0

シンボリックリンク時の注意

 VolumeLevel.confは実体を/tinyに移してシンボリックリンクにする方が良い場合が多いと思われますが、その状態で上記スクリプトを実行すると、シンボリックリンクが削除されて実ファイルになってしまいます(通常のlinuxディストリビューションのsedであれば–follow-symlinksオプションでこの動作を変更できますが、PaPeRo i のbusyboxのsedにはこのオプションはありません)。したがって、その様な場合には/Extension/script/S97-pre-sound-ctrlの

VL_CONF=/Extension/robot_platform/conf/VolumeLevel.conf

の行を

VL_CONF=/tiny/hot/VolumeLevel.conf

という様に実体のファイル名に変更してください。