access trouble when controlling remote mac with AppleScript - network-programming

I'm new to all this programming stuff, but trying to learn. I've had moderate success, but feel like it's more accidental than intentional. I'd appreciate help learning and understanding AppleScript in particular and networking, automation and programing in general.
Here's the environment: Almost all Apple with two Minis, a couple of laptops and various iOS devices including an AppleTV. The network consists of an Apple Airport Extreme, and an older D-Link switch I rescued (with permission) from the recycle bin at work. There are three Foscam wi-fi cameras as well. One of the Mini's (named Dora) is acting as a file server running Yosemite and the OS X Server application with a growing RAID 1 array for media storage.
What I’d like to be able to do is to run a single AppleScript from my laptop (Adam’s Macbook) that does the following:
Launch the application iCamSource on Adam’s Macbook
Change “Require Password to Wake” to true on Adam’s Macbook
Quit iTunes on Adam’s Macbook if it’s running
Start the current ScreenSaver locking Adam’s Macbook
Quit iTunes on Dora if it’s running
Start the current ScreenSaver on Dora if it’s not already running thereby locking Dora
I’d also like to have a single script on Adam’s Macbook that reverses these actions.
I have been able to launch iCamSource, set “Require Password to Wake” to true and start the ScreenSaver on Adam’s Macbook with a lot of Google-Fu, much trial and error, and quite a bit of frustration. I’ve not yet tried to quit iTunes if it’s running. That’s a new idea/requirement, but I think it should be pretty simple to add to the functioning script.
Where I’m running into trouble is controlling Dora from a script on Adam’s Macbook. I run into access errors (905 and 927 generally) about half to two thirds of the time I run the script. I’ve tried every syntax option and many combinations of syntax that I found via Google searches, but this is the one that has the most (but still inconsistent) success.
set remoteMachine to "eppc://remoteMachineadam:slajdlll#10.0.1.2"
tell application "iTunes" of machine remoteMachine
quit
end tell
When reading various articles explaining how to do this, sometimes the scripts use eppc, others use epps and I’ve not seen a consistent result with either one. Some of the articles use the actual IP address of the remote machine, others use password#name.local, so that syntax would be slajdlll#dora.local. That change also seems inconsistent in its results.
This seems to be a pretty basic task, and I’ve found lots of articles that do this very thing, but their methods don’t work in my environment. Many of the articles I’ve read are quite old, so the syntax may be out of date. I’m kind of at my wits end, but feel I should be able to make this work. Any help y’all could provide would be VERY appreciated.
Update - I had the scripts working last night in all regards except controlling the remote machine. This morning, I tried to open the "Away" script to again tackle the remote control issue and I get a Syntax Error Unable To Authenticate User message and the script won't compile. Here's the code:
tell application "System Events"
try
tell application "iTunes" to quit
end try
try
tell application "iTunes" of machine "eppc://Dora.local" to quit
end try
tell security preferences
set require password to wake to true
tell application "iCamSource" to activate
tell application "System Events" to start current screen saver
end tell
end tell
Both "Away" and "Home" scripts run from the AppleScript menu. When I unlock the ScreenSaver after running the "Away" script I get a dialog box stating "There was a problem connecting to the server "Dora's Airport Extreme. The share does not exist on the server. Please check the share name, and then try again." I'm beginning to think I may have a Permissions error on one or more of the machines, or if there's another problem that's making the scripts act inconsistently.
Thanks for all the help so far!
UPDATE Ok, it seems that there was a problem with iPhoto and Screen Saver interacting with the files on the networked hard drive. Opening iPhoto and slowly opening each image and re-linking those that had lost their location seems to have solved that problem. I am still encountering the access error code 905. In order to troubleshoot this process, I'm stripping the script down to one task, to quit iTunes on the remote machine named "Dora" Here's the code:
set Dora to "epps://adam:slajdlll#10.0.1.2"
try
tell application "iTunes" of machine Dora to quit
end try
Here's the event log that running that script generates:
tell application "iTunes" of machine "eppc://epps/adam%253kslajdlll%4010.0.1.2.local"
quit
--> error number -905
end tell
Is it possible/probable that the OS X Server application is mis-configured and is preventing the script from controlling the remote machine? Any other thoughts or things to try?
Thanks!
UPDATE 2
In the Groups section of the OS X Server application running on the remote machine, I found that there is a group called Apple Remote Events ACL. When I click the Edit button to view it's settings I see the actual account name is "com.apple.access_remote_ae-disabled". I wonder if this is telling us something. I searched several libraries for "com.apple.access" thinking it may be something that could be edited, but found nothing. I'm a member of that group. I tried removing myself from the group and tried the script with no change in the results so I added myself back into it.
UPDATE 3
As suggested I'm trying to eliminate OSX Server from the equation. To do this I'm going to try to launch TextEdit (since it's faster to launch than iTunes) on a third machine, known as Office Mini that does not have the Server application on it. Here's the script:
set OfficeMini to "eppc://10.0.1.196"
try
tell application "System Events" of machine OfficeMini
open "/Applications/TextEdit.app"
end tell
end try
When I ran the script initially I got two dialog boxes asking for username and password. I supplied them and checked the "Save in Keychain" checkbox. The script didn't open TextEdit, but I'm not getting the access errors. I am getting different errors though, -600 or -10010 depending on if I use System Events or the Finder. Using the list on this page: Nicholas Reilingh AppleScript Error Codes I find that with System Events I get an error -600 which means the application isn't running. That's no surprise, I'm trying to open it. When I use the Finder instead of System Events, I get an error -10010 which the list indicates is "Handler can’t handle objects of this class." So, there's progress, but I'm still stumped.
UPDATE 4 To further clarify/simplify, I tried running a simple script to open iTunes on the Office Mini locally on that machine and it worked fine.
tell application "iTunes" to activate
Substituting the "quit" for "activate", and trying this syntax with several different applications all worked quite well and very fast. I tried the same script and variations on the Dora machine with the same, successful results.
I then tried to make that syntax work remotely with this code:
set OfficeMini to "eppc://10.0.1.196"
tell application "iTunes" of machine OfficeMini to quit
I got this error message in the event log:
tell application "iTunes" of machine "eppc://10.0.1.196"
quit
--> error number -927
Result:
error "iTunes got an error: Unable to authenticate user." number -927
So, since OSX Server isn't running on the Office Mini, this seems to eliminate that as a culprit for the error. I tried altering the code with another variant I saw online that uses "epps" in place of "eppc" which results in a similar error message: "iTunes got an error: Remote access isn’t allowed." number -905. I did not get dialog boxes requesting credentials. When I've seen the "epps" string used online, it was formatted as "epps://username:password#location" so I used "epps://adam:slajdlll#10.0.1.196" and received the same error message. I even tried "Adam" in place of "adam" with no change in the results.

Yes, step 1 is to try to make your script as simple as possible to narrow down the point of failure.
I have copied your minimal script onto my machine & gotten it to work:
set Dora to "minipuppy.local"
try
tell application "iTunes" of machine Dora to quit
end try
A few notes:
I used "minipuppy.local" (the Bonjour linklocal name) rather than your eppc stuff, because I know what the former is, but not the latter. (You can get the link local name from the Sharing prefs panel* where it says "Computers on your local network can access your computer at:XXXXX"
An authentication dialog popped up saying that I needed to enter the username and password for the target machine - but it did have
an eppc address in the dialog (I didn't take a screenshot :-( )
After entering the username/password my script did nothing. Interestingly, I could not get it to print out a log as yours has?
I fixed this by going to the target Mac's System Preferences & enabling "Remote Apple Events" in the Sharing panel*. After turning that on, my script worked.
I'm hoping enabling "Remote Apple Events" is the ultimate solution to your simplified problem.
*Apple Menu -> System Preferences -> Sharing

Related

Print jobs print locally but not through cloud print

We have used Google Cloud Print Service for a few years now, very successfully. Periodically we have issues with print jobs failing, where restarting the Cloud Print Service and the Print Spooler will fix it. That is not the case today.
Today, I am able to print directly to the printer, both from my computer and from the server where we host Google Cloud Print Service. When I attempt to print from Google Cloud Print, I see the print job appear in the queue on the server, and then disappear, and in the Cloud Print queue it simply says "error" with no details on what is happening.
I restarted the print service with logging enabled, attempted to print again, and checked the debug log, with no details present. I'm stumped.
EDIT: After finding the correct debug log, I see this:
CP_CONNECTOR: Job failed (spool failed)
Has anyone dealt with this before, or know of a solution?
Things I have already tried:
Re-connecting Cloud Print Service to our Google account
Re sharing all printers
Reinstalling Cloud Print Service
Restarting the server
Reinstalling printers
After doing many many things, and finally getting Google support on the line, we determined it was a glitch in the Cloud Print Service. The work around, which I was unaware of, and the reason I'm posting this answer, was to use the Chrome Connector.
You can get to that by visiting chrome://devices and then sharing the printers through that form, which looks identical to the one that you get with the Cloud Print Service. I recommend clearing your printer list from Cloud Print first, so you don't get confused.
Once you've shared them, you can then share the printer through Cloud Print just as you would have before.
The only caveat, and the reason this is a work around and not a fix, is that you have to maintain an open Chrome session, meaning you have to keep chrome open for the printers to work. That's fine for us, as there is always a chrome tab open on the server anyway, but it may not work for you long-term.
I have installed the Beta version of chrome, and it seems to resolve the issue. I had this issue on 3 of my 11 servers. All where running stable versions. It was odd that only 3 where not allowing google to print. Once I installed the 64bit beta version, I was able to print. As long as the server was running the Version 53, people could print. It did not matter if someone had a version 52 on there computer. Hope this helps.

What reason and solution for WebConnector Error : "Update aborted. Company file is locked by another client ASP17"

I am using WebConnector version -2.1.0.30 with QuickBooks 2015 Enterprise.
WebConnector was working fine but all of a sudden when I run WebConnector and click on "Update Selected" button then it came up with this error (Note: by that time no one was logged on to QuickBooks).
Then as a quick fix I have deleted that QWC file and added a New one, that works fine.
Can any one please come up with a better solution and the reason behind this error.
Thanks in advance.
Chances are you're running QuickBooks on a shared Windows Server, or in a hosted scenario with someone like Right Networks, Intuit Cloud, Cloud9, etc.
If so, this error means that Windows Server auto-logged-out some user and closed QuickBooks for them, but is still holding the file lock on the QuickBooks company file. Windows will automatically release the file lock after a short amount of time (usually 30 minutes to an hour).
There is no "fix" outside of waiting for a while, and then trying again.

view iphone console logs without a mac

Is there a way to view the iphone console logs without having a mac ?
It used to be possible using the iPhone Configuration Utility but it does not seem to be available any longer.
I saw a tool called iTools but it seems to require a 32bit version of itunes which is also not available any more.
Given an iPhone device + windows + linux, Is there any workaround / tool to view the iphone console logs?
Realizing it is over half a year ago you asked this, but since it does not have an accepted answer yet:
I ran into this very same issue over and over, and got fed up with it, so I decided to have a go at writing a script that displays console messages in HTML, so you can just view everything in the webpage itself, without having to resort to a console-replacement or a tedious remote debugger (for which you, indeed, require a Mac), without having to modify each console call in existing code.
The key lies in 'replacing' the four main functions in window.console: log, warn, error and trace. This is done by redifining each method, adding own code to that, and calling the original method in the end. Jakub Fiala wrote the basic script for that, on which I built the rest: https://gist.github.com/jakubfiala/8fe3461ab6508f46003d
I dubbed it 'MobileConsole'. It is quite unobtrusive and will 'catch' all console.log (or .warn, .error or .trace) events, and even bind to window.onerror.
I have created a separate page for this script with an elaborate explanation on how it works, including a demo, over here.
Download this from the app store onto the iphone, you can then view logs directly on the phone:
https://itunes.apple.com/us/app/console/id317676250?mt=8
Please note, this is an old app, it will crash when launched, then on reopening it will show you the device logs.
If that fails, here is a link to the iPhone configuration utility for windows:
http://download.cnet.com/iPhone-Configuration-Utility-for-Windows/3000-20432_4-10969175.html

How to prevent load of meteor.local (when building ios app with phonegap)

This is an extension of a question I asked here, which went unanswered. I am attempting to use the Meteor app on my iPad that I'm hosting on my own remote server. The issue is that when I run the following command, the app builds successfully:
sudo meteor run ios-device --mobile-server=XXXX:XXXX
The problem begins when I click the build button in Xcode to deploy the app to my device. It seems to build everything OK and even load the data from my remote server. But after a few seconds, it reverts back to a local database/build. When I check the Xcode log, it says "Finished load of http://meteor.local/" so it seems to be overwriting the remote data with new, local data. I'm not sure if I have something enabled that's causing Xcode to load a local database or if there's something that I have to turn off to prevent it from loading.
UPDATE:
I've resolved the issue using the suggestion from Jey DWork to apply the missing environment variables in the Meteor server startup.
The ones I added were:
Meteor.absoluteUrl.defaultOptions.rootUrl
process.env.ROOT_URL
process.env.MOBILE_ROOT_URL
process.env.MOBILE_DDP_URL
Without setting these, the ROOT_URL seemed to be getting overwritten after the initial load. As these environment variables do not seem to be documented, I'm still going to search and see if there is a different solution to this issue (as it seems strange that the app would have to re-load itself multiple times before it's usable). For now though, this is a temporary solution.
Have a look at this post :
I've understood my problem, maybe your problem is the same, all explanations here : stackoverflow.com/questions/34658956/
Your app for smartphone must be built with --server=http://IP:PORT parameters
And
Your app for server must be started with --mobile-server http://IP:PORT parameters

Starting a windows service fails with error 1053

I have a windows service that is failing to start, giving an error "Error 1053: The service did not respond to the start or control request in a timely fashion".
Running the service in my debugger works fine, and if I double click on the the service .exe on the remote machine a console window pops up and continues to run without problem - I can even see log messages showing me that the program is processing everything the way it should be.
The service had been running fine previously, though this is my first time, personally, trying to deploy it with the most recent changes made to the program. I've evaluated those changes and cant figure out how they might cause this problem, particuarly since everything runs fine when not started as a service.
The StartRoutine() method of the service impelmentation is empty, so should be returning in a "timely fashion".
I've checked the event logs on the computer, and it doesn't give any additional information other than it didn't hear back from the service in the 30 second requisite time frame.
Since it works on my machine, and as a double-clicked executable, how would I go about figuring out why it fails as a service?
Oh, and it's .NET 2.0, so it shouldn't be affected by the 1.1 framework bug that exhibited this symptom (http://support.microsoft.com/kb/839174)
The box is a windows server 2003 R2 machine running SP2.
This is a misleading error. It's probably an unhandled exception.
Empty your OnStart() handler then try this in your constructor...
public MainService()
{
InitializeComponent();
try
{
// All your initialization code goes here.
// For instance, my exception was caused by the lack of registry permissions
;
}
catch (Exception ex)
{
EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
}
}
Now check the EventLog on your system for your Application Error.
Could be a number of things and it might help to get a stack trace on the machine exhibiting the problem. There are a number of ways to do this but the point is that you have to see where this is failing in the code.
You can do this with remote debugging, but a simple thing might be to just log to the event logger, or file log if you have that. Literally, putting "WriteLine("At class::function()") throughout portions of the code to see if you've made it there.
This will at least get you looking in the right direction (which ultimately is the code).
Update:
See Microsoft's How to Debug Windows Services article for details in troubleshooting startup problems using WinDbg.
This related question details nice ways to debug services that are written in .NET.
I agree with Scott, the easiest way to find out what's happening is to put some traces in the start-up code (maybe it doesn't even come to your start-up code).
If this doesn't help, you can post your code here so others can take a look.
perhaps lacking some dependence, try this :
- deregister your service
- register again
If fail at register means that lack an module.
If the StartRoutine is empty, you are probably starting it somewhere else.
IIRC you need to fire off a worker thread, and then return from StartRoutine.
One of the problems which may lead to this error is if windows service which needs to be deployed consists of some error i.e it may be simple authorization error or anything as in my case I have referenced some folders and files for logging which were not existing, but when provided the right path of those file and folders it solved my problem.
I ran through every post on this particular subject and none of the responses solved the problem, so I'm adding this response in case this helps someone else. Admittedly this only applies to a new service, not this specific case.
I was writing a File listening service. As a console app, it worked perfectly. When I ran it as a service, I got the same error as above. What I didn't know (and many of the MSDN articles about services conveniently leave out) is that you need to have your class executed from within ServiceBase.Run( YourClassName());. Otherwise, your app executes and immediately terminates and because it terminated, you get the error above even if no error or exception occurred. Here is a link to an article about this. It actually discusses setting up your app for dual use - Console app and service: Create a combo command line / Windows service app
I had that issue and the source of my problem was config file. I edited it in notepad and notepad added one special character which cause service not to run properly because config file was ruined. I saw that special character in notepadd++ and after delete it, service started to run successfully as previous did.
In my case, the correct .NET framework was not installed on the server that I was installing the Windows service on.
One other reason is If you copy the DLL in 'debug' mode to installation folder this issue will come.What you need to do is Run the project in 'Release' mode copy the DLL or directly form Release folder rather than Debug folder,,and copy that DLL in to installation folder,it will work.You can see the reduction in size of DLL ,it will not contain any debug symbols and like that

Resources