Чи можна дозволити використання для програми або програми певного часу на Mac?


1

Я намагався досягти цього за допомогою другого облікового запису (який є обліковим записом адміністратора) і батьківського контролю, але здавалося, що це неможливо зробити.

Я знаю, що є деякі програми, які ви можете завантажити, які допоможуть вам у цьому (наприклад, холодна Туреччина). Але було б набагато простіше, якби я зробив це, використовуючи лише інструменти, які вже доступні на MacOS.


Які часи? Я буду будувати сценарій.
JBis

Я хотів би використовувати цю програму лише з 12:01 до 23:59, щотижня в п'ятницю. Решту тижня вона повинна залишатися блокованою. Заздалегідь спасибі!
Джон Сміт

1
Ви маєте на увазі "12:00 am and 11:59 pm"?
JBis

Відповіді:


3

Ви можете зробити це за допомогою двох вбудованих інструментів:

  • Воротар, що дозволяє / забороняє доступ до програм (про це я писав у цій публікації )
  • Launchd для обробки графіка

Воротар

Використовуючи Gatekeeper, ми можемо створювати "правила", які дозволяють блокувати / активувати програми. У вашому прикладі можна створити список програм, які дозволяється запускати лише по п'ятницях:

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

Перевага цього полягає в тому, що ви можете додати кілька додатків з однаковою міткою та ввімкнути / вимкнути їх у одну команду:

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

Launchd

Для цього вам знадобиться простий скрипт для включення / вимикання додатків, і вам потрібно запустити його як демон (потребує sudoпривілеїв), щоб він містився в /Library/LaunchDaemons.

Я використав угоду імен com.user.FridayApps.plistі FridayApp.shсценарій.

Bash Script:

#!/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

Launchd .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

Як це працює

Що відбувається тут, це дві речі:

  • launchdзапускає сценарій двічі. Одного разу в той час, щоб запустити його на і інший час, щоб вимкнути його
  • простий скрипт bash для вмикання / вимикання включеного додатку. Вона визначає дату, а потім виконує відповідну команду

Не знав, що ви можете використовувати воротаря. Дякую!
JBis

Theres один незначний питання: Якщо комп'ютер вимкнений в точну секунду, що launchd працює, то людина не може використовувати додаток протягом всього дня.
JBis

@JBis - вірно. Я забув додати ключ RunAtLoad, щоб сценарій автоматично запускався і встановлював правильний стан під час завантаження.
Аллан

Забули, як це працює. Тепер думаючи про це, я міг би змінити своє. Майте на увазі, якщо я копію ваші календарні інтервали?
JBis

Копіювати ... нічого власницького тут!
Аллан

0

Прочитайте Intro

У наступному підручнику ви зробите наступне:

  1. Створіть профіль конфігурації, який блокує програми на певному шляху
  2. Додаток , яке додавати і видаляти профіль в залежності від дня
  3. LaunchDaemon , який буде працювати з додатком кожен інтервал (5 хв)

Створіть програму

Відкрити це в редакторі сценаріїв і експортувати його як тільки для читання додатки і переконайтеся , що залишаються відкритими після запуску обробника нема на

Після експортування дотримуйтеся цього вказівки, щоб запобігти його відображенню в доці.

   # 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. Аплодуйте собі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.