Как сделать сценарий /etc/init.d похожим на запуск в X?

Я пытаюсь выявить некоторую причудливость с приложением Java, которое неправильно работает при запуске с помощью сценария запуска в /etc/init.d, но отлично работает при открытии окна терминала GUI и запускает его через /etc/init.d/ myapp начало. (Причудливость включает в себя часть приложения, которое делает некоторые хакерские ручные с помощью X.) Поскольку приложение работает нормально при запуске через терминальное окно, я смотрю, как он запускается, прежде чем я погружусь в (правда, деликатный, а не мой) источник код.

Ответ на этот пост дал мне понять, что терминал Gnome работает внутри диспетчера окон, что каким-то образом влияет (в хорошем смысле) на среду приложения, которое я запускаю через сценарий bash. Я смог проверить, что запуск скрипта через терминал tty (ctrl-alt-f1 или через ssh) дает то же поведение, что и при запуске.

Мой главный вопрос: что я могу сделать, чтобы запустить это приложение, когда компьютер запускается, но если он работает так, как будто он запущен в X? Мы отправили маршрут сценария до сих пор, потому что ему также необходимо запустить виртуальную машину Java с определенными параметрами.

Следующий вопрос (строго для того, чтобы улучшить мое понимание): Что происходит под капотом, чтобы заставить сценарий действовать по-другому, когда он запускается через что-то, запущенное в оконном менеджере? Google не просветил меня по этому поводу.

  • Как получить ширину границы окна X из командной строки?
  • Можно ли полностью удалить указатель мыши из X?
  • Несколько мониторов в виде клонированных окон для рабочего стола
  • Возможно ли, что X11 можно перенаправить через туннель SSH
  • Совершенно пиксельные шрифты в Emacs
  • Расширение общей памяти MIT или MIT-SHM над ssh
  • Как я могу предотвратить запуск приложений с максимальным увеличением их окон?
  • Запустить GUI-браузер на сервере без GUI?
  • 2 Solutions collect form web for “Как сделать сценарий /etc/init.d похожим на запуск в X?”

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

    Xvfb создает X-сервер, который «отображает» только для памяти, а не для просмотра. Он не требует какого-либо оборудования или разрешений.

    Самый простой способ использовать его – через xvfb-run Debian xvfb-run .

     xvfb-run java MyWeirdApp 

    Если у вас нет xvfb-run , получите его из одной из многих копий в Интернете или из пакета Debian .

    Скрипты /etc/init.d являются интерактивными, не являются входами, и они не пытаются получить доступ к сеансу X, потому что они являются системными службами. 1 Системные службы не связаны с каким-либо конкретным зарегистрированным пользователем 2, но X-сеанс всегда принадлежит зарегистрированному пользователю.

    Если вашему приложению нужен контекст графического интерфейса для работы, он не должен быть системным сервисом. Вы не объяснили, зачем ему это нужно или что он делает , но, скорее всего, вы должны использовать ~/.xinitrc или систему запуска вашей рабочей среды, а не init.

    1 Приложения X и зарегистрированные пользователи могут использовать системный сервис, но то, о чем вы говорите, это наоборот.

    2 Сервисы обычно связаны с их собственным специальным пользователем, но они не регистрируются как таковые (и обычно такие пользователи не могут быть зарегистрированы).

    Interesting Posts

    Есть ли способ активировать конкретную вкладку хром через bash?

    Какой файл в / proc считывается ядром во время процесса загрузки?

    Как вы создаете псевдоним ip, используя утилиты iproute?

    Запуск процесса после загрузки

    Получение Интернета в Linux VM без обнаружения в сети

    Почему chroot (2) недоступен для непривилегированных пользователей?

    Как предотвратить wpa_supplicant от подключения к сети, разрешая другим сетям

    Elo Touchscreen на Debian имеет частичную ось X

    Как заставить Terminator перезагрузить конфигурацию «на лету»?

    Ошибка обновления Yum: не удалось получить зеркальный список

    Прочитайте файлы в подкаталогах и перейдите в одно место с меткой времени

    Как эхо в сценарии оболочки без выполнения результата

    Как распечатать на удаленном сервере печати LPD без локальной установки сервера CUPS

    Где исходный код make_request_fn в ядре linux

    Как сообщить systemd-logind, что сеанс не простаивает, без использования среды рабочего стола или диспетчера сеансов?

    Linux и Unix - лучшая ОС в мире.