PHP shell_exec не будет работать с gnome

1

В окне терминала, в котором alert 9, появляется всплывающее сообщение 9

Однако запуск alert 9 в shell_exec ничего не дает.


Что я должен знать?

Просто упомянем: другие команды не работают, не взаимодействуя с графическим интерфейсом. Я использую gnome 3.16.3


ОБНОВИТЬ

Моя конкретная цель - запустить команду xdotool с помощью среды gnome. (xdotool key ctrl+shift+u)

  • 1
    @SteJ Вы имеете в виду $DISPLAY .
  • 0
    Упс! Да, я действительно имею в виду $DISPLAY - извините
Показать ещё 3 комментария
Теги:
shell-exec
gnome

3 ответа

2
Лучший ответ

alert - это не команда, а псевдоним для notify-Send. Псевдонимы загружаются только в интерактивной оболочке, поэтому лучше не тестировать shel_exec.

Эти 2 команды хорошо работают с php-cli:

$ php -r "shell_exec('notify-send 9');"
$ php -r "shell_exec('xdotool key ctrl+shift+u');"

Первый выдает 9 в области уведомлений, а последний вывод подчеркивает "u".

Apache с mod_php - это демон, подпроцесс init, который ничего не знает о xserver. Если, например, вы запустили встроенный веб-сервер php с терминала в xserver, например $ php -S 0:8080 он работает так, как ожидалось.

  • 0
    Они оба прекрасно работают в терминале внутри среды гномов. Однако из LAMP они все еще не взаимодействуют с GUI.
  • 1
    Если LAMP является apache с mod_php, это демон, подпроцесс init , который ничего не знает о xserver. Например, если вы запустили встроенный веб-сервер php из терминала в xserver, например, $ php -S 0:8080 он будет работать так, как ожидается.
Показать ещё 1 комментарий
2

alert не является стандартной командой, по крайней мере, на RedHat, Solaris и AIX, поэтому вы должны упомянуть об этом в своем вопросе о том, что это проприетарная команда/программа

Ваш скрипт/программа alert учитывает сброс текстовых данных в стандартном или выходном файле, поэтому вы не можете выполнять перенаправление с использованием pipe | , или перенаправить >, и, наконец, php-функция shell_exec() может поймать что-либо

Возможно, вы можете перенаправить графические данные (я не уверен), но, как правило, он используется графическим сервером

  • 0
    Спасибо, ваша информация была ценной. Пожалуйста, смотрите мое обновление по этому вопросу.
1

Я считаю, что PHP запускает оболочку, которая не знает об окружающей среде X11, и вам нужно установить переменную среды $DISPLAY. Попробуйте выполнить следующую модификацию shell_exec:

shell_exec("DISPLAY=\":0\" alert 9");
  • 0
    Отличный ответ. Однако выполнение этой команды также ничего не дает из shell_exec. Работает при выполнении вручную через gnome-терминал.
  • 0
    Работает ли ваш PHP-скрипт от имени того же пользователя, с которого вы вошли и запустили X? Ваша X сессия будет авторизована только для вашего пользователя; Вы можете использовать команду xauth чтобы авторизовать других пользователей и хосты, но это может быть очень xauth . Вы получаете какие-либо ошибки, возвращенные из shell_exec?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню