Назад | Перейти на главную страницу

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

У меня на сервере настроен ssh, и иногда мне приходится запускать на нем какое-нибудь графическое приложение. Он отлично работает, когда я подключаюсь к -X вариант. Я могу бегать, например google-chrome. Однако, если я сменил пользователя на sudo -i -u other_user, Я не могу запускать приложения с графическим интерфейсом от имени этого пользователя.

Я предполагаю, что это что-то с окружением и ДИСПЛЕЕМ, но не знаю, что делать. Я пытался добавить -E, но затем я получил сообщение об ошибке, в котором говорилось, что я не могу использовать его с -i. Как я могу запускать приложения с графическим интерфейсом через ssh от имени другого пользователя?

Самый простой способ - использовать ssh -X для выполнения команд от имени другого пользователя. Но из-за этого приложения работают заметно медленнее, даже локально.


В -i опция говорит sudo для повторной инициализации среды. X приложениям требуется $DISPLAY и (на некоторых настройках) $XAUTHORITY, и может использовать другие переменные среды, такие как настройки локали. Попробуй без -i, или если вы должны использовать -i, бегать

sudo -i -u other_user \
  env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
  xapplication

Даже если ты избавишься от -i, возможно, вам придется поставить XAUTHORITY явно: по умолчанию (если переменная не установлена) .Xauthority в домашнем каталоге.

До сих пор я предполагал, что другой пользователь может прочитать ваш $XAUTHORITY. Но этого не произойдет, если вы не сделаете это так (например, с setfacl -m user:other_user:r $XAUTHORITY).

В качестве альтернативы, вместо того, чтобы позволить другому пользователю читать ваш $XAUTHORITY, вы можете скопировать правильный файл cookie в другой файл, который пользователь сможет прочитать.

xauth extract -f - "$DISPLAY" |
sudo -u other_user xauth -f ~other_user/.Xauthority merge -

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