Macで特定の時間にアプリまたはプログラムの使用を許可することは可能ですか?


1

2番目のアカウント(管理者アカウント)と保護者による制限を使用してこれを達成しようとしましたが、これは不可能なようです。

これに役立つダウンロード可能なプログラムがいくつかあることを知っています(たとえば、冷たいトルコ)。しかし、macOSですでに利用可能なツールのみを使用してこれを実行できれば、はるかに簡単です。


何時?スクリプトを作成します。
-JBis

毎週金曜日の午後12時01分から午後23時59分までの間のみアプリを使用したいと思います。週の残りはブロックされたままになります。前もって感謝します!
ジョンスミス

1
「午前12:00と午後11:59」という意味ですか?
-JBis

回答:


3

これは、次の2つの組み込みツールを使用して実行できます。

  • アプリへのアクセスを許可/禁止するゲートキーパー(この投稿でそれについて書いています)
  • スケジュールを処理するために開始

ゲートキーパー

Gatekeeperを使用すると、アプリをブロック/有効化できる「ルール」を作成できます。あなたの例を使用して、金曜日にのみ実行できるアプリのリストを作成できます。

spctl --add --label "FridayApps" /Applications/SomeApp.app 

これの利点は、同じラベルを持つ複数のアプリを追加し、1つのコマンドでそれらを有効/無効にできることです:

sudo spctl --disable --label "FridayApps"   <---- For Saturday thru Thursday
sudo spctl --enable --label "FridayApps"    <---- For Friday

発売

このためには、アプリを有効/無効にする簡単なスクリプトが必要になります。また、これをデーモンとして実行する必要があり(sudo権限が必要)、に存在する必要があり/Library/LaunchDaemonsます。

私は、命名規則を使用com.user.FridayApps.plistしてFridayApp.shスクリプトの。

Bashスクリプト:

#!/bin/bash

DOW=$(date +%u)   # Sets the Day of Week; 5 = Friday
TOD=$(date +%T)   # Sets the time of Day
start="12:00:00"  # Sets start time   
end="23:59:00"    # Sets end time

if [ $DOW -eq 5 ]
then
    if [[ "$TOD" > "${start}"  &&  "$TOD" < "${end}" ]]
    then
      /usr/sbin/spctl --enable --label "FridayApps"
    fi
else
    /usr/sbin/spctl --disable --label "FridayApps"
fi

発売 .plist

<?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.user.FridayApps</string>
    <key>ProgramArguments</key>
    <array>
        <string>/User/MyName/script/location/FridayApps.sh</string>

    </array>
    <key>StartCalendarInterval</key>
    <!--  Weekdays are 1 - 5; Sunday is 0 and 7   -->
    <array>
        <dict>
            <key>Weekday</key>
            <integer>5</integer>
            <key>Hour</key>
            <integer>12</integer>
            <key>Minute</key>
            <integer>01</integer>
        </dict>

        <dict>
            <key>Weekday</key>
            <integer>6</integer>
            <key>Hour</key>
            <integer>00</integer>
            <key>Minute</key>
            <integer>00</integer>
        </dict>
    </array>

</dict>
<key>RunAtLoad</key> 
<true/>
</plist>

##Load the `.plist`

sudo launchctl load com.user.FridayApps.plist

仕組み

ここで何が起こっているのかは2つです。

  • launchdスクリプトを2回実行しています。一度実行するとオフになります
  • 有効なアプリのオン/オフを切り替える簡単なbashスクリプト。日付を検証し、適切なコマンドを実行します

ゲートキーパーを使用できることを知りませんでした。ありがとう!
JBis

1つの小さな問題があります。launchdが実行される正確な秒でコンピューターの電源が切れると、その人は1日中アプリを使用できなくなります。
JBis

@JBis-true。RunAtLoadキーを追加するのを忘れたため、スクリプトが自動的に実行され、起動時に適切な状態に設定されます。
アラン

それがどのように機能するか忘れました。今それについて考えて、私は私のものを変えることができました。カレンダーの間隔をコピーしても気になりませんか?
JBis

コピーして...ここに独占的なものはありません!
アラン

0

イントロを読む

次のチュートリアルでは、次のことを行います。

  1. 特定のパスのアプリケーションをブロックする構成プロファイルを作成する
  2. 日に応じてプロファイルを追加および削除するアプリケーション
  3. 間隔(5分)ごとにアプリケーションを実行するLaunchDaemon

アプリを作成する

スクリプトエディタでこれを開き、としてエクスポート読み取り専用の アプリケーション確認して、ランハンドラが後に開いたままになっていません

エクスポート後、この ガイドに従って、ドックに表示されないようにします。

   # Block Apps Based on Day By Josh Brown
    # Last Modified: Aug 23 2018
    on run
    if checkDay("Friday") then
        do shell script "sudo profiles remove -forced -identifier com.company.macos.blockapps"
    else
        do shell script "sudo profiles install forced -path /path/to/the.mobileconfig"
    end if
end run

on checkDay(myDay)
    set currentDay to weekday of (get current date)
    if (currentDay as string) is (myDay as string) then
        return true
    else
        return false
    end if
end checkDay

モバイル構成を作成する

つかいます

<key>pathBlackList</key>
                <array>
                    <string>/path/to/an.app</string>
                    <string>/path/to/asecond.app</string>
                </array>

ブロックするアプリを制御します。

以下を拡張子付きのファイルに保存します .mobileconfig

<?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>PayloadIdentifier</key>
    <string>com.company.macos.blockapps</string>
    <key>PayloadRemovalDisallowed</key>
    <true/>
    <key>PayloadScope</key>
    <string>System</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>9c24d6b3-6233-4a08-a48d-9068f4f76cf0</string>
    <key>PayloadOrganization</key>
    <string>Company Name</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
    <key>PayloadDisplayName</key>
    <string>Block Apps In User Folder</string>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>PayloadType</key>
            <string>com.apple.applicationaccess.new</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadIdentifier</key>
            <string>MCXToProfile.9c24d6b3-6233-4a08-a48d-9068f4f76cf0.alacarte.customsettings.2476221c-1870-4f3e-8c52-52386029c4cf</string>
            <key>PayloadEnabled</key>
            <true/>
            <key>PayloadUUID</key>
            <string>2476221c-1870-4f3e-8c52-52386029c4cf</string>
            <key>PayloadDisplayName</key>
            <string>Blocks all apps in the ~/ directory./string>
            <key>familyControlsEnabled</key>
            <true/>
            <key>pathBlackList</key>
            <array>
                <string>/path/to/an.app</string>
                <string>/path/to/asecond.app</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

LaunchDaemonを作成する

注:これを行うには、管理者である必要があります。

次のファイルを保存します /Library/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.PlzUpvoteMy.answer</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/bin/open</string>
            <string>-W</string>
            <string>**/path/to/application.app**</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartCalendarInterval</key>
        <!--- Creds to @Allan for Calendar Interval -->
        <!--  Weekdays are 1 - 5; Sunday is 0 and 7   -->
    <array>
        <dict>
            <key>Weekday</key>
            <integer>5</integer>
            <key>Hour</key>
            <integer>12</integer>
            <key>Minute</key>
            <integer>01</integer>
        </dict>

        <dict>
            <key>Weekday</key>
            <integer>6</integer>
            <key>Hour</key>
            <integer>00</integer>
            <key>Minute</key>
            <integer>00</integer>
        </dict>
    </array>
        <key>UserName</key>
        <string>**UserToBlock**</string>
    </dict>
</plist>

次のコマンドで許可を変更します。

sudo chown root:wheel /Library/LaunchDaemons/com.MyName.plist

デーモンをロードする

注:これを行うには、管理者である必要があります。

デーモンを起動するには、次のコマンドを使用します。

sudo launchctl load /Library/LaunchDaemons/com.MyName.plist 

プログラムは5秒ごとにアプリをスキャンし、実行中の場合は閉じます。

デーモンを停止するには、このコマンドを使用します

sudo launchctl unload /Library/LaunchDaemons/com.MyName.plist 

自分を称賛

  1. 拍手する
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.