Запускать приложения X под другим пользователем в Linux

548
xpt

Посещая старую тему запуска приложений X в качестве другого пользователя в Linux, так как решение всегда было « использоватьgksu » для меня, но сегодня, когда мне это нужно и попробую, оно не работает.

Следуя тому, что такое ГКСУ и зачем ты это использовал, я попытался,

gksu -u otherusername xterm 

После прохождения диалога, который запрашивает пароль, я получил:

$ gksu -u otherusername xterm xterm: Xt error: Can't open display: :2 

То есть это не работает для меня. Так,

Как запускать X-приложения под Linux под другим пользователем? Спасибо.

PS это Ubuntu 17.04:

$ lsb_release -a  No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 17.04 Release: 17.04 Codename: zesty 
0
Какой вид авторизации X использует ваш дистрибутив (читайте в `xauth`)? Вы должны разрешить «другое использование», чтобы использовать отображение «первого пользователя». dirkt 6 лет назад 0
Да, я использую `xauth`, и нет, я не знаю, как разрешить« другое использование »для отображения« первого пользователя », пожалуйста, помогите @dirkt, который должен быть отсутствующим элементом в ответе. Спасибо! xpt 6 лет назад 0

3 ответа на вопрос

1
xwindows

Ubuntu 17, верно? Вы уверены, что на самом деле используете Xorg, а не Wayland ? (то есть на ps auxfwwсамом деле показывает программу под названием Xвыполняется?)

Если вы используете Wayland--, который вы бы использовали по умолчанию: доступ к дисплею от пользователя root не разрешен из-за функции безопасности (кашель) (кашель). Они сказали, что вы можете обойти эту команду, прежде чем пытаться запустить gksu:

xhost si:localuser:root 

Другой способ - просто запустить систему Ubuntu с обычной системой отображения Xorg; Вы можете установить это при входе в систему, я думаю .

Я никогда не использовал Ubuntu 17, хотя и определенно не пользователь Wayland. Это, вероятно, одна из причин того, что Ubuntu 18 / LTS вернется к использованию классического Xorg по умолчанию .

Важное примечание: если ваше другое имя пользователя не является пользователем root, независимо от того, используете ли вы Wayland или классический Xorg, вам нужно выполнить следующую команду перед запуском вашей программы через gksu:

xhost si:localuser:otherusername 

ОБНОВИТЬ:

Приведенное выше решение не работает для Ubuntu 17.04 Xorg из коробки:

$ xhost si:localuser:root localuser:root being added to access control list X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 109 (X_ChangeHosts) Value in failed request: 0xe Serial number of failed request: 7 Current serial number in output stream: 9 

Это похоже, что Ubuntu Xorg «сервер не построен с SECURE_RPC поддержкой, поэтому попытка добавить FamilyNetname (0xfe) хост терпит неудачу.»

Так что не из коробки решения для Ubuntu еще (но это не остается, как в ответ до рабочего одного существуют).

Ubuntu 17.04, а не Ubuntu 17.10, и да, это определенно Xorg. Никогда не знал, что «xhost» можно использовать таким образом - знайте только «xhost +», который считается небезопасным. Спасибо за ответ xwindows! Добро пожаловать на борт, с моим +25, :-) xpt 6 лет назад 0
Я наконец-то получил шанс проверить это, но он не работает * для меня *. Я позволил себе обновить ваш ответ, чтобы объяснить это. xpt 6 лет назад 0
0
trapezoid

Проверьте DISPLAYпеременную среды; похоже, что новый пользователь пытается использовать дисплей :2, к которому, вероятно, не подключен X-сервер.

Вы можете попробовать что-то вроде:, export DISPLAY=localhost:0.0которое должно указать X-приложению otherusername использовать X-сервер текущего пользователя. (Я почти уверен, что это хак, потому что эта переменная должна быть правильно настроена без необходимости ее установки, некоторые подробности здесь .)

Мой DISPLAY *** - это *** `DISPLAY = ': 2'`, хотите верьте, хотите нет, но я не собираюсь объяснять мою сложную настройку, поэтому вкратце` export DISPLAY = localhost: 0.0` не будет сокращен это так, как `DISPLAY = ': 2'` работает нормально для всех моих собственных приложений X. Но спасибо за помощь, хотя. xpt 6 лет назад 0
-1
Alex_Krug
  1. назначьте пароль для этого otheruser. от имени суперпользователя:

    passwd otheruser

  2. Если программа sudo установлена, добавьте следующую строку /etc/sudoers, например:

    user ALL = (otheruser) ALL

это позволит userвыполнять любые программы / команды от имени пользователя otheruser:

`$ sudo -u otheruser xterm` 

userПароль пользователя будет запрошен.

можно сделать без запроса пароля, добавив NOPASSWDдирективу: в строку выше:

user ALL = (otheruser) NOPASSWD: ALL

оригинал - https://ru.stackoverflow.com/questions/473607/%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0 % B8% D0% B5-% D0% BA% D0% BE% D0% БК% D0% B0% D0% BD% D0% B4% D1% 8B-% D0% BE% D1% 82-% D0% B4% D1% 80% D1% 83% D0% B3% D0% BE% D0% B3% D0% Be-% D0% BF% D0% BE% D0% BB% D1% 8C% D0% B7% D0% BE% D0 % B2% D0% B0% D1% 82% D0% B5% D0% BB% D1% 8F

Многие помогают дополнительные флаги -cили-p

Проблема в авторизации X («не удается открыть дисплей»), к которой ваш ответ вообще не относится ... dirkt 6 лет назад 2