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+Cy se pega conCtrl+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.