How to Lock (not sleep) my Mac using NSAppleScript or any other command that can be executed from a Mac app - macos

In my Mac app i am trying to lock my Mac based on some actions in my app. Until now i have only got a way to put it to sleep but not lock.
Currently i am doing this :
let appleScript = NSAppleScript(source: "tell application \"Finder\" to sleep")
appleScript?.executeAndReturnError(nil)
Please guide.

Instead of
tell application "Finder" to sleep
Use the following:
do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -suspend"
You will need to escape the " characters with \ as you have already with the Finder command.

Related

How to force close terminal window id using AppleScript?

I am starting a new terminal window from a terminal:
osascript -e 'tell app "Terminal" to do script "myProgram.sh"'
Since the new process is not ending(it is basically a server), I want to be able to stop it at some point using AppleScript.
If I do:
osascript -e 'tell app "Terminal" to close window id {windowId}'
I am getting the alert box "Do you want to terminate running process...?".
Is it possible to force close the window id? If not, how can I confirm this alert box using AppleScript?
You could try this:
do shell script "killall -QUIT Terminal"
I hope this helps you solve your problem 🙂.

Call osascript through perl in OSX 10.9 doesn't work anymore

I'm writing an application for Mac (OSX, not iOS).
The installation runs a perl script which contains some "osascript" call, for example:
$res = qx(osascript -e 'launch application "MyApp"');
Or:
$res = qx(osascript -e 'tell application "System event" to make login item at end with properties {path:".... .app", hidden: false}');
and more...
I have two Mac machines, one with OSX 10.9 and other with OSX 10.7.
When I'm running the installation on OSX 10.7 - All works good.
When I'm running the installation on OSX 10.9 - the call to osascript doesn't work (all of them, not only one). I tried to run only the osascript command in terminal, and it works!
The installation process done from user (not admin) but ask for admin permission during the installation.
Someone know what have been changed in the new OSx?
Thanks!

Applescript fails with error (-600) when launched over ssh on Mavericks

I've tried searching for this, and have seen others with similar problems but don't seem to have found an answer anywhere....
I have an AppleScript that I am trying to run over ssh so that I can remotely control my mac. This has worked previously with OSX 10.8 but no longer seems to work since upgrading to 10.9.
The command I am executing is:
ssh <user>#mymac.local "osascript -e 'tell application \"iTunes\" to play'"
I have already set up RSA keys so the ssh session opens correctly
I am connecting as the same user that the Mac is currently logged in and running under
iTunes is running on the Mac with that user at the time the script is launched
The script fails, coming back with:
execution error: iTunes got an error: Application isn’t running. (-600)
Similarly, a number of other scripts that I had previously been using also seem to now be broken on 10.9 with the same error, so this seems to be related to the fact that it's running over ssh, rather than an issue with iTunes or a specific application.
I've tried packaging the applescripts as applications, saving them on the remote Mac, and then opening them from within an ssh session, but this also fails:
ssh <user>#mymac.local
open "~/Desktop/Play Music.app"
(Where 'Play Music.app') is an applescript exported as an app).
This does not report an error within the ssh session, but an applescript dialog appears on the remote mac:
I also have several scripts that were scheduled with crontab on my Mac, and these are also failing since upgrading.
I assume this is some sort of security change as part of Mavericks, but I can't seem to find a way to make it work again. Does anyone have any solutions to this?
Application isn’t running(-600) is an operating system error.
An operating system error is an error that occurs when AppleScript or
an application requests services from the Mac OS. They are rare, and
often there is nothing you can do about them in a script, other than
report them.
Arrrrgh! I don't want this to be the answer, but after trying just about everything, this now seems to be working after a restart.... My guess is that something in appleeventsd got confused (although restarting just appleeventsd on its own didn't fix anything). After a restart osascript seems to be behaving again. I'm still not convinced this is fully fixed, but it does seem to be working for the moment...
For me, it was Apple Entitlements in Xcode.
Specifically,
com.apple.security.temporary-exception.apple-events
Set it as an Array
Then add two items to it.
com.apple.finder
com.apple.iTunes
See: My applescript doesn't work any more when I upgrade my OS X to 10.9
Apple Script may not be the issue. Assistive devices could be what is causing this.
Enable access for assistive devices and applications by opening System Preferences > Security & Privacy > Privacy > Accessibility and check the applications you want to allow access.
for me this happened when I tried to open gitk. Changing back to the branch I was on before, and gitk was able to open again
On my computer, with an uptime of 162 days, killing appleeventsd fixed the problem. I think appleeventsd and long uptimes is a bad combination.
System Events is a really finicky asshat component of OS X. Here is my method for getting around that dreaded "Application isn't running -600" error:
set app_name to "System Events"
set the_pid to (do shell script "ps ax | grep " & (quoted form of app_name) & "$
if the_pid is not "" then do shell script ("kill -9 " & the_pid)
tell application "System Events"
-- activate
end tell
I kill "System Events" with a kill -9 and then relaunch it.
#benmarbles code seems to be missing something at the end of line 2 -- it won't even compile.
Anyhow, I've seen the same issue with "Image Events" and I solved it with a simplified version of that script. Here's how I handle it:
tell application "System Events" to set thePID to (unix id of process "Image Events")
set killCMD to ("kill -9 " & thePID) as text
do shell script killCMD with administrator privileges
Replace Image Events with System Events to kill that process instead. The System Events process keeps itself alive, so there's no need to do anything to relaunch it.
I got the same error when I was unable to do GUI Scripts, but changing the System Preferences > Security & Privacy > Privacy > Accessibility settings for that specific app and adding a delay 0.5 between each line corrected it!
I was confused by this message "for System Events" not working in newer versions of Mac OS X from the command line:
osascript -e 'tell application "System Events" to display dialog "Build finished"'
It turns out the syntax of Applescript is (changed to?) just:
osascript -e 'display dialog "Build finished"'
Hello from 2k19 :) The approach below has helped to me
tell app "app_name"
launch
delay 2
end tell
tell app "app_name"
do something usefull
end tell
or
osascript -e "tell app \"app_name\"" -e "launch" -e "delay 2"-e "end tell" -e "tell app \"app_name\"" -e "do someting usefull" - e "end tell"
For my issue resolved by enable access for AEServer by opening System Preferences > Security & Privacy > Privacy > Accessibility
You will also get this error if you run the script as the wrong user via ssh - make sure you are logged in as the same user you want to script.
I killed the "System Events" process from Activity Monitor and then my ssh script worked. "System Events" was restarted as a result. I'm guessing it just got into a messed up state.
For me, the line:
tell application "Contacts"
failed with the error -600 only if the Contacts app was already open (most of the time it worked, but I noticed it only failed when the app was running).
I have added:
killall Contacts
in the bash (or zsh) script calling osascript and now I don't get the issue any more.

Shell script execution using action script 3.0

I have shell script command , i would like to execute it using action script 3.0.
Here is my shell script below
#!/bin/sh
set backslash_quote = "yes"
osascript -e "tell application \"System Events\" to set visible of some item of\
( get processes whose name = \"Terminal\" ) to false"
Where is the shell script that you are trying to execute? Is it on the server that the Flash will be hosted from or is it on the end users computer?
If it is on the server then you will need to set up a service to do this. Personally, I recommend PHP.
If it is on the end users machine, take a look at Creating Hidden File with Flex/AIR on Win. The answer in that link will give you an idea how to execute scripts on the users machine... Though I am pretty sure that will only work in AIR apps.

Script to shutdown mac

I'm trying to automate the shutdown of my mac, I've tried the scheduled shutdown in energy saver and I wanna sleep but these don;t seem to work. VLC player runnign seems to prevent the shutdown. I think I need a script to forcefully shutdown the mac regardless of of what errors may thrown to screen by various programs running.
Thanks
Ok,
This is the applescript code im using to shutdown may mac. I've added it as an iCal event thats runs nightly.
tell application "System Events" to set the visible of every process to true
set white_list to {"Finder"}
try
tell application "Finder"
set process_list to the name of every process whose visible is true
end tell
repeat with i from 1 to (number of items in process_list)
set this_process to item i of the process_list
if this_process is not in white_list then
do shell script "killall \"" & this_process & "\""
end if
end repeat
on error
tell the current application to display dialog "An error has occurred!" & return & "This script will now quit" buttons {"Quit"} default button 1 with icon 0
end try
tell application "System Events"
shut down
end tell
Could you try a simple applescript, which goes something like this...
tell application "System Events"
shut down
end tell
See if it works, and then you can make it run through Automator at certain time, etc.
my solution (somwhat late). Just a bash script with apple in it:
#!/bin/bash
# OK, just shutdown all ... applications after n minutes
sudo shutdown -h +2 &
# Try normal shutdown in the meantime
osascript -e 'tell application "System Events" to shut down'
I also edited the /etc/sudoers (and /private/etc/sudoers) file(s) and added the line:
ALL=NOPASSWD: /sbin/shutdown
Always worked for me for an assured shutdown (knock knock ;-) )
This should do:
do shell script "shutdown" with administrator privileges
If you want to pass the admin password from key chain, with no prompt:
do shell script "shutdown" with administrator privileges password "password here"
But do not store the admin password in clear anywhere. Instead use the keychain access.
Alternatively you could kill all user processes, via:
do shell script "kill -9 -1"
This however would also kill your own Applescript process, preventing it from requesting the shutdown/restart afterwards.
Either way you're playing with fire, when using sudo or kill.
do what linux users do. use a bash script. if u dont know how to create one just go ahead and download ANY bash script u find using your internet search and open it with text edit app and paste the following:
( be careful if many people use the pc , then this method is not recommended, cause they can learn your user login password from inside this script )
#!/bin/bash
echo -n "Enter a number > "
read x
echo [your password] | sudo -S shutdown -h +$x
it will work the same way it works in linux. the terminal will pop up a message and ask you to enter a number. if we choose for exaple 50 , then the pc ( niresh ) or mac will shutdown in 50 minutes.

Resources