Create a custom shortcut that types clipboard contents

I want to simulate keyboard input so that I can “paste” my clipboard contents to applications that don’t allow it (e.g. remote KVM). Right now, I’m trying to use xdotool and xclip:

xdotool type "$(xclip -o)"

This command works if I stay in a terminal window, and type that command myself. It types back my clipboard contents when I run the command. My goal is to bind this command to a hotkey, so that it works in any application.

Linux Sendkeys

If I use this hotkey, unexpected behavior occurs to whatever window has focus. e.g. my terminal window size shrinks (it’s somewhat amusing, actually). Similar results occur if I save it as a script and call the script, or if I encapsulate the command with sh -c. How can I make practical use of the powerful xdotool type command?

Asked By: blee


xdotool creates keypresses, and it won’t release the Ctrl key for you… The simplest solution is to add a delay, eg sleep 0.5 to wait for half a second, and to make sure you release Ctrl fast enough.

Answered By: Pierre Carrier

Actually there are two buffers accessible with Ctrl+V (the clipboard copy-paste) and Shift+Insert (the mouse mark and middle-click paste).

If you have the sessions appropriately connected to share clipboard, then one of the two should work automatically, no?

Answered By: Nick Andrik

You have two problems with this command. The first is that you need to make sure that the meta-keys in the binding are not pressed when it tries to run the command. Second, by default xclip selects XA_Primary buffer rather than the XA_CLIPBOARD. So you should pass clipboard as the selection parameter for xclip. Change your hotkey command to the following:

sh -c 'sleep 0.5; xdotool type "$(xclip -o -selection clipboard)"'
Answered By: Alex L.

sh -c ‘xdotool type –clearmodifiers — “$(xclip -o -selection clipboard)”‘

“–clearmodifiers” gets rid of CTRL/ALT/Shift etc, hopefully meaning the sleep is not required

“–” means end of xdotool options so that if the pasted test begins with – xdotool will not try to interpret it as an option

Answered By: Eschaton

Since Unbuntu now uses Wayland, xdotool doesn’t work by default.

I was able to modify Alex L’s solution to use ydotool:

sh -c 'sleep 0.5; xclip -o -selection clipboard | ydotool type --file -'

I needed newlines to be typed as carriage returns, which wasn’t available from the built in 0.1.8 ydotool, but did work great from 1.0.4 installed from sources following this guide.

Answered By: Rick