1

TL; DR внизу.

Я пытаюсь сделать простой экран блокировки для моего ноутбука с Arch / BSPWM. Я нашел программу с именем cmatrix, которая имеет флаг заставки, который заставляет ее завершать работу при нажатии клавиши. Я пытаюсь связать вместе команды bspc с cmatrix и vlock, чтобы создать строку, которая может быть запущена для запуска полноэкранного режима cmatrix, запуска vlock при нажатии клавиш, а затем выхода после выхода vlock.

Моя единственная проблема с этим состоит в том, что для того, чтобы экран блокировки был эффективным, мне нужно выйти из sxhkd, чтобы люди не могли просто закрыть окно, содержащее cmatrix/vlock. Я добавил pkill sxhkd в цепочку команд, и это работает. Сломанная часть снова запускает sxhkd. Простое добавление sxhkd в конец не работает, так как окно терминала не закроется, пока sxhkd не завершит работу, что никогда не происходит. Кроме того, если окно терминала закрыто, sxhkd останавливается, потому что он работал в нем.

Я попытался использовать "sxhkd &", но по какой-то причине это не работает.

Вот почти рабочая команда, которую я имею до сих пор:

urxvtc -e bash -c "sleep 0.1; pkill sxhkd; sleep 0.1; bspc window -t fullscreen=on; sleep 0.1; cmatrix -u 9 -s; sleep 0.1; vlock; sleep 0.1; sxhkd"

Команды sleep предназначены для того, чтобы программы не появлялись в неправильном порядке (иногда запрашивается пароль vlock перед запуском cmatrix)

В настоящее время он запускает новое окно urxvt (важно, если я хочу, чтобы мой терминальный шрифт для cmatrix), и он убивает sxhkd, чтобы никто не мог закрыть окно. Он полноэкранный, используя bspc и запускает cmatrix. Когда клавиша нажата, cmatrix завершает работу и появляется запрос пароля vlock. Когда пароль введен правильно, он пытается перезапустить sxhkd, но они остаются связанными.

Любая помощь будет принята с благодарностью!

TL; DR

Как я могу с помощью команды (обычно запускаемой из сценария) открыть окно терминала, в котором выполняются другие команды, затем запустить приложение (например, приложение графического интерфейса), затем окно терминала закрывается, но приложение графического интерфейса продолжает работать?

Более простые примеры команд:

urxvtc -e bash -c "echo hello!; sleep 3; pavucontrol" Это должно напечатать привет !, подождите 3 секунды, затем запустите pavucontrol и закройте терминал, оставив pavucontrol. Вместо этого терминал остается открытым, потому что запущен pavucontrol.

urxvtc -e bash -c "echo hello!; sleep 3; pavucontrol &" Это должно напечатать привет !, подождите 3 секунды, затем запустите pavucontrol и закройте терминал, оставив pavucontrol. Однако когда терминал закрывается через 3 секунды, pavucontrol нигде не видно.

2 ответа2

1

Кажется, я наткнулся на решение, когда играю с nohup. Кажется, что nohup не полностью освобождает задание от терминала, поэтому запуск nohup program & exit не работают - терминал жалуется, что выполняются задания. Простое решение - добавить еще один сон между ними, вот так:

nohup command & sleep 2 && exit

Сон, вероятно, можно немного сократить, но если он будет слишком коротким, это может привести к закрытию программы nohupped.

Редактировать: у меня есть некоторые противоречивые поведения с nohup и выход, хотя - иногда он будет выходить и оставить программу запущенной, а иногда будет жаловаться, что есть рабочие места. Я не уверен, почему это происходит.

0

Чтобы запустить и потерять фоновый процесс, используйте nohup my_command & . После этого вы можете exit из стартовой оболочки, не убивая новый процесс. Подробнее об управлении процессами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .