[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[osx-users:0316] Re: 終了時にシェル・コマンドを実行したい



石川です。

On Wednesday, Feb 19, 2003, at 19:15 Asia/Tokyo, Hirokuni Tamachi wrote:

> なんか、こちらの雰囲気に見合わないくらいに、
> おヌルい質問で申し訳ないんですが(笑)、

SetFile -a V で不可視化、-a v で可視化ってのを初めて知りました(汗
# ML管理人がこの体たらくですから(苦笑
# まぁあんまり気になさらないで下さい。私にはとても興味深い質問ですし。

> システム終了時に、シェル・コマンドを自動的に実行させたいと思っています。
> システム起動時の/etc/rcに相当するようなものって、有るのでしょうか?
>
> 具体的には、/etc/rcにて、以下のコマンド
>
> /Developer/Tools/SetFile -a V /hogehoge
>
> を記述し、とあるパーティションを不可視にしているのですが、
> これを、システム終了時に、可視にさせたいのです。

この話を聞いて、真っ先に思い出したのが以下のドキュメントです。

○Digitalians' Alchemy | Automatic Backup by psync on OS X
 Psync を使って Mac OS X 上で自動バックアップする
http://homepage1.nifty.com/alchemy/os_x/psync.html

このドキュメントは「システム終了時」ではなく「ログアウト時」に
ホームディレクトリのバックアップを取る、というものですが、
「どーせシステム終了する時はログアウトするんだから、この方法が
 使えるんじゃん?」と思った次第です。

こちらの情報自体と『2. 自動バックアップの実際』から辿れる情報を
参考にすれば、多分お望みのことができるのではないかと。

と、ここまで一回書いたんですが、興味が湧いたので自分でちょっと
やってみました。

以下長いですが、私の作業時のメモです。
# お望みのことができているといいのですが...。
------------------------------------------------------------
■目的
ユーザ foo のホームディレクトリ内のある領域(hoge)を
ログイン時に不可視にし、ログアウト時には可視化する。
また、Mac OS X上に複数ユーザがいる環境を考慮し、どのユーザで
ログインしても、/Users/foo/hoge は不可視になっていること。
ただし、Fider上で不可視であっても実際には何かあった時に
Terminalなどで可視化できなくてはならず、且つ、OS 9での
使用時には可視化されていないといけない。

■作業の概要
・com.apple.loginwindowを編集し、全員のユーザのログイン/
 ログアウト時にスクリプトを実行できる様にする。
・/Users/foo/hoge を不可視化/可視化するスクリプトを作る。
・んで、色んな環境でテスト

■実際の作業
○以下、面倒なので、sudo -s してずっとrootで作業。
(なので、頭に“#”が付いてます)

○com.apple.loginwindow の中身を確認
# defaults read com.apple.loginwindow
→何も登録されていなかった。

○LoginHookとLogoutHookを登録
# defaults write com.apple.loginwindow LoginHook /usr/local/bin/LoginHook
# defaults write com.apple.loginwindow LogoutHook /usr/local/bin/LogoutHook

○ちゃんと登録されたか確認
# defaults read com.apple.loginwindow
{
LoginHook = "/usr/local/bin/LoginHook";
LogoutHook = "/usr/local/bin/LogoutHook";
}

○LoginHookを作成
# vi /usr/local/bin/LoginHook

#!/bin/sh
/Developer/Tools/SetFile -a V /Users/foo/hoge

○LogoutHookを作成
# cp /usr/local/bin/LoginHook /usr/local/bin/LogoutHook ; vi /usr/local/bin/LogoutHook

#!/bin/sh
/Developer/Tools/SetFile -a v /Users/foo/hoge

○LoginHookとLogoutHookに実行権限を付与
# chmod +x /usr/local/bin/*Hook

○実行権限が付いたか確認
# ls -la /usr/local/bin/ | grep "Hook"
-rwxr-xr-x 1 root wheel 70 Feb 20 21:06 LoginHook
-rwxr-xr-x 1 root wheel 70 Feb 20 21:06 LogoutHook

○以上で準備は整ったはずなので、ログアウトして「>exit」
 と思ったのだが弱気になって再起動 (^^;;

○ユーザ foo でログイン後、Finder上で /Users/foo/hoge が見えるか確認
→見えなかったので、LoginHookは成功している様子

○Terminal上で /Users/foo/hoge が見えるか確認
(実際は不可視でもマウントしてないとまずいとの事だったので)
% ls -la /Users/foo | grep hoge
drwxr-xr-x 4 foo staff 136 Feb 20 11:12 hoge
→ちゃんと存在している事を確認。
 なので、何かあったら“SetFile -a v /Users/foo/hoge”して可視化できる

※補足
ただし、実際にはユーザ foo でログインした後、
% /Developer/Tools/SetFile -a v ~/hoge
としても、認識が遅いんだか解りませんが、Finderですぐに見える様には
ならなかったので、SetFile -a v を実行した後、
% open ~/hoge
としてFinderで表示させてやるとすぐに可視化しました。

○Classic環境(Mac OS 9.2.2)を起動して、/Users/foo/hoge が見えるか確認
・YooEdit のオープン(開く...)ダイアログ上では見えなかった
・File Buddy のオープン(Get Info...)ダイアログ上では見えた
# File Buddy は不可視属性のファイルを閲覧することも可能だから見えるのでしょう。

○一度ログアウトし、管理者権限をもった別のユーザでログインし直して確認
ユーザ foo の領域は別ユーザから見れないのでテストにならない...。
ご、ごめんなさい。
Terminalから、/Users/foo/hoge が見れる事は確認しました...。

○Mac OS 9.2.2でマシンを起動し直して、/Users/foo/hoge が見えるか確認
→Finder上で見えた。ってことは、多分 LogoutHook も正常に動いているはず。
------------------------------------------------------------

とりあえずできているよーな...。
/Volumes/hoge とかに適用して上手く行くのかは確かめてませんが。

ただ、上記ドキュメントから辿れるAppleの開発者向け文書を見る限り、
ユーザ全員のログイン/ログアウトをカスタマイズしたかったら、
/etc/ttys をいじるのが正当なやり方なのかも知れませんね。

-- 石川 泰久/vm_converter
vm_converter@xxxxxxx


--[PR]------------------------------------------------------------------
 ★★小学3年生〜中学3年生までのお子さんをお持ちのご両親様へ★★
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 パソコンで簡単面白学習「学研Vメイト」 無料体験CR-ROM申込受付中!
 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
http://ad.freeml.com/cgi-bin/ad.cgi?id=bDdVm
------------------------------------------------------------------[PR]--
<GMO GROUP> Global Media Online www.gmo.jp