Courage has asked for the wisdom of the Perl Monks concerning the following question:

Dear all,

I often use Perl to help me with clipboard.
Usually I do this on Win32 and use Win32::Clipboard module.

Could you please advice on how this is done on Linux?

TIA.

  • Comment on how do I place text into clipboard on Linux?

Replies are listed 'Best First'.
Re: how do I place text into clipboard on Linux?
by tlm (Prior) on May 02, 2005 at 00:02 UTC

    This is a bit of a kluge:

    use Tk; my $selection = MainWindow->new->SelectionGet; print $selection, $/;

    the lowliest monk

      This probably not exatly what I want

      by "Perl to help me with clipboard" I meant that I copied something into clipboard elsewhere (not in my application), then run my one-liner and have in my clipboard something else.

      Say, I start Mozilla, make a selection, and then in menu item "Edit->Copy" place a selection into clipboard.

      Can I write a one-liner to, say, upcase contents of clipboard, when I paste it elsewhere, I will see upcased content of selection in that Mozilla, which could be un-selected to the moment already?

      Also, it must work without X11 also.

      In win32 I do this as: perl -MWin32::Clipboard -we "$clip=Win32::Clipboard;$clip->Set(uc($clip->Get())"
      my last example is lenghty, but I have wrappers so my actual one-liner is much shorter.

        I have no experience with this very problem, but I would look into the docs for Tk::selection and Tk::Clipboard.

        the lowliest monk

        Tk::Clipboard is included in Linux's Tk.

        Use it like this (very simple)...

        use Tk::Clipboard; my $mw = MainWindow->new(); ... ## after having what you want to copy... $mw->clipboardClear; ## prepare the clipboard (ne +w entry) $mw->clipboardAppend($selected_list); ## copy it (see perldoc)
        Please, read the perldoc for more types of data that could be added to the clipboard. It defaults to strings.

        If you don't use clipboardClear before the second or successive copies, it concatenates what you copy...

        { \ ( ' v ' ) / }
        ( \ _ / ) _ _ _ _ ` ( ) ' _ _ _ _
        ( = ( ^ Y ^ ) = ( _ _ ^ ^ ^ ^
        _ _ _ _ \ _ ( m _ _ _ m ) _ _ _ _ _ _ _ _ _ ) c h i a n o , a l b e r t o
        Wherever I lay my KNOPPIX disk, a new FREE LINUX nation could be established
Re: how do I place text into clipboard on Linux?
by starbolin (Hermit) on May 02, 2005 at 00:52 UTC

    A quick search of CPAN shows

    Tk::clipboard

    and

    Clipboard

    Have you looked at these?


    s//----->\t/;$~="JAPH";s//\r<$~~/;{s|~$~-|-~$~|||s |-$~~|$~~-|||s,<$~~,<~$~,,s,~$~>,$~~>,, $|=1,select$,,$,,$,,1e-1;print;redo}

      Did you look at Clipboard ? It is merely an empty shell and the author wants to cobble together "drivers" with the help of others. The author didn't even go as far as doing a search and incorporate Win32::Clipboard and Tk::Clipboard as quick solutions. So I don't think that Clipboard is a module with much use.

Re: how do I place text into clipboard on Linux?
by zentara (Cardinal) on May 02, 2005 at 11:22 UTC
    Also, it must work without X11.

    I'm not sure that can be done in a "universal manner". Think about how the clipboard works...it needs X11. In a console, for instance, I use "midnight commander's clipboard", which saves it's content to a file in ~/.mc.

    In X you have the "mouse clipboard" and the "X clipboard" and sometimes the internal clipboards of each application. In Windows, the consoles and the Window's are tightly integrated, but in linux, they are totally separate.

    I would go to freshmeat and search for "clipboard", then see how they do it.


    I'm not really a human, but I play one on earth. flash japh
      thanks, that helps.

      Also, it probably reasonable using some "xclip" application, which I am not aware of...
      Also, "gvim" behaves reasonably, may be searching there also will help.

Re: how do I place text into clipboard on Linux?
by Cody Pendant (Prior) on May 02, 2005 at 11:34 UTC
    Doesn't Linux have pbcopy?


    ($_='kkvvttuu bbooppuuiiffss qqffssmm iibbddllffss')
    =~y~b-v~a-z~s; print
      mine dooesn't :(

      But I'll look deeper in this direction, thanks!

Re: how do I place text into clipboard on Linux?
by starbolin (Hermit) on May 02, 2005 at 17:06 UTC

    The most universal solution is the utility xcb which has been ported to many unices. I found ports for Linux, Debian, SUSE, FreeBSD, AIX and HPUX. Unfortunately it is not completely universal ( for instance, Mac OS uses pbcut/pbpaste ) nor is it perl but it does seem to be the easiest way to get from A to B.


    s//----->\t/;$~="JAPH";s//\r<$~~/;{s|~$~-|-~$~|||s |-$~~|$~~-|||s,<$~~,<~$~,,s,~$~>,$~~>,, $|=1,select$,,$,,$,,1e-1;print;redo}