スリープ復帰時にログイン画面を表示したい

iMacを複数ユーザーで使用しています。

ログイン状態からスリープを選択するだけで、同時にログアウトし、復帰後、ユーザー選択のできるログイン画面を表示するような設定は可能でしょうか?

現在は、各自ログオフしてから、通常ログイン画面にてスリープをしております。

iMac (21.5-inch, Late 2012), OS X Mavericks (10.9.3)

投稿日 2014/06/06 17:48

返信
返信: 53

2014/06/10 05:16 ajinohiraki への返信

どうにもスリムは方法が見つかりませんが、やはり下記などでしょうか。


Apple Scriptなら

do shell script "sudo pmset sleep 1" with administrator privileges

tell application "loginwindow"

«event aevtrlgo»

end tell


Automatorなら

ユーザがアップロードしたファイル

「操作を記録」でスリープするまでの時間を2分にしています。この場合はログイン後「ログイン項目」などで時間を戻す必要があります。

2014/06/13 20:50 ajinohiraki への返信

「ログアウト⇔スリープ→ログイン画面」という図式にしようとしているのに無理があるのでしょうか……


今回の質問の基本的な趣旨としては、


・素早く起動ができる。

・確認メッセージもなく、ものすごく簡単にログアウトとスリープができる。

・スリープ解除後、自分のアカウント(ユーザー)を迷わず選択できる。


以上の要件を満たした方法が理想なのですが……


基本的にログアウトしたら自分の操作権限はなくなりますので、ログアウト後に任意でスリープさせるのは外部からのリモート操作などの方法しか無い気がします。


ともあれ、automatorでスリープさせてもいいなら、スリープ解除するとログアウトできそうな感触ですのであげておきます。

あくまで、参考までです。

         スリープ用のアイコンを解りやすく作って、ドックに入れて使ってもらうといいのかもしれません。

ユーザがアップロードしたファイル


on run {input, parameters}


tell application "System Events" to sleep


return input

end run



on run {input, parameters}


tell application "System Events" to keystroke "Q" using {command down, option down, shift down}


return input

end run

2014/06/10 07:37 ni_ki への返信

 別にni_kiさんのスクリプトにケチを付けているわけではないのですよ。

もっとも根本的な問題なのだけど、トピ主としてはスリープに入った時点で有無を言わさずログアウトさせたいという事ですよね。復帰後はユーザ全員の名前が一覧で表示されるログイン画面に戻りたいということですから。

ファーストユーザスイッチでのユーザの切り替えでの切り替えは行いたくないと。(理由はなんでしょうかね? ひょっとすると複数のユーザで使用すると誤動作を起こすようなアプリをインストールしてあるのでしょうか)


 だからエラーダイアログが表示されてログアウトが阻止されてしまってはトピ主の意図する動作ではなくなってしまうと思うのですよ。でもトピ主の意図する動作(スリープ直後にユーザに確認をとることなくログアウト)を実装するとしたら未保存の書類は破棄しなくてはいけなくなる。これって大丈夫?って話。


 いやいやそういう事ではなくて、ログアウトしていなくてもスリープ復帰時は直前にログインしていたユーザ名だけでなく全員の名前を表示してもらいたいって意味ならまた考え方は違ってくるのだけど。

2014/06/14 15:59 ajinohiraki への返信

 そちらの利用状況がおそらく一般的でないため、はずした回答になっているかもしれませんが....。

当方、高齢者も何人かみえますので「自動でスリープになる」より「自分で消した」という方向にしたいからです。

これが目的であれば、使用後にログアウトするように促すのはどうですかね。しかし、ユーザのスキルによりログアウトする事自体が出来ない場合は、HALさんが書かれた

「システム環境設定」>「セキュリティとプライバシー」>「詳細...」に「使用しない状態がxx分間続いたらログアウト」という設定もあります。ご参考までに。

この設定を行えば良いのではないでしょうか。

2014/06/15 02:43 Hiro__S への返信

ご指摘、ありがとうございます。

iMac(Late 2012)OS X 10.9.3では確認し異常無かったのですが、指摘を受けMacBook Pro(Retina, Mid 2012)OS X 10.9.3で確認したところカーネルパニックが100%近い確率で発生いたしました。ログアウトが完了していない状態でスリープが実行されるのがダメなようです。


そこで作戦を変更し下記で試したところ、両方のMacで正常に動作いたしました。

LogoutHookでファイルを書き出すスクリプトを実行して、LaunchDaemonでそのファイルの変更を監視して、pmset コマンドを実行です。ログアウトしてから安定するのを待つためにsleep 3を入れました。

これならログアウト時に、通常のスリープが行われるのと変わらないと思われます。


LaunchDaemonsに下記。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

<key>Label</key>

<string>com.ni.logoutsleep</string>

<key>ProgramArguments</key>

<array>

<string>/Users/niki/Documents/pmsetsleepnow.sh</string>

</array>

<key>WatchPaths</key>

<array>

<string>/Users/niki/sleepnow.txt</string>

</array>

</dict>

</plist>



<!-- @@@@LingonWhatStart:@@@@LingonWhatEnd -->


pmsetsleepnow.shが下記。

#!bin/sh

sleep 3

pmset sleepnow


LogoutHookで下記、スクリプトを実行。

#!bin/sh

cat /Users/niki/Documents/pmsetsleepnow.sh > /Users/niki/sleepnow.txt

xmlの作成はMac App StoreよりLingon3を購入して行いました。

2014/06/07 00:40 ajinohiraki への返信

シェルスクリプトにしてしまえば、そのファイルをダブルクリックすれば出来るかと思って考えてみたのですがsudo コマンドを使用する都合でパスワード入力を求められかえって煩雑になることがわかりました。


解決策にはほど遠いですが、誰かが方法を思いつくかもなので記載させていただきます。

sudo shutdown -s +1

で1分後のスリープをしかけてから

osascript -e 'ignoring application responses' -e 'tell application "loginwindow" to «event aevtrlgo»' —e end

でログアウトです。

下記で行おうとしたらログアウトしてしまうのでスリープイベントが実施されないようです。

osascript -e 'ignoring application responses' -e 'tell application "loginwindow" to «event aevtrlgo»' —e 'tell application “System Event” to sleep’ -e end

2014/06/08 04:07 ajinohiraki への返信

ajinohiraki さんによる書き込み:


簡単なようで中々うまくいきません……

スリープ前にログアウトしてしまうので、スクリプトが途中で終了してしまうのが問題ですよね。ログアウト後も動く方法を探すとかCで書ければ、出来そうな気がするのですが、残念ながら私にその能力はありません。申し訳ないです。

あっ、もう一つアイディアだけは思いついたので記載させていただきます。pmset コマンドならスリープは指定時間にできますしパスワード無しで実行できるので、スクリプトで実行時刻を取得して現在時刻 + 60秒とかでpmset コマンドを仕掛けてログアウトする手です。

2014/06/10 07:22 やすどん への返信

MacBook Airから送信


2014-06-10 9:48 PM、やすどん <discussions@apple.co.jp> のメッセージ:


もしスリープ直後に直ちにログアウトするような仕様だと、スリープに入った時点で保存していない全ての書類が失われる事になりそうな気がします。

スリープしてから正常にログアウトできるのか不明ですが、未保存の書類があれば、スリープしてからログアウトできたとしても通常なら警告が出てログアウトが止まるので大丈夫でしょう。私が試した限りでは、警告が出てログアウトが一旦は止まります。

2014/06/10 19:19 ajinohiraki への返信

ログイン状態からスリープを選択するだけで、同時にログアウトし、復帰後、ユーザー選択のできるログイン画面を表示するような設定は可能でしょうか?


ログイン状態から「スリープ」ではなく「ログアウト」を選択すれば丸く収まる話なのではないのでしょうか・・・?

あと「システム環境設定」>「セキュリティとプライバシー」>「詳細...」に「使用しない状態がxx分間続いたらログアウト」という設定もあります。ご参考までに。

2014/06/11 04:40 ajinohiraki への返信

煩雑ですが一応、ログアウト後スリープが出来ましたので書き込ませていただきます。


AppleScript エディタで

do shell script "sudo nohup logoutSleep.sh" with administrator privileges

を実行。


logoutSleep.shの中身は下記です。


#!/bin/sh

osascript -e 'tell application "loginwindow" to «event aevtrlgo»' -e end

sleep 1

osascript -e 'do shell script "pmset sleepnow" with administrator privileges' -e end


アプリケーションで保存がされていない物が有る場合は、通常通りに保存するか聞いてきます。

書類の保存に手間取ったりして、ある程度の時間経過するとpmset コマンドが実行されてログインしたままスリープに移行するようで。

admin権限を使用していますので、管理者パスワードを聞かれます。


上記のApple Scriptをアプリケーション方式で保存すれば万事解決と思ったのですが、自身が終了できずに成功しません。

2014/06/12 06:24 ajinohiraki への返信

違う方法を思いついたのですが、力及ばずで実際に制作できませんでした。

他の方が見たときに実現できるかもしれないのでアイディアだけですが、書き込ませていただきます。

launchdを使用してログを監視して、ログアウトを検知したらpmset sleepnow コマンドでスリープさせる方法です。

ログアウトしているのでpmset コマンドを実行できないようです。


参考にさせていただいたのは下記です。

http://d.hatena.ne.jp/zariganitosh/20100114/1263458099

2014/06/13 16:56 ni_ki への返信

いえいえ、とんでもないです。

私も色々試してみましたが、どうもうまく動作しません。

オフィシャルな設定で簡単に出来ても良さそうなことなのですが……


「ログアウト⇔スリープ→ログイン画面」という図式にしようとしているのに無理があるのでしょうか……


今回の質問の基本的な趣旨としては、


・素早く起動ができる。

・確認メッセージもなく、ものすごく簡単にログアウトとスリープができる。

・スリープ解除後、自分のアカウント(ユーザー)を迷わず選択できる。


以上の要件を満たした方法が理想なのですが……


難しいですね。

2014/06/13 17:20 NO9 への返信

> 複数で使っているのなら、下手に自動にするのではなく、"ちゃんとログアウトする"という癖を付ける


この意見に一票。

オフィスなどでコンピュータを導入するとなると、日本では、従来のワークフローを変えたくないあまり、ベンダーにそういうふうなシステムを導入することを要求し、ベンダーもその辺はカスタマーに合わせてシステムを変更せざるを得ないので、高いものになりがち、という話はよくあります。カスタマイズするとなるとほんのちょっとしたことでも、システムの値段と同じくらいかかってしまいます。今回も、常連の面々がこんなスクリプトで出来る、、、とやっているのを見るとそう思います。

コンピュータは万能ではありませんので、安く使いたいなら、汎用のシステム(ソフトウェア)で間に合うように、感情云々は抜きにして、ユーザ側のリテラシを高めるべきと思います。どうしても感情の問題が出るのなら、複数機を導入すれば済むことでは?カスタマイズするよりそちらの方が安上がりなことが多いと思う。

2014/06/13 17:41 はに への返信

ありがとうございます。


おっしゃるとおりです。

私も同意見ですので、ユーザーに理解と学習を求めるのが初めなのは承知で質問しております。

何分、当方、高齢者も多く、世代の面でも理解を求めるのはかなりの難所になります。


私の質問の仕方にも問題がありました。

ですので、ちゃんとログアウトを選択すれば自動でスリープでもかまいません。

設定を変えれば出来るはずと思っていた私も浅はかでした。


はに様のおっしゃる主旨とは、ずれた回答になってしまいましたが、失礼します。

2014/06/14 03:12 ajinohiraki への返信

ajinohiraki さんによる書き込み:


私も色々試してみましたが、どうもうまく動作しません。

なんとかLaunchDaemonsにplistファイルをおいてログが変更されることを検出することまではたどり着きました。ただsystem.logファイルの変更は検出はできず/private/var/logフォルダの変更を監視ですが。変更を検出後に先に参考にさせていただいたサイトのAppleScriptを変更して特定の記録がなされたら、今度はそれを検出するようにしたつもりなのですが、それが出来ません。例えば

set newLog to do shell script "/usr/bin/tail /private/var/log/system.log | /usr/bin/grep -i 'DEAD_PROCESS'"

としてもnewLogに「DEAD_PROCESS」が書き込まれません。

試しに

set newLog to do shell script "/usr/bin/tail /private/var/log/system.log | /usr/bin/grep -i 'e'"

にしてみたのですが反応なしです。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

スリープ復帰時にログイン画面を表示したい

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。