0 votos

Cerrar todos los programas después de 1min sin la interacción del usuario

Trabajo en una tienda que vende ordenadores Apple.

Estoy tratando de encontrar una manera de cerrar todos los programas abiertos después de unos minutos. Es debido a nuestra cuenta de demostración de la tienda para los clientes. Después de abrir todos los Windows, es bastante desordenado y quiero conseguir una experiencia de usuario limpia.

Lo único que necesitaría es cerrar todos los Windows. Debería funcionar como el comando:

killall -u admin

PERO sin permiso del administrador

Y después de 1 minuto,

SIN interacción del usuario.

Tal vez, hay una manera de: cerrar todas las ventanas y programas, sin que aparezca algo como "¿realmente quieres? cerrar la sesión de la cuenta de demostración, y volver a cargar.

He encontrado esto, después de buscar un tiempo, pero no sé si es lo que buscaba y cómo hacerlo funcionar:


Apple script Log Out:

en ejecución indicar a la aplicación "Eventos del sistema" que cierre la sesión terminar la ejecución


Puedes envolver esto en un alias de bash usando el comando osascript: alias maclogout="osascript -e 'dile a la aplicación "Eventos del sistema" que cierre la sesión'"

Es lo mismo que hacer clic en " > Cerrar la sesión [nombre de usuario]...", y se cerrará la sesión después de 2 minutos de espera

Esto se combina fácilmente con el comando sleep: alias delayedlogout="sleep 3600; maclogout"

o podrían combinarse en un solo alias:

alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"

¿Podría alguien dar algún consejo? Gracias.

1voto

SPRBRN Puntos 1008

Aquí tienes. Un simple script que puedes configurar para que se ejecute automáticamente en segundo plano usando launchd u otro medio de tu agrado...

#
# From: http://www.dssw.co.uk/blog/2015-01-21-inactivity-and-idle-time
# Returns seconds system is idle, ie no user input...
#
set cmd to "echo $((`ioreg -w 0 -c IOHIDSystem | sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))"

#
# How many seconds user can be idle before we log them out
#
set maxIdleAllowed to 60

#
# How frequently we check the idle time, in seconds...
#
set checkInterval to 30

#
# We loop forever...
#
repeat
    set secsIdle to 0

    try
        set answer to (do shell script cmd)
        set secsIdle to (answer as number)
    on error
        # May want to do something fancy here...
        exit repeat
    end try

    log secsIdle

    if secsIdle > maxIdleAllowed then
        logUserOut()
    end if

    delay checkInterval
end repeat

on logUserOut()

# Exclude Finder at minimum because bad things happen, so I am told...
set excludedApps to {"Finder"}

tell application "System Events"
    #set oAppList to get id of every application process whose background only is false
    set {processList, idList, pidList, bidList} to the {name, id, unix id, bundle identifier} of (every application process whose background only is false)
end tell

set i to 0
repeat with p in processList
    set i to i + 1

    log "ID: " & item i of idList
    log "PID:" & item i of pidList
    log "Name: " & p
    log "Bundle: " & item i of bidList

    if p is not in excludedApps then
        try
            log "Quit with out saving app with id: " & item i of idList

            # timeout to prevent blocking by certain apps...
            with timeout of 1 second

                # Use bundle id for some odd apps... soffice i'm talking to you!?!
                tell application id (item i of bidList) to quit saving no

            end timeout

        on error
            try
                log "Giving up, killing pid: " & (item i of pidList)
                do shell script "kill " & (item i of pidList)
            end try
        end try
    end if

    delay 1

    log "" & return
end repeat

# Finally, with all apps closed, kill our session...
tell application "loginwindow" to «event aevtrlgo»

end logUserOut

EDIT: Su pregunta ya ha sido respondida realmente, es sólo que su acción, después de tiempo de inactividad, es diferente. Echa un vistazo aquí en,

¿Cómo puedo iniciar automáticamente una aplicación cada vez que el Mac está inactivo?

EDIT2: Ahí lo tienes. Añadida la rutina de cerrar las aplicaciones bien si es posible, y si no, matarlas y cerrar la sesión.

0voto

Trellis Puntos 109

Creo que querrás quedarte con el script de Vic funcione o no porque ofrece algunas opciones que esta sugerencia no ofrece, pero si tienes una versión reciente del sistema, prueba con la configuración accesible desde el prefano de Seguridad (haz clic en el candado) > Avanzado (botón en la parte inferior derecha) > Cerrar sesión tras _ minutos de inactividad. Creo que 5 puede ser el número más bajo que puedes mantener ahí.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X