SSH - Befehle an Minecraft Konsole mit Screen senden?
Hallo!
Ich habe mal wieder eine Frage. Und zwar:
Ich entwickle gerade in C# ein Programm mit dem man sich auf einen vServer/Root-Server per SSH verbinden kann, was sogar klappt, nur ist das Problem das ich mit dem Programm die Minecraft Konsole bedienen möchte.
Ich kann einen Screen erstellen über das Programm (Daemon), nur kann ich keine Befehle an diesen Screen senden.
Ich hab gesehen das man mit 'screen -x name -X befehl' commands an den screen senden kann, aber die werden irgendwie nicht in der Minecraft Konsole ausgegeben.
Kann mir jemand helfen? Also ich han kurz gesagt ein SSH-Programm gemacht in C# mit dem man die Minecraft Server Konsole verwenden können sollte.
3 Antworten
/usr/bin/screen -S NAME -p 0 -X stuff "BEFEHL$(printf \\\\r)"
So funktioniert das beim MCHostPanel von Alanaktion
Ist aber PHP, vielleicht aber nützlich für dich
der teil $(printf \\\\r) ist aus PHP um einen Linux Zeilenumbruch zu senden.
Okay also der Code um den Befehl zu senden sieht so aus:
consoleWindow.AppendText(client.RunCommand("/usr/bin/screen -S server -p 0 -X stuff '" + consoleCommand.Text + "$(printf \\\\r)'").Result + Environment.NewLine + Environment.NewLine);
Das $(printf \\\\r) wird aber mit rein geschrieben wo man die Befehle üblicherweise eingibt.
Beispiel:
>say test??
[16:37:08 INFO]: [Server] test??
>
>say hi $(printf \\\\r)
Also das 'Enter' wird irgendwie nicht angenommen um es so zu sagen
Ich glaube in etwa so ? Probier mal, hab leider keine direkte ahnung von C# bediene mich von stackoverflow.com
consoleWindow.AppendText(client.RunCommand("/usr/bin/screen -S server -p 0 -X stuff '" + consoleCommand.Text + @"\\r").Result + Environment.NewLine + Environment.NewLine);
Vielen Vielen Dank!
Es hat geklappt! Ich bin dir wirklich sehr sehr dankbar!
Da ich das Programm ja entwickle, aber durch deine Hilfe weiterkam, wollte ich dich Fragen ob ich dich vielleicht dann in den Credits hinzufügen darf, wegen deine Hilfe hier denn es ist sozusagen eines der wichtigen Features.
Edit:
Es war das:
consoleWindow.AppendText(client.RunCommand("/usr/bin/screen -S server -p 0 -X stuff '" + consoleCommand.Text + "\\r'").Result + Environment.NewLine + Environment.NewLine);
Klar, brauchst du infos von mir? Oder reicht dir mein gamertag ? (ist auf jeder Plattform für jedes Spiel TopicsLP)
Das ist egal ich könnt dich auf verlinken. Zum Beispiel Instagram oder ähnliches.
Okay ich werde deinen Twitter Account verlinken und ein kleines Dankeschön-Schreiben für deine Hilfe :-)
Hallo nochmal. Eine Frage gäbe es noch, und zwar diese:
https://www.gutefrage.net/frage/ssh---screen-output-anzeigen#answer-293971175
Also wie kann ich es machen dass jetzt der Output der Konsole in einer TextBoy angezeigt wird? Also wie das Grundsätzlich geht weiß ich aber
consoleWindow.AppendText(client.RunCommand("/usr/bin/screen -S server -p 0 -X stuff '" + consoleCommand.Text + "\\r'").Result + Environment.NewLine + Environment.NewLine);
Zeigt es nicht mehr in der TextBox consoleWindows an.
Kann ich das irgendwie mit 'screen -O' machen?
Würde es zB wie folgt machen (linux befehle):
screen -S test -L screenlog.$(date '+%d.%m.%Y_%H.%M')
Startet einen screen Namens "test" und schreibt alles was in dem screen passiert in die Datei "screenlog.DATUM_UHRZEIT" du könntest vllt statt dem Datum und der uhrzeit eine Server ID oder Prozess id zur identifikation verwenden.
und dann kannst du mit dem befehl:
tail -n 60 screenlog.23.10.2018_17.35
dir die Letzen 60 Zeilen ausgeben
tail -n ZEILEN DATEI
Hoffe das hilft dir weiter.
Und das ganze machst du vllt alle 15 Sekunden oder so.
Vielen Dank ich werde es ausprobieren
Heißt es ich kann
/usr/bin/screen -S NAME -p 0 -X stuff "op test"
machen?
Du musst erst in den screen und dann einfach die Commands ohne ein / eingeben.
Schon klar ja aber ich möchte mit einem "Non-Terminal" programm verwenden. Mit der Antwort von TopicsLP klappt es, nur werden die Befehle noch nicht "gesendet".
Das 'Enter' fehlt sozusagen
Du musst den screen öffnen und darein dann die befehle
Okay wenn ich einen Befehl eingebe (und nebenbei bei KiTTY im screen bin), steht das in der Befehlszeile: say hi$ (printf \r)
Also das "enter" funtkioniert irgendwie noch nicht