¿Cómo copiar el buffer de copia de pantalla de GNU al portapapeles?


Al usar GNU Screen podemos trabajar con scrollback buffer también conocido como "copy mode" usando el comando Ctrl+a+[.

Allí podemos copiar texto al búfer de copia presionando space seleccionando el texto y presionando space nuevamente.

¿Hay alguna manera de copiar este texto desde el buffer de copia de pantalla al portapapeles X?

En mi caso estoy usando Ubuntu 12.04 con gnome y Xorg.

6 answers

Puede utilizar una herramienta CLI portapapeles como xsel o pbpaste y la utilidad cat para tomar contenidos de la STDIN. Los pasos en Linux con xsel son los siguientes:

  1. Copie texto de su sesión de screen en el búfer de copia de GNU screen.
  2. Ejecute este comando dentro de la pantalla: cat | xsel -b
  3. Si xsel no reportó ningún error, ahora vuelque el buffer de copia de screen a STDIN: Ctrl+a+]
  4. Envíe un EOF a cat para terminarlo: Ctrl+d

En este punto, el contenido del búfer de copia de pantalla debe estar en el portapapeles.

EDITAR: Al igual que con todos los programas X, xsel necesita saber cómo ponerse en contacto con su servidor X para acceder al portapapeles. Debería tener su variable de entorno DISPLAY configurada apropiadamente.

 34
Author: bonsaiviking,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-13 23:08:15

Hay una forma más simple y menos manual de hacer esto. En tu pantalla .archivo rc, agregue la siguiente línea:

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

Cómo usar la funcionalidad de copia:

  1. screen -c path/to/screen/config.rc
  2. Pulse Ctrl+A y luego Esc para entrar en modo de copia.
  3. Desplácese hacia arriba por el búfer de texto y encuentre el lugar que desea dejar su marcador de inicio para copiar, luego presione espacio.
  4. Desplácese hacia abajo y seleccione el texto que desea copiar. Cuando haya terminado, golpear el espacio de nuevo.
  5. El texto ahora estará en su portapapeles.
 10
Author: kungfuspider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-10 00:18:02

Esta respuesta se aplica a OS X.

Después de copiar el texto deseado en el buffer de pegado de pantalla GNU usando modo de copia , haga lo siguiente:

  1. En cualquiera de las ventanas de la pantalla, escriba pbcopy <enter>.
  2. Luego pega tu texto en la terminal usando el comando pegar de GNU Screen (Ctrl-a ] a menos que hayas cambiado tu llave de escape).
  3. Si el texto no termina en una nueva línea, presione <enter> para insertar una.
  4. Finalmente, presione Ctrl-d para hacer que pbcopy presione el texto al portapapeles del sistema.

Luego puede pegar el texto en otro lugar en OS X como de costumbre usando Command-v o una opción de menú equivalente.

 9
Author: scottgwald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-18 17:32:11

Esta respuesta funciona solo para un escenario donde su objetivo final es pegar el contenido del búfer copiado inmediatamente.

La forma más sencilla de hacerlo es dividiendo la pantalla en dos regiones. Puede hacer esto pulsando CTRL+a entonces |'Esto no es una i. Es la señal de la tubería en su teclado'

Pulsa CTRL+un entonces FICHA para pasar a la segunda región, CTRL+un entonces c a cree una nueva sesión en la segunda región.

Si desea copiar desde nano y pegar en terminal, abra el archivo en nano en la región izquierda, presione CTRL+a luego ESC, desplácese hasta el punto de inicio de su ubicación de copia y presione ESPACIO, seleccione el texto desplazándose hasta el punto final y presione ESPACIO nuevamente para marcar copia.

Ahora, todo lo que tienes que hacer es presionar CTRL+a luego TAB para cambiar a la región a su derecha y pulsa CTRL+un entonces ].

Su texto se escribirá en la línea de comandos. Tenga en cuenta que también puede verificar la opción de copia impresa si desea escribir directamente en el archivo.

 5
Author: CoderX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-19 19:26:52

Si es solo un poco de información que desea copiar solo resalte con el ratón y luego péguelo donde quiera.

Si está tratando de obtener mucha información, la sesión de pantalla se puede registrar en un archivo y luego puede copiar desde el archivo o limpiarlo un poco y usarlo para obtener instrucciones sobre cómo hacer las cosas

 -2
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-19 19:46:57

Finalmente hoy encontré una solución con mouse:

Mantenga pulsada Ctrl y haga clic derecho con el ratón. Aparece el menú contextual Copiar/pegar.

Algunas pantallas en https://michalzuber.wordpress.com/2015/01/28/gnu-screen-copy-paste-with-mouse/

 -3
Author: michalzuber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-28 09:08:31