是否可以在不实际切换用户的情况下以其他用户身份启动应用程序?


17

有没有办法以另一个用户身份启动应用程序,以便启动的应用程序将使用另一个用户的首选项/历史/资源等?

例如:我已经以Alice的身份登录,并且想以Bob的身份启动Firefox,因此Firefox将显示Bob的浏览历史记录,而不是Alice的浏览历史记录。

我试过了

$ su Bob
$ open -a Firefox

但是没有明显的效果。实际上,活动监视器显示Firefox进程是由Alice(而不是Bob)运行的。

我知道我将需要Bob的登录凭据,但这不是问题。

Answers:


16

在命令行中,您必须找到Unix可执行文件并使用sudo运行它,如下所示:

$ sudo -u Bob /Applications/Firefox.app/Contents/MacOS/Firefox 

…或与su相同:(但是这也需要您为root设置密码-我不建议这样做)

$ su Bob
$ /Applications/Firefox.app/Contents/MacOS/Firefox

(…或一行以上:)

$ su Bob -c /Applications/Firefox.app/Contents/MacOS/Firefox

过去,PPC Mac的最简单方法是使用Pseudo,但长期以来一直停产。这是将应用程序图标拖放到Pseudo的图标或窗口上。


啊,关键是找到Unix可执行文件。su如果不愿意,它也适用sudo。谢谢!
加里·凯纳嫩(JariKeinänen)2011年

嗯,当尝试运行Google Chrome时,我得到了:Trace/BPT trap: 5
Wojciech Bednarski 2012年

使用这种sudo方法时,即使我为其他用户使用了正确的密码,也会遇到登录失败的情况。su另一方面有效(没有密码用于根集)
LapplandsCohan

@lapplandscohan sudo使用当前用户的密码
user151019 '16

1
@ evan.bovie YTes显示他们已经考虑过安全性
user151019 '17

4

请参阅/apple//a/102105/1860,了解为何su并非对所有应用程序都有效。

推出的bsexec

最新版本的launchd可以在另一个用户的会话中启动应用程序;尽管Apple工程师不建议使用它。

使用launchctl中bsexec选项定位适当的用户会话:

 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.

推荐的方法是编写启动的作业凭单,然后重新启动Mac-或要求用户注销并再次登录。


1

另一种方法:

# chown someuser command
# chmod u+s command
$ ./command

感谢wysota:http ://www.qtcentre.org/threads/4730-Linux-Bash-Run-a-command-as-another-user

(花了很多时间寻找适合我的特定情况的东西,以为我分散了财富)


0

您需要ssh。即ssh username@123.456.00。如您所说,您将需要用户密码。然后,您可以执行自己的要求。您需要在“系统偏好设置”>“共享”下启用远程登录:
远程登录首选项
然后,您可以这样做,open -a Firefox并且Firefox将以其他用户而不是您的用户身份打开。


不幸的是,我得到:LSOpenURLsWithRole() failed for the application /Applications/Firefox.app with error -10810.尝试open -a Firefox:-|时
贾里·凯纳嫩(JariKeinänen)2011年

@koiyu试试sudo open -na Firefox
daviesgeek 2011年

它如上所述失败:-/(也使用unix可执行文件的路径失败,尽管有所不同。)
JariKeinänen2011年

1
从SSH会话启动的进程无权访问GUI。如果这在您的系统上可行,我怀疑您在某个时候更改了一​​些低级配置。
Tobias

1
@daviesgeek,但是您是否按OP的要求将SSH SSH到了当前没有GUI的用户之外。
Tobias
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.