TuxOnIce + hibernate-scriptとサウンドについて
復帰後に不具合が起きる場合にはサービス停止/起動で回避する
TuxOnIceを実行するために使用するhibernate-script*1には自動でサービスを停止/開始する*2機能があり、サウンドもその1つとなっていて、Gentoo Linuxでは、/etc/init.d/alsasoundが使用される。
休止状態からの復帰後にサウンド機能に不具合が出る場合には
ファイル名: /etc/hibernate/common.conf
RestartServices alsasound
「RestartServices」でディストリの/etc/init.d/以下のALSAに関するスクリプトの名前を指定することで、hibernate-scriptの実行時に自動的に「休止前に停止・復帰後に開始」して不具合を回避するようになっている。
ハイバネーションではオーディオアプリケーションの状態は保存できない
終了してしまうアプリケーションを復帰後に自動起動させる
オーディオアプリケーションは、「休止」することによる状態の保存は基本的にできない。また、サウンドサービスを再起動すると終了してしまうアプリケーションもあるため、終了してしまうと問題がある場合は、復帰後に自動で起動するようにする。具体的には「TuxOnIceの休止と復帰の実際(3.0-rc1の時点)」に貼ってあるhibernate-scriptのラッパースクリプトの「sudo /usr/sbin/hibernate ${HIBERNATE_OPT}」の行の後ろに
LC_TIME=C gkrellm & qjackctl &
状態の保存について
上にも書いたように、状態保存に関しては基本的にできないが、LASH対応アプリケーションは、セッションを保存することで状態を復元しやすくなっている。非対応のものでも、JACK Audio Connection Kitのポート接続状態に関してはQjackCtlのPatchbay機能である程度制御できる。
関連記事:
手元の環境での覚え書き
手元の環境*5では、ALSAのドライバやライブラリなどを1.0.16にする前までは問題がなかったのだが、ALSAのバージョンを1.0.16にしてからは何故か復帰後に音が出なくなってしまい、ALSA以下をモジュールにした上で「RestartServices」指定したものの何故かダメ*6で、意図する動作*7にならなかった。
試行錯誤の後、「休止前にサウンドを停止し、復帰の早い段階でサウンドを開始」という形に落ち着いた。「UnloadAllModules」*8は指定せず、ALSA関係のモジュールを「UnloadModules」で個別に指定することも行っていない。
ファイル名: /etc/hibernate/common.conf
GentooModulesAutoload yes StopServices alsasound OnResume 94 /etc/init.d/alsasound start
下の2行の代わりに「OnResume 94 /etc/init.d/alsasound restart」でも鳴るようにはなったが、QjackCtlを動かしたまま休止すると、ALSA(seq関連)のモジュール関係で確実に復帰後に固まってしまったため、上の形になった。
「GentooModulesAutoload yes」の部分は、他のディストリの場合
LoadModulesFromFile [起動/復帰時に自動で読み込ませるカーネルモジュールのリストファイル]
を指定する。自動で読み込むモジュール一覧ファイルは、Debian/Ubuntuでは/etc/modulesになっている。
(2008/8/31)Linux 2.6.26 + ALSA 1.0.17では、サウンドカードのドライバをカーネル組み込みにしても、復帰後に音が出なくなるということはなくなった。
使用したバージョン:
*1:uswsuspとsysfsも使用可能
*3:GUIのアプリケーションは基本的に「&」を付けてバックグラウンド起動する
*4:「alsamixerとamixer、GUIのミキサー」で書いている「Volume Plugin」を使用している
*5:「K9NU Neo-V」というマザーボードのオンボードサウンドで、ドライバは「hda-intel」、カード名は「HDA ULI M5461」、チップ名は「Realtek ALC883」
*6:正確には、復帰後に手動で「sudo /etc/init.d/alsasound restart」を実行すればうまくいったのだが、それでは不便
*7:自動で「復帰後に音が鳴る」という状態にする