从终端窗口分离正在运行的命令

从终端窗口分离正在运行的命令

我在 Gnome 中运行以下 .desktop 文件来启动远程会话:

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=xfreerdp RDP
Comment=A sample application
Exec=/usr/bin/xfreerdp +clipboard +smart-sizing -decorations /u:myuser /d:DOMAIN /v:pc.domain.com /f /kbd:0x00000807 /fonts
Icon=/home/user/.local/share/applications/rdp.png
Terminal=true

这将打开一个终端窗口以输入会话密码。填写密码后,会话开始。现在,如果我关闭终端,远程会话也会关闭。

我该如何防止这种情况?

到目前为止我尝试的是,直接启动 xfreerdp,运行一个 bash 脚本,该脚本使用 '&' 来生成 spawnig,但这不起作用。这是这样的:

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=xfreerdp RDP
Comment=A sample application
Exec=/home/user/.local/share/applications/xfreerdp.sh
Icon=/home/user/.local/share/applications/rdp.png
Terminal=true

这是 xfreerdp.sh 脚本:

echo "password:"
read p
/usr/bin/xfreerdp +clipboard +smart-sizing -decorations /p:$p /u:user /d:DOMAIN /v:pc.domain.com /f /kbd:0x00000807 /fonts & 

答案1

造成这种情况的可能原因有多种。一个可能的原因是,当您关闭终端时,STDOUT/STDERR 会关闭,然后如果您的程序尝试输出某些内容,它可能会死掉。为了解决这个问题,只需将命令重定向到/dev/null

/usr/bin/xfreerdp <ARGS> 1>/dev/null 2>&1 & 

但这不一定是您问题的首选解决方案(即使它有效,根据您在评论中的回复)。进一步阅读以找到这些情况的最佳实践:

另一个可能的原因是您正在使用的终端模拟器(xterm/konsole等)可能会发送叹息当它终止时向其子级发出信号,并且该信号可能导致它们的终止。为了解决这个问题,您可以使用以下命令运行命令nohup

运行不受挂起影响的命令,并将输出输出到非 tty

请注意,它还nohup会将您运行的命令的 STDOUT/STDERR 重定向到文件。从手册页:

       If  the  standard output is a terminal, all output written by the named
       utility to its standard output shall be appended to the end of the file
       nohup.out  in  the current directory. If nohup.out cannot be created or
       opened for appending, the output shall be appended to the  end  of  the
       file nohup.out in the directory specified by the HOME environment vari-
       able.

因此,如果使用此命令,则无需执行重定向。

nohup /usr/bin/xfreerdp <ARGS> & 

相关内容