それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Macのコマンドでスクリーンセーバー・画面ロック・画面オフ

Macで画面オフのショートカットが欲しい。

Windowsと違って、Macで困るのは、 Win-L のキーボードショートカットが無い所

ちょっと離席するときにMacを弄くられてデスクトップの背景をアニメ絵に変えられたり、妙なTweetを投稿されないようにしたい。

本当はTouchID があればいいんだけどね。

Macをロックする方法

画面をロック(ログイン画面にする)方法は大きくわけて3つ在る。

  1. 画面オフ・スクリーンセーバー起動時に画面ロック設定を環境設定でチェックする
  2. ユーザー切替を使ってログインスクリーンを表示
  3. Keychains.app を使って画面をロックする

手軽なのは1でしょうかね。ただプレゼン中にスクリーンセーバーになって画面ロックされるのは割と面倒くさいので、わたしは2/3の方法を取りたいと思ってた。

どの方法を選んでも画面ロックをしてパスワード入力が必要にすることが出来るので、これらを起動するコマンドをしっておけば、あとはキーボードショートカットを割当てたりロックコマンドを作ったりAppをつくってSpotlightから呼び出せるよね。

これらのそれぞれの方法を見ていきましょう。

1. 画面オフ・スクリーンセーバーを使った画面オフ

画面オフ・スクリーンセーバーが起動したら、ロックを掛ける。

f:id:takuya_1st:20180518093643p:plain:w200

この設定を行った上で、コマンドラインから、スクリーンセーバーを起動するか、画面をオフにする。

1.1 スクリーンセーバーを起動する

コマンドラインでターミナルから、スクリーンセーバーを起動するには、 ScreenSaver のフレームワークの中にあるバイナリを実行する。

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

または  open で  ScreenSaverEngine.app を起動する。

open  /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app

1.2 画面をオフにする

ディスプレイの電源OFFを起動する方法は、次の通り pmset は power management settgins の略だと思う。

pmset displaysleepnow

またはFinderにスリープを実行させる。

osascript -e 'tell application "Finder" to sleep'

 2. ユーザー切替を使ってログインスクリーンを表示

ユーザーの切替を使う方法。

メニューバーの右上にある、「ログインウィンドウ」を使って、ロックをする。 この場合のデメリットは、ユーザー名を再度入力が必要になる点だ。

f:id:takuya_1st:20180606103835p:plain:w300

コマンドラインからは次のようにする。

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

長いので alias でもしとけばいいかと。

環境設定 と併せて使う必要がある(スクリーンセーバー・画面オフ)

これらスクリーンセーバーと画面オフと使った場合、画面ロックを使うには環境設定で設定が必要

f:id:takuya_1st:20180518093643p:plain:w200

スクリーンセーバーの解除時に画面ロックをするのオプションを使わないといけないのが少しめんどくさい。 冒頭にも書きましたが、ログイン関連でロックするには、環境設定が必要になる。

3. Keychains.app を使って画面をロックする

キーチェーンには、画面ロックするメニューが用意されているので、コレを使えばロックを掛けることが出来る。

f:id:takuya_1st:20180518095034p:plain

このメニューバーのメニューを起動してあげればいい。 起動する方法はいくつか在るが、Foundation を使ってパパっとPerformSelectorを実行すればいい。

キーチェーンを使う方法。

キーチェーンの機能を使うと、ダイレクトに画面ロックを起動できるから便利。

キーチェインでロックすることができる。キーチェインのボタンを押せば良いんだから、 キーチェーンの参照を取ってきて、performSelector して押すだけ。

キーチェインに該当メニューがないときは、keychains.appの設定でメニューバーに表示するように設定しておけばいい。

事前設定

f:id:takuya_1st:20180518095838p:plain:w200

performSelector する場合

lockscreen のコマンドをつくった

lockscreen を起動する。

lockscreen-macos/main.m at master · takuya/lockscreen-macos · GitHub

#import <Foundation/Foundation.h>

int main() {
  @autoreleasepool {

    NSBundle *bnd = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class pc = [bnd principalClass];
    id k = [[pc alloc]init];

    [k performSelector:@selector(_lockScreenMenuHit:) withObject:NULL];
  }
  return 0;
}

lockscreen-macos/main.m at master · takuya/lockscreen-macos · GitHub

コンパイルしておけばSpotLightから呼び出せる。

作ってコンパイルした実行ファイルを適当なところに置いてSpotlightで起動すれば、手軽に画面のロックが出来るので楽。本当に楽。これで捗る

この方法が不便なのは事前に、キーチェーン設定でメニューバーに表示しておく必要が在る点だけ。

f:id:takuya_1st:20180518095727p:plain

f:id:takuya_1st:20180518095727p:plain:w200

組み合わせて離席用に

画面ロックとディスプレイをオフを組み合わせてコマンドにしてもいいよね。

画面をスリープさせるだけのコマンド sleep display をコマンドにして

#!/bin/sh

exec pmset displaysleepnow

画面ロックするだけのコマンド lock screeenとを組み合わせておけば、使い分けも簡単。SpotLightでできる。

#!/usr/bin/env bash


sleep_display_power_off
lockscreen

f:id:takuya_1st:20180812123048p:plain:w240

まとめ

  • スクリーンセーバー
  • 画面オフ      - 事前設定が必要      - プレゼン中や作業中に画面オフになったりすると面倒くさい。
  • ユーザーの切替
    • 環境設定が必要
    • 再ログイン時にユーザー名入力(選択)からになるのが面倒くさい。
  • キーチェーン
    • キーチェーンをメニューバーに表示する必要がある。

スクリーンセーバーと画面オフの使用頻度にも依るのですが、いくつか選択肢があって好きな方法を選べるのが嬉しい。

あとはどの方法でも好きなものをキーボードショートカットに割り当ててしまえばWin-Lのような使い方が出来る

画面オフは「パワーボタン押す」なので、強い意味のパワーオフでCtrl-Shift-パワーとかでしょうかね。

次に調べること

ユーザー切替のログインスクリーンを表示するをCLIで起動する方法。 pmset はオモシロそうなので全部のコマンドを試したい。

2018-08-12追加

lockscreen で検索にマッチしなかったのでキーワード追加。最近のGoogleはほんとに。。。

参考資料

https://apple.stackexchange.com/questions/80058/lock-screen-command-one-liner