web-dev-qa-db-ja.com

Mac OS Xでユーザーをすばやく切り替えるためのキーボードショートカットを作成する

Mac OS X Snow Leopardでユーザーの簡易切り替えをアクティブにする(つまり、ログインウィンドウを表示する)キーボードショートカットを作成するにはどうすればよいですか?

WindowsのStart + Lキーボードの組み合わせをエミュレートしようとしています。

16
Brian Willis

10.6 Snow Leopardの場合、Automatorを使用してサービスを簡単に追加し、システム環境設定を使用してキーボードショートカットを割り当てることができます。詳細は Fast User Switching/Apple Menu? を参照してください。

7
Arjan

CLIを使用している場合は、次のエイリアスを設定してすばやく切り替えることができます。

alias switch='/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend'
7
user31752

私はこれ以外にも BetterTouchTool を使用していますが、実行できるアクションの1つは「ログイン画面を表示する」です(これは、ログアウトしてログイン画面に移動するのとは異なります)。 。私はそれをずっと使用して、マシンを長時間離れたときに自分のマシンをロックします…これがスクリーンショットです。

enter image description here

4
Levi Figueira

厳密に言えば、 Command+Option+Q ログアウトします(「Are you sure」プロンプトが表示されます)。

しかし、キーボードを使用してユーザーの簡易切り替えをトリガーする方法はありません。これで、キーストロークに関連付けることができるAppleScriptスクリプトを記述できます。たとえば、実装の詳細については this を参照してください。

set thePassword to "password"
set N to name of (info for (path to me))
set AppleScript's text item delimiters to (".")
set N to first text item of N
set AppleScript's text item delimiters to ""
set N to do Shell script "/usr/bin/id -u " & N
do Shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID " & N
tell application "System Events"
    tell process "SecurityAgent" to set value of text field 1 of group 1 of window 1 to thePassword
    click button 2 of window 1 of application process "SecurityAgent"
end tell
4

Appleサポートディスカッション)のキラリーによると、彼はこの組み合わせが機能すると言います:

...これはAutomatorとSparkで実行できます。

Automatorを開き、[Run Shell Script]を選択して、これを貼り付けます(すべて1行で)。

/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

ファイル->名前を付けて保存...->「アプリケーションとして保存」を選択し、便利な場所にアプリを保存します。次に、Sparkを使用して、そのアプリを開くためのキーボードショートカットを割り当てます。

AutomatorとSparkを使用してログインウィンドウに切り替え、control-F13を押すとMacをスリープ状態にします...

Spark 3.0b9ソフトウェア

Sparkは強力で簡単なショートカットマネージャーです。 Sparkを使用すると、アプリケーションやドキュメントの起動、AppleScriptの実行、iTunesのコマンドなどのホットキーを作成できます...ホットキーライブラリをエクスポートしてインポートするか、HTML形式で保存することもできます印刷するにはSparkは無料なので、節度なしで使用してください!

2
in a small town

特定のユーザーに切り替えるには、hints.macworld.comのコメントにあるスクリプト article を呼び出します。私はそれに問題があったので、うまくいくかどうかを確認するために微調整しました。パスワードはキーチェーンに保存されるため、ログインパスワードをクリアテキストで保存することを心配する必要はありません。 Gist here を見つけることができます。

--This script MUST be named "Switch to User.scpt", where User is the name of the user to switch to.
--You must first make a password item (a.k.a. a key) for the other user's password using Keychain Access, and call it "", where "user" is the other user's name and with the description "User Login". The script assumes that you make this key in your login.keychain, which is the default one.
--The first time you run this script, you will be prompted to allow Keychain Scripting to access the password of the key.
--This script requires "Enable access for assistive devices" to be enabled in the Universal Access system preference pane.

set username to Word -1 of my findReplace(".scpt", "", (path to me as text))

-- Invoke Fast User Switching. The `id -ur username` part gets the uid number that corresponds to the username and substitutes it at the end of the CGSession command
do Shell script "/System/Library/CoreServices/'Menu Extras'/User.menu/Contents/Resources/CGSession -switchToUserID `id -ur " & username & "`"

-- Use universal access to enter the text and to click the button
tell application "System Events"
    repeat
        if (do Shell script "stat -f %Su /dev/console") is username then exit repeat

        -- Get the password for the username
        try
            set pswd to (do Shell script "security find-generic-password -g -s \"" & username & "\" -D \"User Login\" 2>&1 1>/dev/null | sed -e 's/password: \"//' -e 's/\"//'")
        on error
            exit repeat
        end try

        if exists window 1 of application process "SecurityAgent" then
            tell process "SecurityAgent" to set value of text field 1 of window 1 to pswd
            key code 36
            exit repeat
        else
            tell application "SecurityAgent" to quit
            do Shell script "/System/Library/CoreServices/'Menu Extras'/User.menu/Contents/Resources/CGSession -switchToUserID `id -ur " & username & "`"
        end if
    end repeat
end tell

on findReplace(findText, replaceText, sourceText)
    set ASTID to AppleScript's text item delimiters
    set AppleScript's text item delimiters to findText
    set sourceText to text items of sourceText
    set AppleScript's text item delimiters to replaceText
    set sourceText to sourceText as text
    set AppleScript's text item delimiters to ASTID
    return sourceText
end findReplace

ログイン画面を呼び出すだけの場合は、別のスクリプトがあります。あなたは要点を見つけることができます ここ

do Shell script "'/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession' -suspend"

どちらのスクリプトも私のクイックシルバーカタログにあります。ユーザーアカウントの切り替えは数秒で完了します。

1
oschrenk

これを行うには少し異なる方法があり、セキュリティ上の利点(または見方によっては煩わしい)が追加されます。

  1. スクリーンセーバーを使用してコンピュータをロックする(ユーザーがロック画面から切り替えられるようにする)
  2. 「ホットマウスコーナー」を使用して、高速ロック/スクリーンセーバーのアクティブ化を有効にします

これを行うには、システム環境設定アプリケーションで次の設定を調整する必要があります。

  • Exposé & Spacesの[Exposé]タブで、Active Screen Cornersの1つをStart Screen Saverに設定します。
  • SecurityタブのGeneralの下で、Require password ... after sleep or screen saver beginsのオプションをチェックします(ドロップダウンからimmediatelyを選択することもできます)。

後者は各アカウントで行う必要があります(残念ながら、このためのグローバル設定はありません)。

次に、マウスを画面の適切な隅に移動して、コンピュータをロックします(スクリーンセーバーを起動することにより)。誰かがキーを押すかマウスを動かすと、ログインを求められ、そこからユーザーを切り替えることができます。

1
drfrogsplat
1
nik

ロックしたい場合(WindowsのWindow-Lなど)、非常にシンプルな解決策があります。スクリーンセーバーを設定して画面をロックし(ログオンが必要)、ctrl-shift-eject(左下の2つのキー+右上)を使用します。キー)。これにより画面がロックされます。

1
user51303