Выполнить команду оболочки в PHP на рабочем столе другого вошедшего в систему пользователя - PullRequest
0 голосов
/ 23 марта 2010

Настройка: У меня есть сервер LAMP (Ubuntu 9.10), который также подключен к моему HDTV. При загрузке один пользователь автоматически входит в систему, чтобы на рабочем столе отображалась окружающая среда.

Что я хочу: Я разрабатываю удаленный веб-интерфейс на PHP для разных вещей (например, для воспроизведения музыки). Тем не менее, я столкнулся с проблемой, что хотел бы запустить оконную программу и показать ее на экране телевизора. Очевидно, что поскольку PHP / Apache работает под пользовательскими www-данными, этого не произойдет, просто запустив мою команду через exec ().

Существует ли команда Linux, которая может запустить ее в качестве сеанса, в котором в данный момент зарегистрирован мой другой пользователь, или программу, которая?

Ответы [ 2 ]

0 голосов
/ 23 марта 2010

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

xhost +localhost

.... но лучшим решением было бы запустить программу, когда пользователь вошел в систему. Есть много разных способов сделать это - но, вероятно, наиболее практичным является использование sudo, например,

sudo -u console_user program

Обратите внимание, что перед этим вы можете установить переменную HOME, чтобы xauth работал правильно (вы можете сделать это с флагом -H для sudo).

Обратите внимание, что вам необходимо настроить программу, console_user и пользователя веб-сервера в файле / etc / sudoers.

С

0 голосов
/ 23 марта 2010

При запуске (X) программы используется переменная DISPLAY, чтобы определить, к какому сеансу Х подключиться. Вам нужно выяснить, какой сеанс X пользователь имеет в данный момент, если это однопользовательский ящик, скорее всего, будет: 0.

Тогда вы могли бы написать простой скрипт bash для 1. Установите ДИСПЛЕЙ (и другие переменные по мере необходимости) 2. Выполнить.

-

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...