我一直尝试以不同的用户身份运行应用程序。
尝试 1
sudo -u otheruser open /Applications/TextEdit.app
启动应用程序,但它使用当前用户,而不是其他用户。
第二次尝试
login username
并su - otheruser
成功登录其他用户,活动监视器中会弹出不同的用户,但open /Applications/TextEdit.app
会返回类似错误LSOpenURLsWithRole() failed with error -10810 for the file /Applications/TextEdit.app.
第三次尝试
sudo su - otheruser -c /Applications/TextEdit.app/Contents/MacOS/TextEdit
似乎启动了该应用程序(它在活动监视器下显示为由其他用户),但是当 Dock 图标无限弹跳时会出现这个错误:_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
问题
那么...我如何以不同的用户身份运行应用程序?
答案1
对于我来说,在 10.8 Mountain Lion 上,这个问题的答案似乎并不完全正确。我认为 demure 在第 2 点有输入错误,肯定有除“-”之外的其他内容。对我有用的方法:您的尝试 3,没有su
and -c
。
sudo -u testuser /Applications/TextEdit.app/Contents/MacOS/TextEdit
这将以 testuser 身份打开 TextEdit,然后我可以将文件保存到/
。无法将文件保存到 testuser 的用户文件夹,但这可能是因为我将此帐户用于其他测试目的,因此我赋予此帐户的权限非常少。有趣的是,即使我在 KeyChain.app 中停用了 root 用户,我也可以以 root 身份登录。这似乎只影响从 root 进行的桌面登录,而不影响终端登录。我以 testuser 身份保存的文件具有正确的所有者权限等设置。
$ cd /
$ ls -la | grep testuser
-rw-r--r-- 1 testuser staff 330 18 Okt 20:07 Untitled.rtf
答案2
通常以不同的用户身份运行 GUI 应用程序(除了少数为 root 设计的 GUI 软件的情况)实际上不起作用。
这以前可以工作,但我不确定在当前的 Mac 上是否仍可行。逐字:
这是我从另一个关于 Apache 的提示的评论部分得到的提示的复述(我认为)。这样做的目的是允许您将程序保留在另一个用户的约束范围内,而无需该用户通过 GUI 登录。在气泡内运行可疑程序!如果您想制造“气泡”,我建议设置一个访问权限非常有限的虚拟帐户。笔记:从现在开始,我将把后续帐户称为“泡沫帐户”,并将该帐户的会话称为“泡沫”,以便让您对此有正确的认识。
- 打开一个新终端窗口
- 键入以下内容,其中
short_name
是“泡泡”账户的简称:sudo short_name -
- 输入“bubble”账户的密码。
- 键入以下内容,其中
app_name
是您想要打开的应用程序的名称:/Applications/app_name.app/Contents/MacOS/app_name
例如,这将启动 Safari:
/Applications/Safari.app/Contents/MacOS/Safari
需要记住的几件事(很重要!):
- 除非其他应用程序也在气泡中,否则此应用程序与其他应用程序之间的复制和粘贴将不起作用。
- 在气泡内运行的应用程序仍将能够启动原始帐户下的后续应用程序(据我所知)。例如,
ftp://
在气泡中访问 Safari 中的 URL 将使用非气泡帐户中运行的 Finder,并具有所有可用权限。- 关闭终端(或在窗口中按 Ctrl+C)将关闭气泡内运行的应用程序。许多程序在运行期间会在终端中显示异常和奇怪的消息,如果您以前编写过程序,您就会知道这是完全正常且意料之中的。
- 在气泡中运行的程序可能具有与您原本运行的程序不同的外观设置。要更改此设置,请在气泡帐户下登录并转到系统偏好设置
- 运行一个程序的两个副本(一个在气泡内,一个在气泡外)绝对完美,事实上我现在正在我的“气泡”Safari 应用程序上写这篇文章!
- 可能会出现一些问题,例如无法使用 Safari 进行拖放。解决方法 *这才不是似乎使用气泡账户作为文件库保存偏好设置如果用户未在后台登录。
和其他黑客方法。但以下两个示例均适用于 X11 应用程序
sudo -i -u other_user \`
env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \`
xapplication`
或者
xauth extract -f - "$DISPLAY" |`
sudo -u other_user xauth -f ~other_user/.Xauthority merge -`
答案3
用于open
启动应用程序。
例子
-a
选项 - 使用应用程序 TextWrangler 打开文件名 -:
sudo su - david -c "open -a TextWrangler filename"
-e
选项-使用应用程序 TextEdit 打开 myfilename-:
sudo su - user -c "open -e myfilename"
答案4
为了防止有人仍在寻找方法来做到这一点,我发现了这个应用程序:
运行方式http://josephbeeson.com/index.php?page=proj_en
这对我有用。(目前正在使用 box.com 同步应用程序进行测试)