Ok, ich habe 2 Linux-Maschinen, Maschine A und Maschine B. Maschine A ist ein Server, auf dem Icecast-Audioserver ausgeführt werden. Maschine B ist ein Desktop im Studio, auf dem BUTT (Broadcast Using This Tool) ausgeführt wird, eine x11-App, die Audio an Maschine A zurücksendet.
Hintern auf Maschine B stürzt manchmal ab (in der Tat stürzt jede App, die wir ausprobiert haben, und auch auf Windows irgendwann ab) und beendet den Stream. Ich habe jedoch herausgefunden, dass ich icecast so konfiguriere, dass bei jeder Trennung der Quelle ein Stript ausgeführt wird. Ich habe eine Berechtigung für private Schlüssel, die für ssh zwischen A und B funktioniert. Ich habe ein Skript, das bei Ausführung auf B (über normales interaktives ssh) die Hintern wieder freigibt. Was ich nicht weiß, ist, wie man das Skript auf A schreibt, damit es das Skript ausführt, das ich auf B habe.
Ich habe das versucht:
#!/bin/bash
ssh username_placeholder@B '/home/username_placeholder/broadcast.sh'
exit
Laufen von A. Aber das scheint ssh am Leben zu halten. Alles was ich tun möchte, ist es laufen zu lassen und aufzulegen. broadcast.sh sieht so aus:
#!/bin/bash
killall butt
env DISPLAY=:0 butt&
exit
Dies liegt daran, dass Butt nur im GUI-Modus ausgeführt wird. und wir wollen die gui trotzdem von zeit zu zeit im studio sehen. Wie bringe ich es dazu, dieses Skript auszuführen und aufzulegen, oder gibt es eine noch bessere Möglichkeit, dies auf A zu tun, ohne zu versuchen, das Skript auf B aufzurufen? muss immer noch auf B angezeigt werden, nicht auf A. Und A ist der Computer, der wissen kann, wann die Quelle auf B auflegt.)
Auf Computer A wird Ubuntu-Server ausgeführt, und auf Computer B wird Linux Mint ausgeführt, falls sich jemand darum kümmert.
Sie müssen Ihr Broadcast-Skript von Computer A mit der Option '-f' von ssh ausführen:
Dadurch wird "broadcast.sh" automatisch in den Hintergrund verschoben.
Das Skript 'broadcast.sh' selbst sollte dann so aussehen:
quelle