Le Copier / Coller et le presse-papier sous Linux

On utilise tous quotidiennement le sacro-saint « Copier / Coller » pour échanger des données d’une application à une autre.

Cette fonctionnalité souvent résumée aux raccourcis qui lui sont associés Ctrl-C et Ctrl-V utilise une zone tampon, le presse papier, en Anglais « clipboard ».

On va voir aujourd’hui comment fonctionne le « clipboard » sous Linux, avec le terminal, avec tmux et dans un script.

Installer xclip

Tout d’abord on va installer la commande xclip qui permet d’interagir avec le presse-papier:

$ sudo apt-get install xclip

Sélection avec la souris

Pour montrer l’utilisation de xclip, on va créer un fichier texte avec deux lignes:

$ cat test_file
texte sélectionné et copié avec la souris
texte copié avec Ctrl-C

On va ensuite sélectionner à la souris la première ligne du fichier telle qu’affichée dans notre terminal.

$ cat test_file 
texte sélectionné et copié avec la souris
texte copié avec Ctrl-C

Puis, à l’invite du terminal, on va cliquer sur le bouton du milieu de la souris.

On obtient alors le résultat suivant:

$ cat test_file 
texte sélectionné et copié avec la souris
texte copié avec Ctrl-C
pyfourmond@ron-wood:~$ texte sélectionné et copié avec la souris

Nous venons de faire un « Copier / Coller » à la souris.

Le texte sélectionné a été copié dans le presse-papier et peut être collé de nouveau avec la commande:

$ xclip -o
texte sélectionné et copié avec la souris

Le ou les presse-papier ?

Quand on parle du presse-papier sous Linux, ce n’est pas complètement exact, car il en existe en réalité 3.

Mais en pratique on n’en utilise que 2 !

Dans l’exemple précédent, en sélectionnant à la souris on a utilisé le presse-papier dit « primaire », et la commande précédente aurait pu être écrite comme suit:

$ xclip -o -sel primary
texte sélectionné et copié avec la souris

On voit donc que le presse-papier utilisé par défaut par la commande xclip est le presse-papier primaire.

Copier / Coller au clavier

Si l’utilisation de la souris est commode, celle du clavier ne l’est pas moins, notamment si vous avez des douleurs récurrentes dans la main droite, à cause précisément de l’utilisation régulière de la souris 🙁

Aussi, sélectionner du contenu dans une application graphique, par exemple un éditeur de texte, avec uniquement le clavier prend tout son sens, et c’est là que l’on a recours aux raccourcis bien connus Ctrl-C et Ctrl-V.

Donc avec notre fichier précédent édité avec Sublime Text:

On sélectionne la deuxième ligne du fichier et on entre Ctrl-C.

Nous venons de copier du contenu dans le presse-papier de Linux nommé « clipboard ».

On peut le vérifier avec:

$ xclip -o -sel clipboard
texte copié avec Ctrl-C

On peut même utiliser les deux presse-papier en même temps, puisque le contenu du presse-papier primaire est toujours là:

$ xclip -o -sel primary
texte sélectionné et copié avec la souris

Dans le terminal

Les raccourcis Ctrl+C et Ctrl+V fonctionnent bien dans les applications graphiques. En revanche dans le terminal, vous devrez utiliser Ctrl+Maj+C et Ctlr+Maj+V.

Et avec tmux ?

Les commandes xclip -o précédentes sont également utilisables dans une session tmux, permettant d’échanger depuis une application ou un terminal vers votre session tmux.

De la même façon, l’utilisation du presse-papier primaire est aussi possible via le clic du bouton du milieu, à condition toutefois d’avoir activé l’utilisation de la souris avec tmux (chose que les puristes de l’outil vous déconseilleront !) et d’appuyer sur la touche Maj en même temps.

Alimenter le presse-papier en ligne de commande

On vient de voir comment alimenter le presse-papier avec la souris ou le clavier, il est également possible de l’alimenter directement avec la commande xclip comme suit:

$ ls /var | xclip

On aurait pu aussi ajouter le flag -i qui est implicite:

$ ls /var | xclip -i

On a donc copié le résultat de la commande ls dans le presse-papier primaire:

$ xclip -o
backups
cache
crash
lib
local
lock
log
mail
metrics
opt
run
snap
spool
tmp
www

Cloner un dépôt GitHub

L’utilisation de xclip en ligne de commande nous permet par exemple de cloner un dépôt GitHub après avoir cliqué sur l’icône de GitHub, comme suit:

$ git clone $(xclip -o -sel clipboard)

Conclusion

On a vu dans ce billet l’utilisation du « clipboard » sous Linux dans le terminal et avec tmux, le fait que clavier et souris utilisent des zones tampon différentes et que le « Copier / Coller » peut aussi être utilisé dans des scripts Shell.