ページ 1 / 2
pup_save.2fs を読み込み専用にするには。
Posted: 08/08/27(水) 09:37
by rp
私は、puppyをCDブートで起動してpup_save.2fs をUSBメモリーに保存しています。
puppyを起動してインターネット(www)をしていると、デスクトップの「save」ボタンを押していないのに「saving RAM to `pupsave` file...」と出てきます。保存しないようにするには、どうすればいいのでしょうか。
終了時のセーブもいりません。
Posted: 08/08/27(水) 11:30
by 2 8 6
数日前に関連する話題が出ていました。こちらがヒントになるかもしれません。
viewtopic.php?t=609
Re: pup_save.2fs を読み込み専用にするには。
Posted: 08/08/28(木) 09:03
by rp
シャットダウン時のセーブは、なくなりませんか。
Posted: 08/08/29(金) 19:31
by jake
(Puppy 4.00.3JPの)/etc/rc.d/rc.shutdownの622行目以降の"#save session..."に2箇所ある
コード: 全て選択
echo "Saving session to $PDEV1..." >/dev/console
/usr/sbin/snapmergepuppy /initrd/pup_ro1 /initrd/pup_rw
という2行のそれぞれ先頭に#をつけて無効化するとシャットダウン時にセーブされません。
Posted: 08/08/29(金) 20:38
by jake
(以下は無保証です。電源関係を扱うので慎重に。)
毎回、rc.shutdownに#をつけるのは大変なので、あらかじめrc.shutdownに#をつけたファイルを、例えば、nosavepoweroffという名前で/rootに置きます。終了する際に、これを、/etc/rc.d/rc.shutdownに上書きしたのち、通常の電源を切る操作をおこなえばセーブされずに終了できるはずです。
これを簡単に実行するために以下の実行ファイルを作ります。
コード: 全て選択
#!/bin/sh
cp -f /root/nosaveshutdown /etc/rc.d/rc.shutdown
sleep 0.2
/usr/X11R7/bin/wmpoweroff
ファイル名を、例えば、wmpoweroff2という名前で/rootに置きます。
次に/root/.jwmrcを編集します。195行目あたりに、
コード: 全て選択
<Program label="保存せずに電源を切る" icon="mini-stop.xpm">exec /root/wmpoweroff2</Program>
という行を追加します。以上の変更をpup_saveに保存するために通常の再起動を実行します。再起動すると、メニュー->シャットダウン->保存せずに電源を切る、という項目があるので、クリックするとセーブしないで終了するはずです。
Posted: 08/08/30(土) 19:35
by jake
jake さんが書きました:(Puppy 4.00.3JPの)/etc/rc.d/rc.shutdownの622行目以降の"#save session..."に2箇所ある...
2箇所ではなく3箇所でした。
特に657-658行が本件とかかわりが大きいようです。この部分を
コード: 全て選択
echo "Shutting down without saving..." >/dev/console
# /usr/sbin/snapmergepuppy /initrd/pup_ro1 /initrd/pup_rw
というようにすると、終了時に"Shutting down without saving..."というメッセージが表示されます。
Posted: 09/02/04(水) 00:41
by サボり魔
半年近く経過しました。以下4.1.2JPの話です。4.0系は今手元に無いもんで。
ここと、上で286さんがリンクを記しているトピックの話題から、セッション保存間隔を0に設定しておきました。
で、シャットダウン時ですが、「メニュー」→「システム」→「Puppyイベントマネージャ」で表記されているヒントから、
「/etc/rc.d/PUPSTATE」にある「PUPMODE」というパラメータをエディタで「5」に設定すると保存されません。
(この数値はバージョンによって今後変わるかも知れませんので、実物を確認してください)
セーブファイルを作っていない初めての起動時と同様に「セーブファイル、作るか?作らんのか?」と尋ねられます。
「NO!」と答えれば保存されずにおしまい。
PETパッケージのインストール・アンインストール失敗時、色々なファイルを消してしまった時など、
「うわ、保存したくね〜なぁ」という時に使ってます。
何度もやっていますが、時折再起動時に「ねぇあなた、前のセッションで変な終了したでしょ」と勘ぐられます。
「Ignore」を選択して事なきを得ていますが、もしかしたら副作用があるのかもしれません(未確認)。
PUPMODEの値は元に戻っています(保存されてないのだから当然か)。
シャットダウン時に「Yes」と返事をしたらどんな目に遭うのか。怖くて試してません。(←今のセッションが上書き保存されるだけか)
Posted: 09/02/04(水) 10:37
by サボり魔
あれ?既出でした。
viewtopic.php?t=787
さすがjakeさん。 ・・・・確認してなくてごめんなさい。

Posted: 09/02/04(水) 21:12
by jake
(CD起動やUSB起動の場合)PUPMODEを例えば99とかにすると何も聞かれずに、"Session not saved"というメッセージとともに保存せずに終了します。(現在のところ、PUPMODEを、2、3、5、6、7、12、13、32、69、77、128以外にするとそうなるようです。)
Posted: 09/02/05(木) 07:40
by 暇人
応用してシャットダウンメニューとか作ると便利?
Posted: 09/02/05(木) 18:07
by サボり魔
メニューじゃないですが、切り替えツール。
コード: 全て選択
#! /bin/bash
#MENU > System > PuppyEventManager > save session で自動セーブ間隔を0にしておく。
#ファイルに実行属性をつけて/root/startupに放り込んでおく。
#「Yes」を選ぶと現在のPUPMODEをmy-documentsのテキストファイル(.pupmode.txt)に
#保存しつつ99を新たに設定する(=終了時セーブなし)。
#「No」を選ぶと、ファイルから数値を読み込み元に戻す(テキストファイルは消える)
CHECK_FILE_DIR=/root/my-documents
TARGET_FILE=/etc/rc.d/PUPSTATE
cd "$CHECK_FILE_DIR"
sein=$(ls .pupmode.txt 2> /dev/null)
#処理の選択ダイアログ
export MAIN_DIALOG='
<vbox>
<text>
<label>セッション終了時のセーブをしますか?</label>
</text>
<text>
<label>Do you want to save this session ?</label>
</text>
<text>
<label>You can try it anytime.</label>
</text>
<hbox>
<button yes></button>
<button no></button>
<button cancel></button>
</hbox>
</vbox>
'
for STATEMENTS in $(gtkdialog3 --program=MAIN_DIALOG); do
eval $STATEMENTS
done
if [ "$EXIT" = "Yes" ]; then
if [ ! -z "$sein" ] ;then
#ファイルがあった場合=非セーブ状態の場合の記述(保存してあるPUPMODEの数字を戻す)
zahl=$(grep "^[0-9]\{1,\}" < ${CHECK_FILE_DIR}/.pupmode.txt)
#PUPSTATEの内容を一行ずつ配列に入れる。ただしPUPMODEの行だけはほっとく
i=0
while read row
do
if echo $row | grep "^PUPMODE=" > /dev/null
then
continue
fi
array[$i]=$row
i=$((i + 1))
done < $TARGET_FILE
#ファイルを初期化しつつPUPMODEに元の数値を設定
echo "PUPMODE="$zahl > $TARGET_FILE
#他の行を追記
for other_row in "${array[@]}"
do
echo $other_row >> $TARGET_FILE
done
#.pupmode.txtファイルを削除
rm -f ${CHECK_FILE_DIR}/.pupmode.txt
#ダイアログ出力
export MAIN_DIALOG='
<vbox>
<text>
<label>終了時にセーブを実行するようにしました。</label>
</text>
<text>
<label>SAVE-MODE</label>
</text>
<hbox>
<button ok></button>
</hbox>
</vbox>
'
gtkdialog3 --program=MAIN_DIALOG
else
#既に終了時セーブ状態になっている場合は確認ダイアログのみ
export MAIN_DIALOG='
<vbox>
<text>
<label>セーブするように設定されています。</label>
</text>
<text>
<label>Now, SAVE-MODE</label>
</text>
<hbox>
<button ok></button>
</hbox>
</vbox>
'
gtkdialog3 --program=MAIN_DIALOG
fi
elif [ "$EXIT" = "No" ]; then
if [ ! -z "$sein" ] ;then
#既にセーブしない状態になっている場合は確認ダイアログのみ
export MAIN_DIALOG='
<vbox>
<text>
<label>既にセーブしないように設定されています。</label>
</text>
<text>
<label>Now, No-SAVE-MODE</label>
</text>
<hbox>
<button ok></button>
</hbox>
</vbox>
'
gtkdialog3 --program=MAIN_DIALOG
else
#ファイルがなかった場合=セーブ状態の場合の記述(PUPMODEを保存した後、99にする)
grep "^PUPMODE=" $TARGET_FILE | sed "s/^PUPMODE=//" > .pupmode.txt
#PUPSTATEの内容を一行ずつ配列に入れる。ただしPUPMODEの行だけはほっとく
i=0
while read row
do
if echo $row | grep "^PUPMODE=" > /dev/null
then
continue
fi
array[$i]=$row
i=$((i + 1))
done < $TARGET_FILE
#ファイルを初期化しつつPUPMODEに「99」を設定
echo "PUPMODE=99" > $TARGET_FILE
#他の行を追記
for other_row in "${array[@]}"
do
echo $other_row >> $TARGET_FILE
done
#ダイアログ出力
export MAIN_DIALOG='
<vbox>
<text>
<label>終了時のセーブをしないように設定しました。</label>
</text>
<text>
<label>No-SAVE-MODE</label>
</text>
<hbox>
<button ok></button>
</hbox>
</vbox>
'
gtkdialog3 --program=MAIN_DIALOG
fi
else
echo "Perhaps, You pressed the Cancel button."
fi
保存にかかわるところなので、保証はできませんが。
勉強したてのシェルスクリプトなんで、変なとこあるかもしれません。
やりたいことのコメントつけときました。
セッションセーブ間隔には手をつけてません。元から手動で「0」にしてる人向きかも。
2009/10/25に再編集しました。実行で逆のモードに移すのではなく、gtkdialogでモードを選択するようにしています。
2011/4/6に、文字列を少しだけ修正
Posted: 09/02/05(木) 21:05
by jake
サボり魔さん さんが書きました:ここと、上で286さんがリンクを記しているトピックの話題から、セッション保存間隔を0に設定しておきました。
で、シャットダウン時ですが、「メニュー」→「システム」→「Puppyイベントマネージャ」で表記されているヒントから、
「/etc/rc.d/PUPSTATE」にある「PUPMODE」というパラメータをエディタで「5」に設定すると保存されません。
PUPMODE=5としておけば、セッション保存間隔を(0としなくても)いくつに設定しても自動保存(Puppyevent manager)は機能しないはずです。(99だとどうなるのでしょうか?)
Posted: 09/02/05(木) 22:46
by サボり魔
jakeさん さんが書きました:PUPMODE=5としておけば、セッション保存間隔をいくつに設定しても自動保存は機能しないはずです。
確かにそうですね。ただ、「5」にすると、初期起動時と同様の「保存ファイル作成の選択画面」が現れてしまいます。
実は、普段から終了時保存を確保しつつもセッション中の保存をしないようにしておきたい理由があるんです。
その理由は、64MBの保存ファイルを使ってるため。
Puppyで初めてLinuxに触れた私にとって、今のところはこれでも十分すぎる大きさです。
難点はPET-packageを作ってる最中に自動保存が実行されて、保存用ファイルがパンクすることがある、ということ。
自動保存さえしてくれなければメモリは十分足りてるみたいなのでどうにかなります。
「保存したくない」事態が起きた場合のみ、書きかけのファイルを別の場所に避難させ、問答無用でシャットダウンさせたい、というわけです。
で、普段の使い方は(というよりここの書き込みを拝見してからは)自動保存offで終了時のみまとめて保存派です。
USB起動なので、PUPMODEは「13」になってます。
上のスクリプト、スレ主のrpさんの役に立つといいんですが。
Startupに放り込んでセッション中の自動保存を「0」にしておけば、次の起動から自動的に「まったく保存なし」になります。
この場合ダイアログが邪魔なので、最後にある方の2つ目のダイアログ出力を消してもいいかも。
PET導入やブラウザ設定などのカスタマイズをした時は再度実行して「保存あり」に戻すとか。
jakeさん さんが書きました:99だとどうなるのでしょうか?
「99」は上のご指摘どおり特に割り当てが無いようです。いきなりシャットダウンですね。痛快です。

将来「99」に予約が入ったら・・・別の数値を入れましょう。
翌日追記:
rpさん さんが書きました:CDブートで起動してpup_save.2fs をUSBメモリーに保存しています
いけね、自分の環境(USBのみ)と違ってた・・・。 ○| ̄|_
Posted: 09/05/17(日) 20:38
by jake
サボり魔さん 2009年2月4日, 12:41 am さんが書きました:PETパッケージのインストール・アンインストール失敗時、色々なファイルを消してしまった時など、
「うわ、保存したくね〜なぁ」という時に使ってます。
何度もやっていますが、時折再起動時に「ねぇあなた、前のセッションで変な終了したでしょ」と勘ぐられます。
「Ignore」を選択して事なきを得ていますが、もしかしたら副作用があるのかもしれません(未確認)。
これは、/etc/.XLOADEDという隠しファイルのなせる業で、起動時にはここに「true」と書かれ、正常に終了すると「false」となります。次回の起動時にこれを読み込んで「false」であれば前回は正常に終了したものとされます。もし、正常に終了せず、「true」のままであると前回の終了時に異常があったものとして、上記のようなメッセージが出ます。よって、/etc/.XLOADEDに常に「false」としておけば、どういう終了をしても上記のようなメッセージは出ないはずですが、やはり健全とはいえないですね。
Posted: 09/05/17(日) 20:53
by jake
サボり魔さん 2009年2月4日, 12:41 am さんが書きました:ここと、上で286さんがリンクを記しているトピックの話題から、セッション保存間隔を0に設定しておきました。
で、シャットダウン時ですが、「メニュー」→「システム」→「Puppyイベントマネージャ」で表記されているヒントから、
「/etc/rc.d/PUPSTATE」にある「PUPMODE」というパラメータをエディタで「5」に設定すると保存されません。
(この数値はバージョンによって今後変わるかも知れませんので、実物を確認してください)
セーブファイルを作っていない初めての起動時と同様に「セーブファイル、作るか?作らんのか?」と尋ねられます。
「NO!」と答えれば保存されずにおしまい。
----中略----
シャットダウン時に「Yes」と返事をしたらどんな目に遭うのか。怖くて試してません。(←今のセッションが上書き保存されるだけか)
「Yes」と返事すると新規にpup_save.2fsを作成するプロセスに入ります。場所と容量を指定して、新しくpup_save.2fsを作り、保存して、終了、です。既存のpup_save.2fsに上書きされることはないようです。
が、ここで(新しく作ったpup_save.2fsに)保存されるのは、/initrd/pup_rwにあるデータのみです。初回起動時にはPCの起動に必要な全ての情報が/initrd/pup_rwにあるので、それだけでpup_save.2fsを作っても、次回起動時に問題はないのですが、2回目以降の起動では、起動時に読み込んだpup_save.2fsのデータは/initrd/pup_ro1にあり、/initrd/pup_rwにあるのはその差分みたいなもので、それだけではデータに抜けている部分があるようで起動途中でエラーとなってしまいます。