5

Я использую BASH в командной строке, вошел в систему на компьютере другого пользователя с правами root через SSH.

Я хочу отправить пользователю, вошедшему в данный момент во время сеанса X, всплывающее сообщение, но это результат:

root@i5:~$ xmessage now                           
Invalid MIT-MAGIC-COOKIE-1 keyInvalid MIT-MAGIC-COOKIE-1 keyError: Can't open display: :0  

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

Я могу повторить это на моей локальной машине, запустив локальный х-сессию, то в терминале , если я типа xmessage now он работает, но если в терминале я su- , так что я корень , и я попробовать еще раз, я получаю то же самое ошибка, как указано выше.

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

4 ответа4

2

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

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

Существует, однако, стандартный способ связаться с пользователем на машине. Это wall. Для этого инструмента все еще требуются права доступа root (для предотвращения спама), но затем он выполняет запись во все открытые TTY, эффективно уведомляя пользователя, выполняющего сеанс X. Возможно, вы захотите использовать это вместо всплывающего окна.

2

Переменная среды $XAUTHORITY содержит путь к файлу, который используется для хранения файлов авторизации X11. По умолчанию это ~/.Xauthority если не установлен.

Таким образом, как пользователь root, вы можете обнаружить, что для открытия окон на дисплее пользователя рабочего стола достаточно:

export DISPLAY=:0
export XAUTHORITY=~otheruser/.Xauthority
xmessage "Hello, otheruser."

Теперь это не будет работать, если пользователь не хранит свои куки в файле по умолчанию (это происходит, например, в последних версиях Fedora). В этом случае вы можете узнать, для каких значений установить $DISPLAY и $XAUTHORITY :

cat /proc/$(echo $(ps -C gnome-shell -o pid=))/environ | xargs --null --max-args=1 | egrep '^(DISPLAY|XAUTHORITY)='

(заменив gnome-shell на имя оконного менеджера пользователя или какого-либо другого процесса, который, как вы уверены, будет запущен).

1

С помощью этой страницы у меня теперь есть решение, которое заключается в следующем.

$ su
password:
$ xauth list
peter-aspire-ubuntu/unix:0  MIT-MAGIC-COOKIE-1  1978485c4f8d864503a4e645c77fd802
peter-aspire-ubuntu:0  MIT-MAGIC-COOKIE-1  1978485c4f8d864503a4e645c77fd802
$ DISPLAY=peter-aspire-ubuntu:0
$ export DISPLAY
$ cp /home/peter/.Xauthority /root/.Xauthority
cp: overwrite `/root/.Xauthority'? y
$ xmessage now

Результат соответствует ожиданиям и подходит для всех сценариев, описанных в моем вопросе.

Спасибо всем, кто принимал участие.

0

Один из способов сделать это - разрешить вашему компьютеру подключаться к X-серверу удаленного компьютера с помощью инструмента xhost и перенаправления X через SHH. На удаленном компьютере вам нужно разрешить компьютеру общаться с ним. Для этого необходимо, чтобы X11Forwarding был включен в демоне SSH, работающем на удаленном компьютере.

На удаленном компьютере:

xhost <local_ip>

На локальном компьютере:

export DISPLAY=<remote_ip>:<display>
ssh -Y <username>@<remote_ip> <x_application>

Например, если в вашей локальной сети удаленным является 192.168.1.10 :

export DISPLAY=192.168.1.10:0
ssh -Y root@192.168.1.10 xmessage now &
ssh -Y root@192.168.1.10 xeyes &

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