È possibile consentire l'utilizzo di un'app o di un programma per un orario specifico su un Mac?

1

Stavo cercando di ottenere questo risultato utilizzando un secondo account (che è l'account amministratore) e il Controllo genitori, ma sembrava che non fosse possibile farlo.

So che ci sono alcuni programmi che puoi scaricare per aiutarti con questo, (Cold Turkey, per esempio). Ma sarebbe molto più facile se potessi farlo usando solo strumenti già disponibili su macOS.

    
posta John Smith 23.08.2018 - 17:13
fonte

2 risposte

3

Puoi farlo con due strumenti incorporati:

  • Gatekeeper per consentire / impedire l'accesso alle app (ne ho scritto in questo post )
  • Avviato per gestire la pianificazione

Gatekeeper

Usando Gatekeeper, possiamo creare "regole" che ti permettono di bloccare / abilitare le app. Utilizzando il tuo esempio, possiamo creare un elenco di app a cui è consentito solo il venerdì:

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

Il vantaggio di questo è che puoi aggiungere più app con la stessa etichetta e attivarle / disattivarle in un unico comando:

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

launchd

Per questo è necessario un semplice script per abilitare / disabilitare le app ed è necessario eseguirlo come demone (richiede sudo privilegio), quindi deve risiedere in /Library/LaunchDaemons .

Ho usato la convenzione di denominazione com.user.FridayApps.plist e FridayApp.sh per lo script.

Script di 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

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

Come funziona

Quello che sta succedendo qui sono due cose:

  • launchd esegue uno script due volte. Una volta al momento per eseguirlo e un'altra volta per disattivarlo
  • un semplice script bash per attivare / disattivare l'app abilitata. Verifica la data e quindi esegue il comando appropriato
risposta data 23.08.2018 - 22:56
fonte
0

Leggi l'introduzione

Nel seguente tutorial farai quanto segue:

  1. Crea un profilo di configurazione che bloccherà le applicazioni in un determinato percorso
  2. Un'applicazione che aggiungerà e rimuoverà il profilo a seconda del giorno
  3. A LaunchDaemon che eseguirà l'applicazione ogni intervallo (5 min)

Crea l'app

Apri questo in Script Editor ed esportalo come applicazione di sola lettura e assicurati che rimanga aperto dopo l'esecuzione del gestore non su

Dopo l'esportazione, segui questo  guida per impedirne la visualizzazione nel dock.

   # 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

Crea la configurazione del dispositivo mobile

Usa

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

per controllare quali app bloccare.

Salva quanto segue in un file con estensione .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>

Crea il LaunchDaemon

Nota: devi essere un amministratore per farlo.

Salva il seguente file in /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>

Cambia le autorizzazioni con il seguente comando:

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

Carica il daemon

Nota: devi essere amministratore per farlo.

Per avviare il demone, usa questo comando:

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

Il programma cercherà le app ogni 5 secondi e le chiuderà se sono in esecuzione.

Per fermare il demone usa questo comando

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

Applaudire te stesso

  1. Applaudire
risposta data 23.08.2018 - 22:04
fonte

Leggi altre domande sui tag