如何使用 ssh 重新启动远程 x11 程序

如何使用 ssh 重新启动远程 x11 程序

好的,我有 2 台 Linux 机器,机器 A 和机器 B。机器 A 是一台运行 icecast 音频服务器的服务器。机器 B 是工作室中的一台台式机,运行 BUTT(使用此工具进行广播),这是一个将音频发送回机器 A 的 x11 应用程序。

机器 B 上的 Butt 有时会崩溃(事实上,我们尝试过的任何应用程序以及 Windows 上的应用程序最终都会崩溃),从而终止流。但是我发现我将 icecast 配置为在源断开连接时运行 stript。我有用于 A 和 B 之间 ssh 的私钥授权。我有一个脚本,如果我在 B 上运行它(通过正常的交互式 ssh),它将重新启动 butt。我不知道如何在 A 上编写脚本,以便它将运行我在 B 上的脚本。

我尝试过这个:

#!/bin/bash
ssh username_placeholder@B '/home/username_placeholder/broadcast.sh'
exit

从 A 运行。但这似乎让 ssh 保持活动状态。我只想运行它然后挂断。broadcast.sh 如下所示:

#!/bin/bash
killall butt
env DISPLAY=:0 butt&
exit

这是因为 butt 仅在 gui 模式下运行。无论如何,我们确实希望不时在工作室中看到 gui。那么我该如何让它运行该脚本并挂断,或者有没有更好的方法可以在 A 上执行此操作,而无需尝试在 B 上调用脚本。如果 butt 仍在运行,我希望它杀死它,然后启动它(记住它仍然必须显示在 B 上,而不是 A 上。并且 A 是可以知道 B 上的源何时挂断的计算机。)

如果有人关心的话,计算机 A 运行 ubuntu 服务器,而计算机 B 运行 linux mint。

答案1

您应该考虑使用 screen 命令,它将允许您做您想做的事情,同时还有能够在任何时间点重新连接到 shell 的额外好处。

SSH 到远程主机

machine_a:> ssh machine_b

使用 SCREEN 启动新 Shell

machine_b:> screen
machine_b:> run your script here

脱离屏幕

( Press Ctrl-a then ctrl-d to disconnect from the screen )

退出服务器外壳

machine_b:> exit
machine_a:> 

重新登录服务器(稍后)

machine_a:>ssh machine_b

列出用户可用的所有屏幕

screen -list  (to show a list of all screen sessions that exist).

eg.    
username@machine_b:~/> screen -list
There are screens on:
        30264.pts-5.machine_b  (Detached)
2 Sockets in /var/run/uscreens/S-username.

重新连接到分离的屏幕

machine_b:> screen -dr 30264

在此阶段,您可以看到您离开时的脚本/命令/shell。即使您运行的命令是 xwindows 应用程序,并且将显示设置为远程服务器显示。

要以与仅使用 ssh 相同的方式创建运行脚本的远程屏幕,请尝试以下操作:

ssh -t username_placeholder@B 'screen -d -m /home/username_placeholder/broadcast.sh'

答案2

您必须从机器 A 使用 ssh 的‘-f’选项运行广播脚本:

#!/bin/sh
ssh -f username_placeholder@B /home/username_placeholder/broadcast.sh

这将自动使“broadcast.sh”进入后台。

‘broadcast.sh’脚本本身应该如下所示:

#!/bin/sh
killall butt
DISPLAY=:0 butt

相关内容