有没有办法从终端启动一个程序,该程序不是窗口管理器(pe XFCE)的“子程序”,而是进入窗口管理器?
执行的程序必须与终端(以及我当前与服务器的连接)分离,以便它在终端会话关闭后仍然保持活动状态。
例如,通过 ssh(不使用 x-forward 或类似工具)连接到服务器,启动浏览器,关闭连接。坐在服务器前,使用最近打开的浏览器(该浏览器仍在运行),与我的 ssh 会话分离,新“所有者”是窗口管理器。
答案1
从 shell 中分离进程的常用方法是:
使用 在后台运行
&
,然后使用以下命令要求 shell 停止跟踪它disown
:$ xterm & $ disown
(或者
xterm & disown
)使用 在后台运行
&
,并使用该nohup
工具防止其被杀死:$ nohup xterm &
使用 在后台运行
&
,并使用 double-fork 防止 shell 跟踪它:$ (xterm &)
在后台运行使用
setsid
:$ setsid xterm
((setsid xterm &)
如果某些选项不起作用,请尝试。)
答案2
xterm -e "bash -c \"./script.sh; exec bash\"" &
where./script.sh
可以只是一个命令。
答案3
使用 SSH 登录运行 X 服务器的机器并运行:
DISPLAY=:0 xterm &
您应该在 X 显示器上看到一个 xterm,并且即使您关闭 SSH 会话,它也应该保持打开状态。
X11 应用程序使用DISPLAY
环境变量来查找 X 服务器;典型值为:0
,这意味着 X11 应用程序应该通过 Unix 域套接字 连接到本地 X 服务器/tmp/X11-unix/X0
。
从 X 会话中启动的应用程序会继承DISPLAY
指向 X 服务器的环境变量,但在 X 会话之外启动的进程(例如 SSH 登录)不会有该变量。这就是为什么在从 SSH 登录启动 X11 应用程序时必须明确设置它的原因。