すべてのVirtualBoxシステムを一時停止するスクリプトを作成し、1行を追加しましたが/etc/rc.local.shutdown
機能しないようです。
su - XX -c /XX
次回起動すると、VirtualBoxはシステムが実行中であることを知らせるため、 Aborted
スクリプトは実行されませんでした。 (スクリプトを手動で起動すると私には効果的でした)
PS:活性化しました。shutdown.target
編集する
問題は私が思ったよりも複雑なようです。私のシステムでは.bashrc
実行されている場合にtty3
実行startx
されるため、systemdがシャットダウン/再開することを決定するVBoxSVC
と、X Sessionが終了するとプロセスやその他のエントリが終了します。
また、ソースコードをクラッキングして、xfsm-shutdown-helper
偽のコードを作成し、systemctl
スクリプトを最初に実行してみましたが、上記のいずれも動作しませんでした。
ベストアンサー1
私が正しく理解したら、tty3のbashセッションが終了する前、またはXserverが終了する前にVBシステムを中断したいと思います。
私は.bashrcでXsessionを起動するので、systemdが実行されているXsessionを認識しないと思います。したがって、シェルまたはXsessionを終了する前に、systemdにVBを一時停止するように指示するのは難しいでしょう。終了シーケンスで「十分に早い」位置を見つける必要があります。これは、「ユーザーコンテンツ」と「システムコンテンツ」が混在しているため、見つけるのが難しく、意味上問題がある可能性があります。
解決策は、systemdがプロセスを終了する方法によって多少異なりますが、次の内容は少なくとも良い方向を教えてくれます。
シェルが終了する前
suspendVB() {
echo "suspending VBs"
# put real code here
exit
}
trap suspendVB EXIT
bash用のrcファイルにするか、.bashrcに追加すると、suspendVB()
シェルが終了する前にその中のコードが実行されます。以下を実行してテストできます。
bash --rcfile xxx
ファイルにxxx
上記のコードが含まれています。これはテスト目的のためだけに現在のシェル内の他のシェルを起動します。単純シャットダウンを実行すると、以下が表示されます。
martin@beaureve:~$ exit
exit
suspending VBs
/home/martin >
その後、元の(ログイン)シェルに戻ります。
systemdが実際にログインシェルを終了する方法を理解する必要があるかもしれませんEXIT
。trap
詳しくは、コマンドを見つけてください。
systemdが「-9」(SIGKILL)を使用してプロセスを終了すると、終了をキャッチできません。つまり、幸運ではありません。
Xsessionが終了する前
あるいは、Xsessionで同様のことを試すこともできます。 systemdがXsessionを終了する場合、これは非常に重要です。今後シェルが終了します。 Xスタートアップファイル(.xinitrcなど)の1つにトラップを挿入できます。マニュアルページを見つけてstartx
詳細xinit
をご覧ください。
ファイルが私のファイルに似ていて、xserverが前景から始まる場合は、実際startx
にXが起動する行の後に suspens コマンドを入力することもできます(トラップをまったく使用しません)。
xinit "$client" $clientargs -- "$server" $display $serverargs
retval=$?
echo " --- suspending VBs ---"
「Hang VB」行を入力し、実行したときにstartx -- vt8
vt8でフル実行(kde)セッションを取得しました。ログアウトしたときにのみ画面に「Hang VB」行が表示されました。