启动程序进入窗口管理器

启动程序进入窗口管理器

有没有办法从终端启动一个程序,该程序不是窗口管理器(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 应用程序时必须明确设置它的原因。

相关内容