Как запустить программу при запуске на Raspberry Pi ПОСЛЕ загрузки графического интерфейса? - PullRequest
0 голосов
/ 29 июня 2018

Хорошо, у меня есть такая простая Java-программа:

import java.awt.AWTException;
import java.awt.Robot;

class Program
{
    public static void main(String[] args) throws AWTException
    {
        Robot robot = new Robot();
        // do some things with the robot
    }
}

Я хочу запустить эту программу на моем Raspberry Pi при запуске, поэтому я поместил ее в сценарий оболочки, который я вызвал в конце файла /etc/rc.local. Это мой скрипт:

cd /home/pi/Desktop
java Program

Всякий раз, когда загружается мой Raspberry Pi, моя программа выдает исключение, говорящее Can't connect to X11 window server using :'0.0' as the value of the DISPLAY variable, как только она пытается создать экземпляр класса Robot. Позже я узнал, что это потому, что GUI еще не загружен во время выполнения моей программы, поэтому я установил задержку в rc.local. Это последние строки в rc.local:

sleep 60s
sudo sh /home/pi/Desktop/launcher.sh &
exit 0

Хотя программа запускается после загрузки графического интерфейса, она по-прежнему выбрасывает это исключение. Я пробовал:

  1. Использование .bashrc вместо rc.local
  2. Установка задержки внутри моего launcher.sh скрипта перед вызовом моей настоящей программы
  3. Вызов другого сценария оболочки, который имел задержку в начале, а затем вызвал launcher.sh

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

1 Ответ

0 голосов
/ 30 июня 2018

Чтобы запустить приложение при запуске GUI , необходимо добавить файл .desktop в каталог autostart .

Итак, в каталоге ~/.config/autostart создайте файл my_script.desktop (замените my_script на то, что вы хотите).

touch my_script.desktop

Отредактируйте его (nano my_script.desktop) так, чтобы оно выглядело так:

[Desktop Entry] 
Name=put_name_here
Exec=type_command_to_run_here
Type=application
Terminal=true/false (true if you want it to run in terminal) 
...