4

Я пытался запускать приложения от имени другого пользователя.

Попытка 1
sudo -u otheruser open /Applications/TextEdit.app запускает приложение, но использует текущего пользователя, а не другого пользователя.

Попытка 2
login username и su - otheruser успешно входят в систему как otheruser, в Activity Monitor появляется другой пользователь, но что-то вроде open /Applications/TextEdit.app возвращает ошибку LSOpenURLsWithRole() failed with error -10810 for the file /Applications/TextEdit.app.

Попытка 3
sudo su - otheruser -c /Applications/TextEdit.app/Contents/MacOS/TextEdit видимому, запускает приложение (оно отображается в Activity Monitor как запущенное другим пользователем), но эта ошибка появляется, когда значок закрепления отскакивает бесконечно: _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.

Вопрос
Итак ... как мне запустить приложение от имени другого пользователя?

4 ответа4

1

На всякий случай, если кто-то все еще ищет способ сделать это, я нашел это приложение:

Выполнить как http://josephbeeson.com/index.php?page=proj_en

Это работает для меня. (сейчас тестируем его с приложением синхронизации box.com)

1

Обычно запуск приложения с графическим интерфейсом от имени другого пользователя (за исключением нескольких случаев программного обеспечения с графическим интерфейсом, предназначенного для пользователя root) на самом деле не работает.

Это используется для работы, я не уверен , если он по- прежнему делает на текущих Маках. Стенографический:

Это регургитирующий намек, который я получил в разделе комментариев другого намека на Apache (я думаю). Это позволяет вам удерживать программу в рамках ограничений другого пользователя без входа этого пользователя через графический интерфейс. Запустите подозрительную программу в пузыре! Я бы посоветовал создать фиктивную учетную запись с очень ограниченным доступом, если вы хотите создать "пузырь". Примечание. Теперь я буду называть последующую учетную запись "пузырьковой", а сессию этой учетной записи - "пузырь", чтобы дать вам правильное представление об этом.

  1. Откройте новое окно терминала
  2. Введите следующее, где short_name - это короткое имя учетной записи "пузыря": sudo short_name -
  3. Введите пароль к "пузырьковой" учетной записи.
  4. Введите следующее, где app_name - это имя приложения, которое вы хотите открыть: /Applications/app_name.app/Contents/MacOS/app_name
    Например, это запустит Safari:
    /Applications/Safari.app/Contents/MacOS/Safari

Несколько вещей, которые нужно запомнить (очень важно!):

  • Копирование и вставка между этим приложением и другими не будут работать, если другие не находятся в пузыре.
  • Приложения, запущенные из "пузыря", по-прежнему смогут запускать последующие приложения под первоначальной учетной записью (насколько я могу судить). Например, при переходе по URL-адресу ftp:// в Safari, пока он находится в пузыре, будет использоваться Finder, работающий в учетной записи без пузыря, со всеми доступными привилегиями.
  • Закрытие терминала (или нажатие Ctrl+C в окне) закроет приложение, работающее внутри пузыря. Многие программы будут показывать исключения и странные сообщения в терминале в разное время во время работы программы, если вы запрограммировали ее до того, как узнаете, что это абсолютно нормально и ожидаемо.
  • Программы, запущенные в пузыре, могут иметь настройки внешнего вида, отличные от тех, которые вы запускаете в противном случае. Чтобы изменить это, войдите под пузырьковой учетной записью и перейдите в Системные настройки
  • Запуск двух копий программы (одна внутри и одна вне пузыря) работает абсолютно идеально, на самом деле я пишу это в своем "пузырищемся" приложении Safari прямо сейчас!
  • Могут возникнуть некоторые проблемы, например невозможность перетаскивания с помощью Safari. Обойти их * Похоже, это не сохраняет настройки с учетной записью Bubble как хранилище файлов, если пользователь не вошел в фоновый режим.

И еще один метод взлома. Но оба следующих примера относятся к приложениям 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 -`
1

Мне кажется, что ответы на этот вопрос не совсем корректны на 10.8 Mountain Lion. Я думаю, что в пункте 2 у demure есть ошибка при наборе, должно быть что-то еще, кроме "-". Что работает для меня: Ваша попытка 3, без su и -c .

sudo -u testuser /Applications/TextEdit.app/Contents/MacOS/TextEdit

Это открывает TextEdit как testuser, и я могу сохранить файл в / . Сохранение в пользовательскую папку testuser не сработало, но это могло быть связано с тем, что я дал этой учетной записи совсем немного прав, так как я использую ее для других целей тестирования. Интересно, что я мог бы также войти в систему как пользователь root, даже если у меня отключен пользователь root в KeyChain.app. Похоже, что это влияет только на вход в систему с рабочего стола root, но не с терминала. Файл, который я сохранил как testuser, имел правильные права доступа и т.д.

$ cd /
$ ls -la | grep testuser
-rw-r--r--    1 testuser  staff      330 18 Okt 20:07 Untitled.rtf
0

Используйте open для запуска приложения.

Примеры

-a опция - открыть имя файла, используя приложение TextWrangler-:

 sudo su - david  -c "open -a TextWrangler filename"

-e опция - открыть myfilename, используя приложение TextEdit-:

sudo su - user  -c "open -e myfilename"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .