Este artículo fue publicado originalmente en go2linux.org. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.

xclip conecta el shell con el portapapeles del escritorio gráfico. Envíale la salida de un comando y pega el resultado en un navegador, un editor o una ventana de chat, sin seleccionar texto en la terminal con el ratón.

Instalación

sudo apt install xclip        # Debian, Ubuntu
sudo dnf install xclip        # Fedora
sudo pacman -S xclip          # Arch

xclip habla con el servidor X, así que necesita una sesión gráfica corriendo sobre X11. En Wayland, el valor predeterminado en los escritorios GNOME y KDE actuales, usa wl-copy y wl-paste; están explicados al final de este artículo. Para saber cuál tienes:

echo $XDG_SESSION_TYPE

Dos portapapeles

Este es el detalle que confunde a todos la primera vez. X11 tiene más de un "portapapeles":

  • PRIMARY contiene lo último que seleccionaste con el ratón. Se pega con el botón central del ratón.
  • CLIPBOARD es el que se llena con Ctrl+C y se pega con Ctrl+V.

xclip usa PRIMARY a menos que le indiques otra cosa. Entonces esto:

uptime | xclip

se puede pegar con el botón central, pero Ctrl+V sigue pegando lo que había antes. Para usar el portapapeles normal agrega -selection clipboard, que se puede abreviar como -sel clip:

uptime | xclip -selection clipboard

El resto de los ejemplos usa la forma corta.

Copiar

La salida de un comando:

free -h | xclip -sel clip

Una página de manual completa, para pegarla en un documento:

man htop | xclip -sel clip

El contenido de un archivo, de cualquiera de las dos formas:

xclip -sel clip < notas.txt
xclip -sel clip notas.txt

Tu clave pública de SSH, lista para pegar en un formulario web:

xclip -sel clip < ~/.ssh/id_ed25519.pub

Pegar

-o escribe el contenido del portapapeles en la salida estándar. De ahí puede ir a un archivo o a otro comando:

xclip -sel clip -o
xclip -sel clip -o > archivo.txt
xclip -sel clip -o | wc -w

Selecciona un texto en una página web, presiona Ctrl+C, y el segundo comando lo guarda en un archivo. Con texto que solo resaltaste, omite la opción y lee PRIMARY:

xclip -o > archivo.txt

El salto de línea final

La mayoría de los comandos terminan su salida con un salto de línea, y xclip también lo copia. Pega eso en una terminal y la línea se ejecuta de inmediato. La opción -r quita el último salto de línea:

pwd | xclip -r -sel clip

En versiones antiguas sin -r, quítalo tú mismo:

pwd | tr -d '\n' | xclip -sel clip

Copiar y seguir viendo la salida

-f vuelve a imprimir la entrada en la salida estándar, de modo que el comando se comporta como tee con el portapapeles:

ip -br addr | xclip -f -sel clip

Imágenes y otros tipos

El portapapeles puede contener más que texto. Indica el tipo a xclip con -t:

xclip -sel clip -t image/png captura.png

Ahora Ctrl+V en un editor de imágenes o una aplicación de chat pega la imagen. En la otra dirección, guarda una imagen que fue copiada en otra aplicación:

xclip -sel clip -t image/png -o > pegada.png

Lista los tipos en que se ofrece el contenido actual del portapapeles:

xclip -sel clip -o -t TARGETS

Alias prácticos

Si vienes de macOS vas a extrañar pbcopy y pbpaste. Agrégalos a ~/.bashrc:

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
cat informe.txt | pbcopy
pbpaste | sort | uniq

Cosas que conviene saber

Necesita una pantalla. En una consola de texto o en una sesión SSH simple obtienes Error: Can't open display. Por SSH, xclip funciona con reenvío de X (ssh -X), y entonces usa el portapapeles de tu equipo local.

Se queda en ejecución. En X11 el portapapeles no es un área de almacenamiento: el programa que copió los datos tiene que entregarlos cuando alguien pega. Por eso xclip permanece en segundo plano hasta que otro programa copia otra cosa. Es normal. Si no hay un gestor de portapapeles en ejecución, el contenido desaparece cuando ese proceso en segundo plano termina.

Contraseñas. Todo lo que está en el portapapeles puede ser leído por cualquier programa de tu sesión, y los gestores de portapapeles guardan un historial. Piénsalo dos veces antes de enviarle secretos.

En Wayland: wl-copy y wl-paste

Instala el paquete wl-clipboard:

sudo apt install wl-clipboard
sudo dnf install wl-clipboard
sudo pacman -S wl-clipboard

Los dos comandos usan el portapapeles normal de forma predeterminada, así que son más cortos de escribir:

free -h | wl-copy
wl-copy < notas.txt
wl-paste > archivo.txt

-n quita el salto de línea final, --primary usa la selección primaria, y -t establece el tipo:

pwd | wl-copy -n
wl-copy -t image/png < captura.png
wl-paste --list-types

Ver también

man xclip, man wl-copy. xsel es otra herramienta para X11 que hace el mismo trabajo con opciones distintas.