
Есть ли способ запустить программу из терминала, который не является «потомком» оконного менеджера (например, XFCE), в оконном менеджере?
Выполняемая программа должна быть отсоединена от терминала (и моего текущего соединения с сервером), чтобы она оставалась активной после закрытия сеанса терминала.
Примером может служить подключение по ssh (без x-forward или чего-то подобного) к серверу, запуск браузера, закрытие соединения. Сидя перед сервером и используя недавно открытый браузер, который все еще работает, отсоединился от моего сеанса ssh с новым «владельцем» оконного менеджера.
решение1
Обычные методы отсоединения процесса от оболочки:
запустить в фоновом режиме с помощью
&
, а затем попросить оболочку прекратить отслеживать его с помощьюdisown
:$ xterm & $ disown
(или
xterm & disown
)запустите в фоновом режиме с помощью
&
и используйтеnohup
инструмент, чтобы предотвратить его завершение:$ nohup xterm &
запустите в фоновом режиме с помощью
&
, и используйте double-fork, чтобы оболочка не могла его отслеживать:$ (xterm &)
запустить в фоновом режиме с помощью
setsid
:$ setsid xterm
(Попробуйте (setsid xterm &)
, если некоторые варианты не работают.)
решение2
xterm -e "bash -c \"./script.sh; exec bash\"" &
где ./script.sh
может быть только команда.
решение3
Войдите в систему, на которой запущен X-сервер, с помощью SSH и выполните:
DISPLAY=:0 xterm &
На вашем X-дисплее должен появиться xterm, и он должен оставаться открытым даже после закрытия сеанса SSH.
Приложения X11 используют DISPLAY
переменную среды для поиска X-сервера; типичное значение — :0
, что означает, что приложения X11 должны подключаться к локальному X-серверу через сокет домена Unix /tmp/X11-unix/X0
.
Приложения, запущенные из сеанса X, наследуют DISPLAY
переменную среды, которая указывает на сервер X, но процессы, запущенные вне сеанса X (например, вход по SSH), не будут иметь этой переменной. Вот почему вам придется явно задать ее при запуске приложения X11 из входа по SSH.