There are two command-line tools (in two different packages) to access the X clipboard:
xclip
xsel
I would love to know the difference between those two and hear a recommendation which one to use in which cases.
There are two command-line tools (in two different packages) to access the X clipboard:
xclip
xsel
I would love to know the difference between those two and hear a recommendation which one to use in which cases.
Both xclip
and xsel
can store text into 3 different selections (by default it is primary selection). From experience I know that primary selection is basically what you high-light and released with the middle mouse click (which corresponds to pressing both right and left touchpad key on a laptop). The clipboard is the traditional CtrlV.
By examining the man
pages for both, however, I've discovered that xclip
wins in one aspect - reading from an input file:
xieerqi:
$ cat testfile.txt
HELLOWORLD
xieerqi:
$ xclip -selection clipboard testfile.txt
xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found
xieerqi:
$ xsel testfile.txt
Usage: xsel [options]
Manipulate the X sele . . . (usage page goes on)
Of course you could use shell redirection with xsel
to get around that
xieerqi:
$ xsel --clipboard < testfile.txt
xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found
xclip
also wins in the fact that you can output the contents of clipboard to file (which is perhaps useful when you want to redirect PRIMARY selection , i.e. highlights). xsel
offers only output to stdout
xsel
can only operate through STDIN/STDOUT, while xclip
also can use real files there? How boring! Well, I made friends with xsel
a while ago and can live with using shell redirections to files, so I'll keep using that.
– Byte Commander
Dec 4 '15 at 10:38
xclip
today and wondered if it was the right choice. Your answer confirmed it was because I'm creating file from clipboard to use with diff
command. +1 Thanks :)
– WinEunuuchs2Unix
Mar 18 '17 at 17:20
In addition to @Serg answer, there is a piece of information from the Tmux page in the Arch Wiki that can be useful in some specific cases:
unlike xsel it [xclip] works better on printing raw bitstream that doesn't fit the current locale. Nevertheless, it is neater to use xsel instead of xclip, because xclip does not close STDOUT after it has read from tmux's buffer. As such, tmux doesn't know that the copy task has completed, and continues to wait for xclip's termination, thereby rendering tmux unresponsive. A workaround is to redirect STDOUT of xclip to /dev/null
Something else to keep in mind, xsel
has fewer dependencies than xclip
:
# apt-cache depends xsel
xsel
Depends: libc6
Depends: libx11-6
Conflicts: xsel:i386
# apt-cache depends xclip
xclip
Depends: libc6
Depends: libx11-6
Depends: libxmu6
Conflicts: xclip:i386
Use xclip
, because xsel
can not extract binary data from clipboard, such as screenshost. For example, save screenshot to clipboard:
$ maim -s | xclip -selection clipboard -t image/png
Then save to file and compare output:
$ xclip -o -selection clipboard > 1xclip
$ xsel -o --clipboard > 1xsel
$ ls -go 1*
-rw-rw-r-- 1 11948 Sep 26 20:13 1xclip
-rw-rw-r-- 1 0 Sep 26 20:13 1xsel
xclip
isn't necessarily always able to handle binary data either, e.g. when using the "Copy to clipboard" button from gnome-screenshot I get no output at all. When copying an image with Ctrl+C from e.g. a LibreOffice Document, it only works if I manually specify the target type like xclip -o -t image/png -selection clipboard
.
– Byte Commander
Sep 26 '18 at 20:28
gnome-screenshot
at all, but that's another issue - gitlab.gnome.org/GNOME/gnome-screenshot/issues/14
– anatoly techtonik
Sep 28 '18 at 9:32