Wie kopiere ich den GNU Screen Copy Buffer in die Zwischenablage?

73

Bei Verwendung von GNU Screen können wir mit dem Befehl mit dem Scrollback-Puffer arbeiten, der auch als "Kopiermodus" bezeichnet wird Ctrl+a+[.

Dort können wir Text in den Kopierpuffer kopieren, indem wir drücken space, den Text auswählen und spaceerneut drücken .

Gibt es eine Möglichkeit, diesen Text aus dem Bildschirmkopierpuffer in die X-Zwischenablage zu kopieren?

In meinem Fall verwende ich Ubuntu 12.04 mit Gnome und Xorg.

Samuel GP
quelle

Antworten:

44

Sie können ein CLI-Zwischenablage-Tool wie xseloder pbpasteund das catDienstprogramm verwenden, um Inhalte aus STDIN abzurufen. Die Schritte unter Linux mit xselsind wie folgt:

  1. Kopieren Sie Text aus Ihrer Bildschirmsitzung in den Kopierpuffer des GNU-Bildschirms.
  2. Führen Sie diesen Befehl im Bildschirm aus: cat | xsel -b
  3. Wenn xselkein Fehler gemeldet wurde, sichern Sie jetzt den Kopierpuffer des Bildschirms an STDIN:Ctrl+a+]
  4. Senden Sie eine EOF an, catum sie zu beenden:Ctrl+d

Zu diesem Zeitpunkt sollte sich der Inhalt des Bildschirmkopierpuffers in Ihrer Zwischenablage befinden.

BEARBEITEN: Wie bei allen X-Programmen xselmuss bekannt sein, wie Sie Ihren X-Server kontaktieren können, um auf die Zwischenablage zugreifen zu können. Sie sollten Ihre DISPLAYUmgebungsvariable entsprechend einstellen.

Bonsaiviking
quelle
4
Vorsicht, wenn Sie nicht wissen, was Sie damit machen (wie ich)! Das hat cat | xsel -bmeine gesamte Geschichte ausgeführt, als ich sie aus der Shell ausgeführt habe.
Yekta
@yekta Es gibt keinen Grund, warum es das tun sollte. An welchem ​​Punkt in den 4 obigen Schritten hat Ihre Shell begonnen, Dinge auszuführen? Haben Sie den catBefehl irgendwie beendet ( ^Cvielleicht mit), sodass er keine Eingaben akzeptierte, als Sie den Kopierpuffer entleerten? Wenn wir das lösen können, können Sie vielleicht Ihre Ablehnung entfernen.
Bonsaiviking
2
@yekta Ja, um xsel verwenden zu können, benötigen Sie eine X-Anzeige mit einer Zwischenablage und die darauf eingestellte DISPLAYUmgebungsvariable. Die meisten Terminalemulatoren stellen dies ebenso ein wie ssh -X. Da es nicht festgelegt wurde, schlägt xsel fehl, bevor Eingaben akzeptiert werden. Daher wird die Pipeline beendet und der Rest der "Tastenanschläge" aus dem Bildschirmpuffer in Ihre Shell verschoben.
Bonsaiviking
3
Das catIn cat | xsel -bist eine nette Art, den xselEingang mit einer Pipe zu verbinden (im Gegensatz zu a tty) und xselden "Eingangs" -Modus des Triggers auszulösen . hat aber xseldas -iFlag, um den Eingabemodus explizit auszulösen. Also xsel -biist es wahrscheinlich vorzuziehen cat | xsel -b.
Daniel Wagner
2
Ich habe einen weniger manuellen Weg gefunden, dies zu tun. Bitte beziehen Sie sich auf meine Antwort unten.
Kungfuspider
13

Diese Antwort gilt für OS X.

Gehen Sie wie folgt vor, nachdem Sie den gewünschten Text im Kopiermodus in den Einfügepuffer des GNU-Bildschirms kopiert haben:

  1. Geben Sie in eines Ihrer Bildschirmfenster ein pbcopy <enter>.
  2. Fügen Sie dann Ihren Text mit dem Befehl zum Einfügen des GNU-Bildschirms in das Terminal ein (es Ctrl-a ]sei denn, Sie haben Ihre Escape-Taste geändert).
  3. Wenn der Text nicht in einer neuen Zeile endet, drücken Sie <enter>, um eine einzufügen.
  4. Drücken Sie Ctrl-dabschließend pbcopy, um den Text in die Systemzwischenablage zu verschieben.

Anschließend können Sie den Text wie gewohnt an Command-veiner anderen Stelle in OS X einfügen, indem Sie eine entsprechende Menüoption verwenden.

scottgwald
quelle
13

Es gibt eine einfachere und weniger manuelle Möglichkeit, dies zu tun. Fügen Sie in Ihrer Bildschirm-RC-Datei die folgende Zeile hinzu:

bindkey -m ' ' eval 'stuff \040' 'writebuf' 'exec sh -c "/usr/bin/pbcopy < /tmp/screen-exchange"'

So verwenden Sie die Kopierfunktion:

  1. screen -c path/to/screen/config.rc
  2. Drücken Sie Strg + A und dann Esc, um den Kopiermodus aufzurufen.
  3. Scrollen Sie im Textpuffer nach oben und suchen Sie die Stelle, an der Sie Ihre Startmarkierung zum Kopieren lassen möchten. Drücken Sie dann die Leertaste.
  4. Scrollen Sie nach unten und wählen Sie den Text aus, den Sie kopieren möchten. Wenn Sie fertig sind, drücken Sie erneut die Leertaste.
  5. Der Text befindet sich jetzt in Ihrer Zwischenablage.

BEARBEITEN: Unter Linux ohne pbcopy, aber mit clipit können Sie Folgendes verwenden:

bindkey -m '' eval 'stuff \ 040' 'writebuf' 'exec sh -c "/ bin / cat / tmp / screen-exchange | / bin / clipit"'

Kungfuspider
quelle
Gibt es dafür eine ähnliche Methode in Debian? Ich liebe die Einfachheit.
Nate Ritter
Ich benutze Kitt von Windows und melde mich mit dem Bildschirm bei Linux an. Aber ich habe kein pbcopy unter Linux, das ich benutze. Was kann ich hier tun, um Text in mein Clipboad zu kopieren?
Mithun B
1
das gleiche kann in debian mit clipit gemacht werden. sh -c "/ tmp / screen-exchange | clipit"
Strudle
Auf Ubuntu 18.04.4 musste ich ändern /bid/clipitzu /usr/bin/cliptitund ich hatte zu installieren libcanberra-gtk-module.
Olian04
11

Diese Antwort funktioniert nur in einem Szenario, in dem Ihr Endziel darin besteht, den kopierten Pufferinhalt sofort einzufügen.

Der einfachste Weg, dies zu tun, besteht darin, Ihren Bildschirm in zwei Regionen aufzuteilen. Sie können dies tun, indem Sie CTRL+ und adann |'Dies ist kein i. Es ist das PIPE-Zeichen auf Ihrer Tastatur.

Drücken Sie dann CTRL+ , um zur zweiten Region zu wechseln, + und erstellen Sie dann eine neue Sitzung in der zweiten Region.aTABCTRLac

Wenn Sie von nano kopieren möchten , und im Terminal einfügen, öffnen Sie die Datei in nano auf der linken Bereich nach oben, drücken Sie CTRL+ adann ESC, blättern zum Startpunkt Ihrer Kopie Lage und Hit SPACE, den Text auswählen , indem Sie auf den Endpunkt Scrollen und Hit SPACEerneut, um die Kopie zu markieren.

Jetzt müssen Sie nur noch CTRL+ adrücken TAB, um zu der Region auf der rechten Seite zu wechseln, und dann CTRL+ adrücken ].

Ihr Text wird in die Befehlszeile geschrieben. Beachten Sie, dass Sie auch nach einer Hardcopy-Option suchen können, wenn Sie direkt in eine Datei schreiben möchten.

CoderX
quelle
6
Dies ist eine Beschreibung der Verwendung des Kopiermodus. Das OP weiß bereits, wie der Kopiermodus verwendet wird: Die Frage ist, wie Daten aus dem Kopiermoduspuffer in die Systemzwischenablage verschoben werden. Dies ist keine Antwort auf die gestellte Frage.
Benubird
@ Benubird - ich weiß. Aber ich gab ihm eine andere Möglichkeit, dorthin zu gelangen, wo ich dachte, dass er hingehen muss, nämlich das Kopieren und Einfügen. Hat jemandem geholfen!
CoderX
4

Da scheint niemand die Frage direkt beantwortet zu haben:

Sobald Sie die gewünschte Ausgabe in Ihren Puffer kopiert haben, müssen Sie

  1. Öffnen Sie einen Texteditor mit einer neuen Datei, dh vim somefile.txt
  2. Wechseln Sie in den Bearbeitungsmodus, dh iin vim
  3. Drücken Sie Ctrl + adann ], um den Inhalt des gerade gefüllten Puffers in den Texteditor zu kopieren

ta-da!

CpILL
quelle
Das ist großartig! Wie haben Sie es herausgefunden?
Ray
@ Ray Skillz Bro
CpILL
0

Beenden Sie Ihre SSH-Terminalsitzung, wenn Sie derzeit mit einem Server verbunden sind.

Wenn Sie XQuartz unter Mac OS und xsel auf dem Server verwenden. Sie sollten die XQuartz-Pasteboard-Einstellungen aktualisieren, indem Sie im xQuartz-Anwendungsmenü Einstellungen auswählen.

XQuartz-Einstellungen:

Geben Sie hier die Bildbeschreibung ein

ssh in den Remote-Computer und versuchen Sie auszuführen:

xsel -p <<<"THIS IS A TEST".

Drücken Sie cmd + v und "DAS IST EIN TEST" sollte ausgegeben werden.

Ryan
quelle
-1

Wenn Sie nur ein paar Informationen kopieren möchten, markieren Sie diese einfach mit der Maus und fügen Sie sie an der gewünschten Stelle ein.

Wenn Sie versuchen, viele Informationen abzurufen, kann die Bildschirmsitzung in einer Datei protokolliert werden. Anschließend können Sie sie aus der Datei kopieren oder ein wenig bereinigen und Anweisungen zum Ausführen verwenden

John
quelle
Ich versuche, die Verwendung der Maus zu vermeiden, um mehr Geschwindigkeit in meinem Workflow zu erreichen, und im Allgemeinen sind es nicht zu viele Informationen. Danke für die Antwort!
Samuel GP
OK. Der Puffer zum Kopieren / Einfügen im Bildschirm befindet sich nur zwischen Bildschirmfenstern. Sie können also ein anderes Fenster haben und das Kopieren in das andere Fenster einfügen oder es in eine Datei einfügen.
John
Das Protokollieren der gesamten Sitzung in einer Datei scheint in bestimmten Situationen der einfachste und beste Weg zu sein. Es wäre hilfreich zu wissen, wie das geht.
Mivk
-3

Endlich habe ich heute eine Lösung mit der Maus gefunden:

Halten Sie die Strg- Taste gedrückt und klicken Sie mit der rechten Maustaste. Das Kontextmenü Kopieren / Einfügen wird angezeigt.

Einige Bildschirme unter https://michalzuber.wordpress.com/2015/01/28/gnu-screen-copy-paste-with-mouse/

michalzuber
quelle
1
Ich denke, Ihre Lösung ist keine Bildschirmfunktion, sondern etwas im Zusammenhang mit X. Was Sie brauchen, sind die hier erläuterten Tools zum Kopieren und Einfügen: gnu.org/software/screen/manual/screen.html#Paste
axd