Ограничения по времени для определенных приложений в macOS High Sierra

В macOS High Sierra v 10.13.4 я могу сделать следующее в родительском контроле :

  • Полностью запретите использование определенных приложений в разделе «Ограничение приложений» на вкладке «Приложения » на этом Mac .
  • Ограничьте все использование компьютера на вкладке «Время» .

Однако то, что я хотел бы сделать, это ограничить, как долго можно использовать конкретное приложение. В частности, я хотел бы ограничить использование ребенком определенной игры до x часов в день, но приведенные выше параметры не позволяют этого.

Есть ли способ сделать это с помощью самой macOS? Если нет, есть ли другой способ сделать это с помощью другого приложения, через командную строку или как-то иначе?

( Этот аналогичный вопрос в отношении Mac OS X 10.10 ссылается на приложение под названием Watcher, но оно получило плохие отзывы и, похоже, не обновлялось в последнее время .)

Интересный обходной путь здесь ask.metafilter.com/243437/… . В основном создайте новую учетную запись только с этим приложением и используйте родительский контроль, чтобы ограничить время на этой учетной записи. Когда ваш ребенок хочет использовать приложение, он входит в эту учетную запись.
Кроме того, в какой степени вам нужна безопасность. У меня есть несколько решений, но их легко обойти с некоторыми знаниями компьютера. Я сомневаюсь, что ваш ребенок (дети) сможет обойти это (в зависимости от их возраста), но хотел бы убедиться.
Наконец, сколько игр? Если их больше 1, вам нужно разное время для каждого, одно и то же время для каждого или кумулятивный таймер?

Ответы (1)

Примечание: я тоже ребенок, надеюсь, другие не увидят во мне предателя за этот ответ 🤣🤣

Вот начало моего приложения. Это незавершенная работа. Я буду редактировать очень скоро, чтобы включить новые функции, такие как

  • Удаленное редактирование настроек (например, родительский контроль позволяет это делать)

  • Возможность получать оповещения, если ребенок пытается обойти ограничение

  • Возможность продлить время (система вознаграждения?) с помощью родительского пароля

  • Возможность полностью обойти ограничение с помощью родительского пароля

  • Несколько предупреждений

  • Больше журналов

  • Больше комментариев в коде

  • LaunchAgent и LaunchDemon

  • Многие другие функции

Откройте это в редакторе сценариев и экспортируйте его как приложение только для чтения и убедитесь, что он остается открытым после того, как обработчик запуска отключен.

После экспорта следуйте этому руководству, чтобы оно не отображалось в доке.

Чтобы выйти, перейдите в «Монитор активности», найдите то, как вы сохранили приложение, и нажмите X в верхнем левом углу окна.

 ## Time Limiter - Created by Josh Brown - Created June 8th 2018 - Last Modified June 8th 2018 ##
global applist
global timelimit
global timelimits
global day1
global day2


## Settings ##
set applist to {"Google Chrome", "App Store"} -- Apps to limit
set timelimit to 10 -- time to limit in min, this is cumulative between all application
set alert1 to 5 -- time when to give a warning (great for giving a 5 min warning so they know they should save and wrap up what they are doing)

## Alert Settings ##
set alertme to false
set bypassattempts to 0
set maxbypassattemtps to 3 -- If the kid trys to reopen application after timelimit has expired alert you

## Bypass/Extention Settings ## -- If you would like to give the kid an extesion or bypass the block
set allowbypass to false
set pass1 to ""



set timelimit to timelimit * 60 -- Make into a seconds
set alert1 to alert1 * 60

set timelimits to timelimit

on is_running(appName)
    tell application "System Events" to (name of processes) contains appName
end is_running

on checkapps()
    set x to false
    repeat with a from 1 to length of applist
        set b to item a of applist
        if is_running(b) then
            set x to true
        end if
    end repeat
    return x
end checkapps

on killall()
    tell application "System Events"
        repeat with myProcess in applist
            set theID to (unix id of processes whose name is myProcess)
            try
                do shell script "kill -9 " & theID
            end try
        end repeat
    end tell
end killall

on logme(msg)
    set time1 to do shell script "date"
    do shell script "echo \"" & msg & " " & time1 & "\" >> ~/Library/Logs/Time_Limit.log"
end logme

on checkday()
    if day of (current date) is not equal to day1 then
        set timelimit to timelimit + timelimits
        set day1 to day of (current date)
    end if
end checkday

logme("Begin Timer with Apps List: " & (applist as string))
set day1 to day of (current date)
repeat while 1 = 1
    checkday()
    if checkapps() then
        if timelimit > 0 then
            set timelimit to timelimit - 1
            if timelimit is alert1 then
                logme("Time Left:" & (timelimit as string) & "Displaying alert")
                display notification "Please finsh what you are doing and save your work" with title "Time Limit Almost Up" subtitle ((timelimit * 60) & " Minitues remaing") as string
            end if
        else
            (*
            tell application app1
                quit
            end tell
            delay 20
            *)
            if checkapps() then
                killall()
                logme("App Runnning after Limit, Killing")
            end if
        end if
    end if
    delay 1
end repeat
Очень хорошо! Это вполне может помочь, за исключением ручного ежедневного перезапуска приложения, от которого я рано или поздно откажусь. Как только вы измените его так, чтобы он «установил и забыл», похоже, он будет делать то, что нужно.
@ Винсент, я редактировал. Теперь он должен сбросить ограничение по времени в 12:00.
@Vincent Обратите внимание, что этот скрипт очень легко обойти. Изменение даты, переименование исполняемого файла и его открытие и т. Д. Все это обойдет эту систему. Я полагаюсь на тот факт, что ваши дети слишком малы, чтобы понять это.
Спасибо, Джош! Они достаточно взрослые, чтобы изучать программирование, но им еще предстоит использовать AppleScript, поэтому определенно есть шанс, что они поймут, как обойти это, но им потребуется некоторое время, чтобы понять это. Мы только что заказали новый компьютер, и я проверю его там, как только он прибудет.
@ Винсент Я отредактирую свой ответ, чтобы предоставить способы предотвратить обход ограничений. Например, блокировка системных настроек, чтобы дата не могла быть изменена без пароля администратора, что делает учетную запись только приложением с разрешениями на чтение, поэтому они не могут изменить имя исполняемого файла. Вы также можете экспортировать только для чтения, чтобы предотвратить изменение кода.
@ Винсент Как работает сценарий?
@ Винсент Привет?