bash скрипт / метод, который сбивает WM / Xorg, когда процесс завершен - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь создать систему Linux, которая предназначена для запуска GUI поверх оконного менеджера, так как для этого требуются входные данные устройства. Я говорю, пытаясь, потому что пытался в течение нескольких дней, но я не могу заставить работать сценарий bash, несмотря ни на что.

Мой подход заключается в использовании сценария bash, который запускает сеанс X с использованием openbox, на котором ничего нет, кроме программы, которую я хочу запустить поверх (мне все равно, какой именно WM, если это WM, который делает ввод, что, как я обнаружил, и XFWM4, и Openbox. готовы использовать любые другие, которые будут лучше, если после тестирования предложения, которые также будут работать). Когда программа закрыта (выбрав в ней «Выйти»), у меня остается работающая WM, которая мне не нужна, она должна быть go вниз вместе с приложением, поэтому система возвращается к экрану входа в систему lightdm.

Я также не могу изменить действия команды quit; потребуется много времени, чтобы перекомпилировать и модифицировать такое большое приложение для чего-то такого тривиального. Вот почему мне действительно нужно, чтобы WM отключился go сам по себе, когда процесс приложения закончился.

Я пытался использовать сценарий автозапуска openbox, а также пользовательский сценарий, который запускается с использованием файла .desktop. это найдено Lightdm. Все мои попытки заканчиваются скриптом, который просто убивает отображение сразу после входа в сеанс.

Я просто хочу что-то простое, как это:

#!/bin/bash
openbox &
guiapp; openbox --exit (or killall Xorg whatever)

Но этот синтаксис не будет работать. Я пытался использовать такие вещи, как pid=$(pgrep guiapp), чтобы заставить его искать PID каждую кучу секунд, и, если его там нет, убить WM или Xorg полностью; но они также не работали, я не знаю, были ли мои попытки плохими или что. Извините, я не могу привести эти примеры, так как я не делал резервных копий своих попыток сценария, и я пытался довольно долго безуспешно.

Я действительно надеюсь, что кто-то может мне помочь.

1 Ответ

0 голосов
/ 28 февраля 2020

Я наконец-то все заработал! Я нашел сообщение в сети, в котором пытался сделать что-то похожее на мое, и он применил такой подход:

в ~ / .config / openbox / autostart:

xsetroot -solid black &
gnome-terminal --full-screen --hide-menubar -e guiapp &
/etc/guiapp/Exit.sh &

в / usr / share / xsessions / gui .desktop:

[Desktop Entry]
Name=OpenBox Session
Exec=openbox-session
TryExec=openbox-session

Наконец-то фактическое решение в /etc/guiapp/Exit.sh:

#!/bin/bash

until [[ $(pidof guiapp) ]] ; do
        sleep 1
done

while [[ $(pidof guiapp) ]] ; do
        sleep 1
done

openbox --exit

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

Таким образом, LightDM будет запускать OpenBox с флагом, указывающим ему читать скрипт автозапуска, а автозапуск будет запускать как приложение, так и скрипт, который будет каждую секунду искать pid моего приложения, а когда он выключится, он автоматически выйдет из OpenBox на экран входа в систему, чтобы я мог переключиться на другую DM. Как я и хотел!

...