I have made the following observations:
$ xclip text.txt
The execution terminates instantly, it copies the content of text.txt
to the default selection XA_PRIMARY
which means you can paste it through your middle mouse button or xclip -o
.
When I want to see what xclip is doing, it does not terminate anymore:
$ xclip -verbose text.txt
Connected to X server.
Using UTF8_STRING.
Reading text.txt...
Waiting for selection requests, Control-C to quit
Waiting for selection request number 1
It does not terminate until I select something in my X11 system, for instance this very output I have pasted here. I would understand this, if the behavior is limited to verbose
. After all you want to sit around and see what happens.
I can reproduce the same behavior with strace
, but only if the fork option is provided
$ strace -f xclip text.txt
or when shelling out from Ruby with a system execution command that should return the output, which is in fact nothing.
$ ruby -e "`xclip text.txt`"
The hints that strace
gave, is that it is polling on a file descriptor to wait for an event. This event is satisfied if I select something. Is this behavior explainable? I have gotten evidence, that this is not reproducable on any system. Could this be related to the ticket #9 Not closing stdout when setting clipboard from stdin?
I am running xclip
version 0.12 on Ubuntu 13.04.
XClip forks a child when launched without -verbose
. The only difference with -verbose
is that there is no child forked and the same original process handles ConvertSelection events.
Usually in X Window toolkits copy/paste is implemented via X Selections:
Selections are global server resources named by an atom and owned by a particular client. The number of selections is not limited by the protocol; as many selections as atoms may exist. Selections are designed to provide the basis for building communication mechanisms between clients. The official definition is found in the glosary of the X Protocol:
"...an indirect property with dynamic type; that is, rather than having the property stored in the server, it is maintained by some client (the ‘‘owner’’). A selection is global in nature and is thought of as belonging to the user (although maintained by clients), rather than as being private to a particular window subhierarchy or a particular set of clients."
From the applications perspective, selections provide a mechanism for transmitting information between X clients. As X is a networking protocol, the existance of a separate channel for data transmission between the various clients cannot be assumed to exist. Selections are intended only for data transfer which directly relates the the user-interface aspects of the application, although there isn’t any enforcement of this policy.
Content of selection is stored in application itself and requested with ConvertSelection event ("convert" here because there is a way for client to ask for particular mimetype (or "view", or format) of selected data. Conversion, again, happens in the application which owns selected buffer.
Because of this architecture, there is no way to "copy text to system buffer and exit" - because you are a system buffer. XClip simulates "copy and exit" by forking and daemonizing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With