Я пытаюсь сделать простой экран блокировки для моего ноутбука с Arch / BSPWM. Я нашел программу с именем cmatrix, которая имеет флаг заставки, который заставляет ее завершать работу при нажатии клавиши. Я пытаюсь связать вместе команды bspc с cmatrix и vlock, чтобы создать строку, которая может быть запущена для запуска полноэкранного режима cmatrix, запуска vlock при нажатии клавиш, а затем выхода после выхода vlock.
Моя единственная проблема с этим состоит в том, что для того, чтобы экран блокировки был эффективным, мне нужно выйти из sxhkd, чтобы люди не могли просто закрыть окно, содержащее cmatrix / vlock. Я добавил pkill sxhkd в цепочку команд, и это работает. Сломанная часть снова запускает sxhkd. Простое добавление sxhkd в конец не работает, так как окно терминала не закроется, пока sxhkd не завершит работу, что никогда не происходит. Кроме того, если окно терминала закрыто, sxhkd останавливается, потому что он работал в нем.
Я пытался использовать "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 ответа на вопрос
1
Stephen Smith
I seem to have stumbled across the solution when playing with nohup by itself. It seems that nohup doesn't completely release the job from the terminal, so running nohup program & exit doesn't work - the terminal complains that there are running jobs. The easy solution is to add another sleep in between them like so:
nohup command & sleep 2 && exit
The sleep can probably be shortened a bit, but if it's too short it will probably cause the nohupped program to close.
Edit: I'm having some inconsistent behavior with nohup and exit though - sometimes it will exit and leave the program running and sometimes it will complain that there are jobs. I'm not certain why it happens.
0
l0b0
To start and orphan a background process you use nohup my_command &. After that you can exit the starting shell without killing the new process. More on process management.
Используя более простые тестовые команды, я попытался добавить nohup pavucontrol & до конца, что привело к `urxvtc -e bash -c" echo hello !; sleep 3; nohup pavucontrol &; "`. К сожалению, это заставляет всю команду ничего не делать. Кажется, быстро открывается окно терминала, которое закрывается сразу, даже не запуская сон 3.
Stephen Smith 9 лет назад
0
Вы не можете использовать `&` * и * `;` для завершения команды.
l0b0 9 лет назад
0
Виноват. Кажется, запускаются эхо и сон, но pavucontrol нигде не видно. `urxvtc -e bash -c" echo hello !; sleep 3; nohup pavucontrol & "`
Stephen Smith 9 лет назад
0