viernes, noviembre 30, 2018

Copiar al portapapeles local desde una máquina remota

OS X tiene dos comandos , pbpaste y pbcopy que sirven para controlar el portapapeles desde la línea de comandos. De igual manera, en entornos Xwindow existe el comando xclip o xsel para manejar el portapepeles desde la línea de comandos. Estos comandos nos funcionan en la máquina local. Pero, ¿sería posible copiar o pegar en el portapapeles local desde una máquina remota a la que nos hemos conectado a través de ssh.

Pues si el emulador de terminal que se está usando soporta los códigos de control ANSI, concretamente los agrupados bajo el epígrafe OSC, operating system control. Se obtiene mandando la secuencia ESC]52.

El emulador de terminal debe de soportar la secuencia de código OSC 52 para que funcione. Por ejemplo, el iTerm2 la soporta pero debe de activarse en Preferences ࢐ General ࢐ Application in terminal may access clipbpard, ya que puede tener implicaciones de seguridad si nos conectamos a un ordenador en el que no confiemos.

Un ejemplo de como usar esa secuencia de control para copiar el hostname de la máquina:

$ printf "\033]52;p;$(hostname|base64)\033\\"

Hay que tener en cuenta que:

  • La secuencia \033 es ESC en octal.
  • Los datos deben de estar codificado en base64.
  • El texto debe acabar en la secuencua ST que es ESC\.
  • En teoría, la operación de paste es sustituir la secuencia de base64 por ?. Sin emnbargo esta secuencua no está implementada en iTerm2. Parece ser que bajo tmux estas secuencias funcionan correctamente, con lo cual, tendré que probar más adelante.

Referencias

No hay comentarios: