Я работаю на машине с Windows 7, имея виртуальную машину для Ubuntu (диск образа: 12.04-desktop-i386.iso).
На виртуальной машине я установил Monit 5.3.2 и настроил некоторые процессы и приложения. Итак, я создал сценарий для запуска моего приложения. Это приложение должно отображать некоторый контент на экране (я в основном показываю два изображения, используя Feh).
Дело в том, что если я вызываю свой скрипт из командной строки, он работает нормально и отображает изображения. Но если я запускаю monit, кажется, что он работает нормально, но не отображает изображения. Если я пытаюсь отладить его (удаленная отладка), я могу видеть изображения. Итак, я предположил, что это может быть какая-то конфигурация, но не выяснил, какая (даже с использованием опции -Iwou'ld не сработает).
Я показываю ниже более подробную информацию:
-Фрагмент сценария на Моните ----
check program runMediaHandler with path "/usr/bin/runMediaHandler.sh"
if status == 1 then alert
-runMediaHandler.sh ----
#!/bin/bash
java -jar /home/thais/Desktop/MediaHandler_RC2.jar
Резюмируя:
1.Что работает:
если я запускаю java напрямую: java -jar /home/thais/Desktop/MediaHandler_RC2.jar
если я запускаю сценарий напрямую: runMediaHandler.sh
если я удаленно отлаживаю, помещаю точку останова, где должно отображаться изображение
2. Что не работает:
Заранее спасибо,
Thaís
Большое спасибо за ваши усилия, помогающие мне! В итоге я попробовал несколько шагов, которые заставили мою программу работать.
1 - не уверен, что это необходимо, но я выполнил командную строку (согласно руководству по monit), чтобы запустить monit на переднем плане:
/usr/bin/monit -Ic /etc/monit/monitrc
2 - Я изменил свой сценарий, чтобы настроить отображение и выполнить его с моим пользователем. Посмотрите, как сейчас:
#!/bin/bash
export DISPLAY=:0.0
su -c "java -jar /home/thais/Desktop/MediaHandler_RC2.jar" thais
Не зная точно, как работает ваша программа, я бы предположил, что это проблема с разрешениями. Monit запускает сценарий как root, а не как ваш локальный пользователь. Чтобы узнать, является ли это корнем проблемы, попробуйте изменить свой сценарий, чтобы он запускался как myuser
(при необходимости измените свое локальное имя пользователя):
#!/bin/bash
su -c "java -jar /home/thais/Desktop/MediaHandler_RC2.jar" myuser
Возможно monit
не имеет вашего установочного каталога Java в $PATH
.
В соответствии с его веб-страница, Feh - это приложение X11, что означает, что оно отображается на X-сервере. Как правило, у X-серверов есть два метода разрешения доступа к дисплею: один называется XAuth, который использует файл токена (называемый .Xauthority
), помещенный в домашний каталог человека, который в данный момент использует дисплей (либо запустив startx
или войдите в диспетчер отображения, например xdm
или kdm
) и менее безопасная система контроля доступа на основе хоста.
Если ваша программа работает как root, то если вы установите HOME
переменную среды в каталог пользователя, который в данный момент вошел в систему отображения, ваша программа прочитает токен .Xauthority из его домашнего каталога и сможет отображать его на экране.
В противном случае, чтобы включить более старую аутентификацию на основе хоста, вы можете запустить
xhost localhost
в xterm, чтобы позволить любой программе, запускаемой любым пользователем на компьютере, использовать дисплей, пока дисплей не будет сброшен.