Как запустить приложение GUI на графическом сеансе другого пользователя?

Я пытаюсь понять, как запустить графическое приложение в качестве другого пользователя, который вошел в интерактивный режим в графическом сеансе этого пользователя.

Например, скажем, у меня есть два пользователя, foo и bar. Оба вошли в систему, но текущий интерактивный пользователь - foo. Я хотел бы запустить Calculator.app как пользовательский «бар», так что, когда я быстро переключаюсь на пользователя, я обнаруживаю, что окно калькулятора открыто в сессии бара.

Вот что я пробовал, что не работает:

sudo -u bar /Applications/Calculator.app/Contents/MacOS/Calculator

Это запускает Calculator.app как строку, но окно открывается в графическом сеансе foo.

sudo -u bar osascript -e "tell application \"Calculator\" to activate"

Тот же эффект.

sudo -u bar open "/Applications/Calculator.app"

Запускает калькулятор как foo, а не bar.

launchctl asuser [uid of bar] [any of the above commands]

Тот же эффект.

Есть ли способ сделать это? Я готов принимать все возможные решения, в том числе сценарии bash, AppleScript, писать программу Core Foundation или Cocoa и т. Д. В моей ситуации любая программа или скрипт может выполняться как любой пользователь, включая root.

Примечание. Я знаю, что это возможно с помощью удаленных событий Apple, но я не могу использовать это, поскольку в ситуации, когда я пытаюсь это сделать, я не гарантирую, что «Удаленные события Apple» будут включены в разделе «Совместное использование» предпочтения.

Любая помощь будет принята с благодарностью!

13 голосов | спросил GuyGizmo 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 04 Sep 2013 00:55:26 +0400 2013, 00:55:26

3 ответа


4

Ни один из ответов bsexec выше не работает на El Capitan (10.11) из-за закрытия системы защиты системы (SIP). «launchctl asuser» работает, но требует запуска от root. Команда ниже работает над El Capitan (и самыми последними OS-es):

sudo launchctl asuser 501 open /Applications/Calculator.app

Обратите внимание, что 501 является идентификатором пользователя для моего другого пользователя.

ответил Boris Vidolov 24 MaramThu, 24 Mar 2016 02:00:31 +03002016-03-24T02:00:31+03:0002 2016, 02:00:31
1

Как окончательно 10.10 обеспечивает правильную реализацию «launchctl bsexec» yo может использовать:

sudo /bin/launchctl bsexec PID chroot -u UID -g GID / open /Applications/TextWrangler.app

Человек говорит

  

Выполняет данную команду как максимально возможный контекст выполнения для целевого PID.

Итак, как параметр PID, вы можете использовать pid соответствующего процесса loginwindow . UID - это идентификатор пользователя, которому принадлежит эта учетная запись, а GID - это основная группа.

Это отлично подходит для любой команды и, конечно, для заданий запуска (например, startagents), например:

/bin/launchctl bsexec 104 chroot -u 501 -g 20 / /bin/launchctl load -S Aqua /Library/LaunchAgents/com.youragent.plist 2>&1
ответил Hofi 20 J0000006Europe/Moscow 2015, 20:52:52
-1

Простой

  

sudo su name_of_user

затем выполните команды в обычном режиме.

ответил PandB Software 11 FebruaryEurope/MoscowbSat, 11 Feb 2017 23:05:14 +0300000000pmSat, 11 Feb 2017 23:05:14 +030017 2017, 23:05:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132