Я пытался добиться этого, используя вторую учетную запись (которая является учетной записью администратора) и родительский контроль, но мне показалось, что это невозможно.
Я знаю, что есть несколько программ, которые вы можете скачать, которые помогут вам в этом (например, Cold Turkey). Но было бы намного проще, если бы я мог сделать это, используя только инструменты, уже доступные в macOS.
Вы можете сделать это с помощью двух встроенных инструментов:
Используя Gatekeeper, мы можем создавать «правила», которые позволяют вам блокировать/разрешать приложения. Используя ваш пример, мы можем создать список приложений, которые разрешено запускать только по пятницам:
spctl --add --label "FridayApps" /Applications/SomeApp.app
Преимущество этого в том, что вы можете добавить несколько приложений с одним и тем же ярлыком и включить/отключить их одной командой:
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
для сценария.
Баш-скрипт:
#!/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
Здесь происходят две вещи:
launchd
запускает скрипт дважды. Один раз, чтобы запустить его, а другой раз, чтобы выключитьspctl -a /Applications/AppName.app
сообщит вам, включен он или отключен. Я написал сценарий уведомления на основе контекста текстового файла — его несложно изменить для этого приложения: apple.stackexchange.com/q/257541/119271В следующем уроке вы сделаете следующее:
Откройте это в редакторе сценариев и экспортируйте его как приложение только для чтения и убедитесь, что он остается открытым после того, как обработчик запуска не включен.
После экспорта следуйте этому руководству, чтобы оно не отображалось в доке.
# 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>
Примечание. Для этого вы должны быть администратором.
Сохраните следующий файл в/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
JBis
Джон Смит
JBis