› dbus

» Access klipper clipboard on CLI under KDE4
Wed, 08/13/2008 - 23:12
Here’s a little script you can save in your path and do things like
# paste current clipboard into file clipboard > "some_file" # copy some file into clipboard cat "some_file" | clipboard
Actually I find it rather useful so I thought I will have to share it.
Since KDE4 D-BUS is used throughout KDE and thus in Klipper as well. IMO they should really rework the output of dbus-send or add some more flags (what about --quiet). Well that’s the reason why the script below is somewhat long. But nothing a little bit of bash+awk magic couldn’t cope with:
#!/bin/bash # check for stdin # since we don't want to wait endlessly we set a timeout # a pity `read` only supports seconds and no fractions... read -t 1 stdin if [[ "$stdin" != "" ]]; then # get the rest of stdin stdin=$stdin$(cat) # oh, nice - user input! we set that as current # clipboard content dbus-send --type=method_call --dest=org.kde.klipper \ /klipper org.kde.klipper.klipper.setClipboardContents \ string:"$stdin" exit fi # if we reach this point no user input was given and we # print out the current contents of the clipboard # note: I hate the output of dbus, dcop was much easier in that regard! dbus-send --print-reply --dest=org.kde.klipper /klipper \ org.kde.klipper.klipper.getClipboardContents | awk ' BEGIN { output = ""; } { if ( NR > 1 ) { output = output $0 "\n"; } } END { print substr(output, 12, length(output) - 13); }'
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.