Befehlszeilenmethode zum Senden von Tastenanschlägen an ein Fenster, das in einer anderen X-Sitzung geöffnet wurde

11

Auf meinem Hauptcomputer ist ein Ubuntu-Desktop geöffnet und angemeldet. Ich melde mich dann auch von einem Remotecomputer mit X2go bei diesem Computer an, wodurch eine neue X-Sitzung erstellt wird. Ich habe eine libreoffice-Datei in der ursprünglichen Sitzung geöffnet . Ich möchte diese Datei speichern und schließen - aber von der Remote-Maschine! (In beiden Sitzungen ist derselbe Benutzer angemeldet. Bei Bedarf kann ich sudo.)

Ich habe versucht, zu verwenden, xdotool searchaber dies findet das Fenster nicht. Gibt es eine Möglichkeit, in dieser zweiten Sitzung das zu tun, was ich will? Ich kann den Prozess mit sehen, ps -A ich kann sogar die geöffnete Datei mit sehen lsof! Wie kann ich ein "Speichern und Schließen" durchführen?

Sanjay Manohar
quelle
2
Sie könnten den Prozess einfach abbrechen - wenn Sie keine ernsthaften, nicht gespeicherten Änderungen haben, wäre dies einfach. In diesem Fall sollte immer noch versucht werden, das Dokument beim nächsten Öffnen wiederherzustellen.
Wayne Werner
Das stimmt @wayne, es würde wahrscheinlich automatisch wieder aufgedeckt ... Danke für den Vorschlag. Ich bin mir nicht sicher, ob ich diese Chance nutzen wollte! Keine Möglichkeit, Tastendrücke (oder andere Direktnachrichten) zu senden? Es klingt so einfach.
Sanjay Manohar
Ich bin mir sicher, dass es Wege gibt - ich bin mir ihrer einfach nicht bewusst. Einige komplizierte umfassen die Installation eines einfachen VNC-Clients und die Einstellung DISPLAY=:0(oder die Anzeige Ihres anderen Kontos). Starten Sie dann den Server und rufen Sie ihn vom Client aus auf. Aber das könnte übertrieben sein. LibreOffice hat möglicherweise ein Nachrichtenprotokoll - ich bin nicht sonderlich vertraut damit, da ich in Vim (einschließlich LaTex) entweder Google Text
Wayne Werner
Verwenden Sie VNC, um von einem anderen Ort aus auf das Hauptfenster zuzugreifen
Olivier Dulac
1
xdotool wird auf dem aktuellen Sitzungswert $ DISPLAY ausgeführt. Sie können jeden Computer oder vncserver ssh und dann xdotool darauf ausführen. Wenn Sie beispielsweise einen vncserver auf dem Port 5901 ausführen, wird Folgendes verwendet: 1 Bildschirm gemäß Konvention. Führen Sie also DISPLAY:1ein beliebiges X-Programm aus (xeyes for test) und führen Sie es unter dem VNC aus. Gleiches gilt für Remote-VNC-Server. SSH in Maschine und dann einfach Export ausführen DISPLAY: 1 bevor Sie verwenden.
m3nda

Antworten:

9

Unter der Annahme der Standardkonfiguration würde xdpyinfo auf "original" eine Anzeige von ": 0.0" anzeigen, z

xdpyinfo | grep name

Wenn Ihre DISPLAY-Umgebungsvariable auf "x2go" ": 1.0" ist, sollte dies der Fall sein.

Von einem Terminal auf "x2go" Versuchen Sie, die Fenster-ID zu finden:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

Es ist möglich, dass die Zugriffssteuerung so eingerichtet ist, dass sie nicht funktioniert, aber ich denke, dies sollte der Fall sein, wenn Sie dieselbe Benutzer-ID auf demselben Host haben (dh Zugriff auf ~ / .Xauthority). Überprüfen Sie die Ausgabe "xauth list", wenn kein Zugriff möglich ist.

Wenn es funktioniert, verwenden Sie Ihr Lieblingswerkzeug, um es zu steuern. Fügen Sie der obigen xwininfo "-int" hinzu, um die Fenster-ID dezimal zu drucken, wenn Ihr Tool dies auf diese Weise erfordert. Xdotool tut dies nicht:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

oder Sie haben vielleicht mehr Glück mit diesen anstelle von "Strg + s" / "Strg + q"

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

Möglicherweise benötigen Sie "alt +" anstelle von "meta +". Ich habe nicht standardmäßige Meta / Alt / Super-Zuordnungen. Meta funktioniert für mich, getestet mit einem Xnest. Ich gehe von einem unveränderten englischen Menülayout und Beschleunigern aus.

Möglicherweise steht Ihnen ein Popup im Weg. In diesem Fall lohnt es sich, Folgendes zu versuchen:

xdotool key "Escape"

einige Male, dann wiederholen Sie das Speichern und Schließen. Denken Sie daran, xdotool ist pingelig in Bezug auf den genauen Fall von "Schlüssel" -Namen.

Sie sollten in der Lage sein, all dies zu versuchen, indem Sie libreoffice auf x2go starten und Ihr DISPLAY NICHT ändern. Sie sollten die Befehle in einer Shell-Skriptdatei speichern, damit Sie durch Fokusänderungen nicht durcheinander gebracht werden.

lsof sollte zeigen, dass die Datei nicht mehr geöffnet ist, wenn es funktioniert hat :-)

mr.spuratic
quelle
Vielen Dank für den Hinweis xdotool key "Escape"auf Namen, aber nicht versucht lange Namen: D
m3nda
1

Es sieht so aus, als gäbe es einige mögliche Anforderungen. Anscheinend muss sich der Host in der xhosts-Datei befinden (sie wurde als Antwort markiert) und der entsprechende DISPLAY-Wert exportiert werden. Dieser Beitrag hier soll Ihnen dabei helfen, es so zu machen, wie Sie es möchten , damit xdotool das entfernte x11-Fenster finden kann .

Joshua K.
quelle