Code SnippetsAccess klipper clipboard on CLI under KDE4 Syndicate content

Wed, 08/13/2008 - 23:12

NOTE: find most recent version on github: https://github.com/milianw/shell-helpers/blob/master/clipboard

Here’s a little script you can save in your path and do things like

  1. # paste current clipboard into file
  2. clipboard > "some_file"
  3. # copy some file into clipboard
  4. cat "some_file" | clipboard

Actually I find it rather useful so I thought I should share it.

  1. #!/bin/bash
  2.  
  3. # Access your KDE 4 klipper on the command line
  4. # usage:
  5. # ./clipboard
  6. # will output current contents of klipper
  7. # echo "foobar" | ./clipboard
  8. # will put "foobar" into your clipboard/klipper
  9.  
  10. # check for stdin
  11. if ! tty -s && stdin=$(</dev/stdin) && [[ "$stdin" ]]; then
  12. # get the rest of stdin
  13. stdin=$stdin$'\n'$(cat)
  14. # oh, nice - user input! we set that as current
  15. # clipboard content
  16. qdbus org.kde.klipper /klipper setClipboardContents "$stdin"
  17. exit
  18. fi
  19.  
  20. # if we reach this point no user input was given and we
  21. # print out the current contents of the clipboard
  22. qdbus org.kde.klipper /klipper getClipboardContents

As usually, save the file (attached below) in your $PATH and make it executable.

PS: Thanks to Martin Vidner for his article on D-BUS btw. - it gave me the proper dbus commands. PPS: Thanks the the various comments below!

AttachmentSize
clipboard.sh647 bytes

Comments

that’s great! thnx! Mon, 03/14/2011 - 12:05 — Anonymous (not verified)

that’s great! thnx!

You should use qdbus, this Thu, 01/06/2011 - 21:33 — Jice (not verified)

You should use qdbus, this simplifies a lot. Here is the version I’m using:

  1. #!/bin/bash
  2.  
  3. # Access your KDE 4 klipper on the command line
  4. # usage:
  5. # ./clipboard
  6. # will output current contents of klipper
  7. # echo "foobar" | ./clipboard
  8. # will put "foobar" into your clipboard/klipper
  9.  
  10. # check for stdin
  11. if ! tty -s && stdin=$(</dev/stdin) && [[ "$stdin" ]]; then
  12. # get the rest of stdin
  13. stdin=$stdin$'\n'$(cat)
  14. # oh, nice - user input! we set that as current
  15. # clipboard content
  16. qdbus org.kde.klipper /klipper setClipboardContents "$stdin"
  17. exit
  18. fi
  19.  
  20. # if we reach this point no user input was given and we
  21. # print out the current contents of the clipboard
  22. qdbus org.kde.klipper /klipper getClipboardContents

So you won’t regret dcop good ol’ time anymore ;-)

thanks, updated the script Fri, 03/18/2011 - 17:13 — Milian Wolff

thanks, updated the script now.

You should change the script Tue, 12/21/2010 - 12:52 — Kevin Brubeck Unhammer (not verified)

You should change the script to say “read -r -t 1 stdin”, that is, add the -r option so that read won’t treat \1 etc. as escapes.

It’s very annoying when working on one-liners in the shell, then deciding they should go into a file, and then finding that all the sed commands are messed up =P

This small wrapper script Fri, 11/19/2010 - 07:17 — notslad (not verified)

This small wrapper script will put the output of the command into a GUI msgbox.. in case you want to see the results of piping the clipboard contents through a command by running it via alt-f2..

  1. #!/bin/bash
  2.  
  3. ! type $1 >/dev/null && kdialog --error "Invalid Command: $1" && exit 1
  4.  
  5. results="$(clipboard | $@)"
  6.  
  7. [[ -z "$results" ]] && kdialog --error "Nothing returned through stdout" && exit 2
  8.  
  9. kdialog --msgbox "$results"
  10. exit $?

Very old post but still a Wed, 09/29/2010 - 11:19 — Paolo (not verified)

Very old post but still a good idea.

Just a thing: to get rid of that 1 second wait, I changed the beginning of the script (lines 6,7,9).

This way, the script doesn’t even try to read from standard input if it’s connected to a terminal.

  1. #!/bin/bash
  2.  
  3. # check for stdin
  4. # since we don't want to wait endlessly we set a timeout
  5. # a pity `read` only supports seconds and no fractions...
  6.  
  7. if ! tty -s && stdin=$(</dev/stdin) && [[ "$stdin" ]] ; then
  8. # get the rest of stdin
  9. # not necessary - already got everything
  10. # oh, nice - user input! we set that as current
  11. # clipboard content
  12. dbus-send --type=method_call --dest=org.kde.klipper \
  13. /klipper org.kde.klipper.klipper.setClipboardContents \
  14. string:"$stdin"
  15. exit
  16. fi
  17.  
  18. # if we reach this point no user input was given and we
  19. # print out the current contents of the clipboard
  20. # note: I hate the output of dbus, dcop was much easier in that regard!
  21. dbus-send --print-reply --dest=org.kde.klipper /klipper \
  22. org.kde.klipper.klipper.getClipboardContents | awk '
  23. BEGIN { output = ""; }
  24. {
  25. if ( NR > 1 ) {
  26. output = output $0 "\n";
  27. }
  28. }
  29. END {
  30. print substr(output, 12, length(output) - 13);
  31. }'

thanks, incorporated into my Sat, 11/20/2010 - 19:14 — Milian Wolff

thanks, incorporated into my git branch.

This is awesome. I extended Thu, 05/06/2010 - 10:09 — Morten Slott Hansen (not verified)

This is awesome. I extended this with xmlcopyeditor and KDE4 hotkeys to have a quick way to get the clipboard content into an XML editor.

I created a script called xmlCopyEditor_readClipboard.sh

  1. #!/bin/sh
  2. /home/msh/bin/clipboard.sh > /tmp/clipboard.txt
  3. /usr/bin/xmlcopyeditor /tmp/clipboard.txt

And attached it to a hotkey combination meta + shift + x

This has made my life so much better - hope others can find this usefull!

EDIT: fixed formatting, regards - Milian

Hi, interesting post really. Tue, 10/20/2009 - 14:58 — Joetke (not verified)

Hi, interesting post really. But I wonder whether KDE 4 is mandatory because when I run your script I got this response: Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.kde.klipper was not provided by any .service files Regards.

Yes, this version is for KDE Thu, 10/22/2009 - 00:44 — Milian Wolff

Yes, this version is for KDE 4. I once had a KDE 3 version, but it looks like I lost it. It was much easier though, you’ll just have to exchange the DBUS stuff with the good old DCOP from KDE 3.

Thanks, it works flawlessly. Thu, 11/05/2009 - 14:38 — joetke (not verified)

Thanks, it works flawlessly. Regards from Strasbourg, France.

I have just found the answer Wed, 08/12/2009 - 01:21 — Anonymous (not verified)

I have just found the answer to my question. The trick is not to use “dbus-send”. It works with qdbus org.kde.klipper /klipper getClipboardHistoryItem 0 qdbus org.kde.klipper /klipper getClipboardHistoryItem 1 qdbus org.kde.klipper /klipper getClipboardHistoryItem 2

Is there some way to access Tue, 08/11/2009 - 22:23 — Anonymous (not verified)

Is there some way to access the klipper history from the command line?

Just look for yourself: run Wed, 08/12/2009 - 01:09 — Milian Wolff

Just look for yourself:

  1. run qdbusviewer
  2. go to org.kde.klipper
  3. go to klipper/org.kde.klipper.klipper
  4. pick any *history* method you’d like

For inspiration on how to use those stuff in bash see my script above.

Thanks Milian this helped me Tue, 12/06/2011 - 09:32 — Simon (not verified)

Thanks Milian this helped me a lot!

AWESOME! I was sick of Thu, 07/30/2009 - 02:31 — Sam Tresler (not verified)

AWESOME! I was sick of ctl-shift-V’ing 40 lines at a time so I googled and found this. Precisely what I was looking for, thank you.

Here’s a little script you Thu, 11/20/2008 - 20:59 — Antonio (not verified)

Here’s a little script you can save in your path and do things like

cat “some_file” > clipboard

Of course, it destroyed the “clipboard” file :-)

Greetings from Spain!

P.S. I suppose it’s

  1. cat "some_file" | clipboard

Thanks, fixed. Wed, 11/26/2008 - 18:42 — Milian Wolff

Thanks, fixed.

Dunno if you’re still fixing Sun, 09/25/2011 - 15:26 — alexs77 (not verified)

Dunno if you’re still fixing stuff, but UUoC always makes my wanna cry… :/

You’re “storing” the output of the clipobard script with:

clipboard > file

You can also feed it from standard input without having to “misuse” cat:

clipboard < file

Cheers! And thanks for the script ;)

Post new comment

The content of this field is kept private and will not be shown publicly.
  • You can use Markdown syntax to format and style the text. Also see Markdown Extra for tables, footnotes, and more.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <pre>.
  • Web page addresses and e-mail addresses turn into links automatically.

More information about formatting options