How to allow a different user to execute graphical applications [duplicate]
Solution 1:
From the command line you have to find the Unix executable and run it using sudo like so:
$ sudo -u Bob /Applications/Firefox.app/Contents/MacOS/Firefox
… or the same with su: (however this also needs you to set up a password for root - which I do not recommend)
$ su Bob
$ /Applications/Firefox.app/Contents/MacOS/Firefox
(…or the above in one line:)
$ su Bob -c /Applications/Firefox.app/Contents/MacOS/Firefox
In the past, the easiest way for PPC Macs was to use Pseudo, but it has been long discontinued. This is to drop the application icon on Pseudo's icon or window.
Solution 2:
See https://apple.stackexchange.com/a/102105/1860 for why su
does not work for all applications.
launchd's bsexec
Recent versions of launchd
have the ability the launch applications within another user's session; although Apple engineers have not recommended its general use.
Use the bsexec
option in launchctl to target the appropriate user session:
bslist [PID | ..] [-j]
This prints out Mach bootstrap services and their respective states. While the namespace
appears flat, it is in fact hierarchical, thus allowing for certain services to be only avail-
able to a subset of processes. The three states a service can be in are active ("A"), inactive
("I") and on-demand ("D").
If [PID] is specified, print the Mach bootstrap services available to that PID. If [..] is
specified, print the Mach bootstrap services available in the parent of the current bootstrap.
Note that in Mac OS X v10.6, the per-user Mach bootstrap namespace is flat, so you will only
see a different set of services in a per-user bootstrap if you are in an explicitly-created
bootstrap subset.
If [-j] is specified, each service name will be followed by the name of the job which regis-
tered it.
bsexec PID command [args]
This executes the given command in the same Mach bootstrap namespace hierachy as the given
PID.
bstree [-j]
This prints a hierarchical view of the entire Mach bootstrap tree. If [-j] is specified, each
service name will be followed by the name of the job which registered it. Requires root priv-
ileges.
The recommended approach is to write a launchd job ticket and restart the Mac - or ask the user to log-out and back in again.
Solution 3:
One more method:
# chown someuser command
# chmod u+s command
$ ./command
Thanks to wysota at : http://www.qtcentre.org/threads/4730-Linux-Bash-Run-a-command-as-another-user
(Spent a lot of time hunting for something that works in my particular situation, figured I'd spread the wealth)