スリープ復帰時にログイン画面を表示したい
iMacを複数ユーザーで使用しています。
ログイン状態からスリープを選択するだけで、同時にログアウトし、復帰後、ユーザー選択のできるログイン画面を表示するような設定は可能でしょうか?
現在は、各自ログオフしてから、通常ログイン画面にてスリープをしております。
iMac (21.5-inch, Late 2012), OS X Mavericks (10.9.3)
iMacを複数ユーザーで使用しています。
ログイン状態からスリープを選択するだけで、同時にログアウトし、復帰後、ユーザー選択のできるログイン画面を表示するような設定は可能でしょうか?
現在は、各自ログオフしてから、通常ログイン画面にてスリープをしております。
iMac (21.5-inch, Late 2012), OS X Mavericks (10.9.3)
ログアウトすると即座にスリープする方法がありました。ログアウト時に所定のスクリプトを走らせることができます。
sudo defaults write com.apple.loginwindow LogoutHook /Users/niki/Documents/pmsetsleepnow.sh
pmsetsleepnow.shの中身は
#!bin/sh
pmset sleepnow
です。
再起動とシステム終了のさいにもスリープしてしまう気がいたしますが、確認した限りは大丈夫のようです。
未保存の書類がある場合は、どのようになるかは確認しおりません。
誤 なりまねません。
正 なりかねません。
ーーーーー
補足
ログアウトフックで実行するスクリプトの内容はいくつかバリエーションがあると思いますが、どれも結果は同じで時々操作不能に陥りました。
ちなみに上の方でご紹介の osascript を使ったものはさらにその頻度が高いです。この数日で何十回も電源長押し終了&シングルユーザモードで fsck しました。
この辺は環境依存の可能性があるかもしれませんが、少なくとも私の環境では、何度も操作不能になったわけで、おすすめできないというのが正直なところです。ログアウト→スリープのスクリプトはやめといた方が良いのではないでしょうか。
MacBook Airから送信
2014-06-15 11:07 PM、"Hiro.S" <discussions@apple.co.jp> のメッセージ:
当方の環境は Snow Leopard なのですが、ログアウトフックと launchd.plist の仕組みは基本的には同じだと思います。
同一のOSでもMacによって挙動が異なりますので、基本が同じでも動作が異なることが予想されます。
その後も3台のMacでそれぞれ8回ほど行って見ましたが、私のところでは正常です。
いえ、そう言う意味ではなくて、「/Users/nikiフォルダ」だと他のユーザの場合に問題が出ないかという問いに対して、変更してくださいとのお答えだったので、それは違うでしょということです。
「/Users/nikiフォルダ」でも問題ないというのが答えですよね。で、何処に置いても良いけど、管理面から「/Users/nikiフォルダ」にしてますと。変更してください...だと、「/Users/nikiフォルダ」では問題が発生すると受け取られますよ。
「/Users/nikiフォルダ」でも問題ないというのが答えですよね。
動くのは間違いないです。私のところでは。
ただ問題がないかどうかは環境によると考えます。
で、何処に置いても良いけど、管理面から「/Users/nikiフォルダ」にしてますと。変更してください...だと、「/Users/nikiフォルダ」では問題が発生すると受け取られますよ。
何が問題かを考えるかによっては問題が起きることも想定できなくは無いです。/Users/niki/Docoumentsでもよかったかと思っております。
作成してみましたが、完成度が低いのでネタ程度で書き込んでおきます。
system.logをtxtに書き出して、その中からAppleメニューからスリープを選択したさいに出る特定のログをテキストファイルに書き出すDaemonを使用して、そのファイルの変更内容を検証して、強制ログアウトをかけるDaemonを作っておくと一応、スリープメニューを選択するとスリープ解除時にログアウト画面が表示されている状態ができますね。
logouthook.sh
・nohup + pmsetsleepnow.sh をバックグランドで実行
pmsetsleepnow.sh
↓20秒程度のループ
↓ps コマンドで loginwindow.app のユーザが root に変わるのを検知
↓sleep コマンドでちょっと待つ
↓pmset sleepnow を実行してループから抜ける
↓タイムアウトしたらそのまま終了
とりあえずこんな感じでなんとかなるんじゃないかと思います。ps コマンドでの監視対象を loginwindow.app としましたが、もっと良い方法があれば教えてください。もっとちゃんとやるなら、それなりのプログラムを組むしかないかもしれません。
未保存のファイルがある場合、保存ダイアログでキャンセルすれば、ログアウトもキャンセルされるので、ログアウトフックも実行されませんし、ファイルを保存するようにした場合は、保存後にログアウト&ログアウトフックとなるので、この問題もクリアできてるはずです。
ただ、ログイン/ログアウトフックは大分前 (Tiger のとき?) に Deprecated になり、いつ動かなくなってもおかしくないので、もうそろそろ使うのをやめた方が良いかもしれませんね。
ということで、具体的なスクリプティングは ni_ki さんにお任せします。
NO9 さんによる書き込み:
複数で使っているのなら、下手に自動にするのではなく、"ちゃんとログアウトする"という癖を付ける
メンテナンスやトラブルが起きた際の対処を考慮すると、私もこれに一票です。
Hiro.S さんによる書き込み:
logouthook.sh
・nohup + pmsetsleepnow.sh をバックグランドで実行
(中略)
とりあえずこんな感じでなんとかなるんじゃないかと思います。
なるほど、できそうですね。
それにしてもスレ主さんがお求め「スリープ」メニューを選択後の動作を制御するのは容易でないことは今回、わかりました。
個人的な収穫としてはlogを監視すれば、それらの動作が起きたことをコマンドやApple Scriptから検出することはできるようです。よくよく観察してみたらログアウトも記録されていました。
ログイン/ログアウトフックは大分前 (Tiger のとき?) に Deprecated になり、いつ動かなくなってもおかしくないので、もうそろそろ使うのをやめた方が良いかもしれませんね。
やはり、そうですか。
ということで、具体的な(中略)
応用も考えてログの方から、トリガーを拾いたいと思っています。
限界は近いので、挫折の可能性が大きい事を否定しませんけど。
システム環境設定>セキュリティとプライバシー>スリープ解除/スクリーンセーバー解除にパスワードを要求
にチェック。
質問者さまの要望を満たした回答になっていませんが・・・
そうか、ユーザー選択画面にならなければいけないわけですね。これだと一度ユーザー変更のワンクッションが入りますね。
一発でできる設定ってあるのでしょうか?
ありがとございます。
スクリプトも方法として考えたのですが、どうしてもスムーズに出来ませんでした。
簡単なようで中々うまくいきません……
もしスリープ直後に直ちにログアウトするような仕様だと、スリープに入った時点で保存していない全ての書類が失われる事になりそうな気がします。
それって大丈夫ですかね。
ありがとうございます。
一度、確認してみます。
スリープ復帰時にログイン画面を表示したい