Acessar clipboard do X com o xclip

Introdução

Sempre tive a curiosidade de saber se existia algum modo de interagir com o clipboard do X. Navegando pela net encontrei o comando xclip. Esse pequeno programa tem acesso de leitura e gravação ao clipboard de seu servidor X de maneira simples e fácil.
Em um outro tutorial encontrei o programa xsel que faz exatamente a mesma coisa que o xclip só que ele tem mais opções e creio que já vem instalado por padrão em muitas distribuições linux (veio no meu Fedora 14). Então por que o xclip? Eu uso mais o Slackware e nele nenhum desses dois programas veio instalado. Como achei o xclip primeiro na minha pesquisa, resolvi fazer um tutorialzinho sobre ele. Talvez em outra oportunidade falo sobre o xsel.

O clipboard do X

Com o xclip iremos trabalhar com dois buffers do X. Usando o xclip podemos acessar e enviar dados para os buffers com extrema facilidade. O detalhe é que mesmo sem conhecer esses buffers, nós os já acessamos desde a primeira vez em que usamos o nosso querido sistema linux. Os buffers são:

  1. Buffer de seleção: Esse buffer guarda todo pedaço de texto que é selecionado pelo usuário. Essa seleção pode ocorrer pelo uso do mouse ou pelo teclado mesmo (ex: Ctrl+a ou Shift+seta de direção).
  2. Buffer de cópia: Já esse buffer armazena todo pedaço de texto que foi selecionado e que posteriormente o comando copiar foi acionado. Para acionar esse “comando de copiar” basta pressionar as teclas Ctrl+c ou no menu Editar->Copiar de um editor de texto qualquer.

Ok! Aprendemos a enviar dados para os buffers, mas como obter esses dados? Isso você também já sabe. Para recuperar os dados do buffer de cópia, utilize a sequência  Ctrl+v. Fácil. Você também pode obter esses dados pelo menu Editar->Colar de qualquer editor de texto. O que não pode ser trivial para alguns é obter os dados do buffer de seleção. Eu mesmo não sabia que esse buffer existia, só aprendi quando um amigo meu copiava e colava coisas no terminal usando somente o mouse. Bem, para recuperar os dados desse buffer é só utilizar o botão do meio do mouse. Como hoje em dia a maioria dos mouses tem 3 botões (já existe mouse com 18), praticamente qualquer usuário pode usufruir dessa técnica ninja.

Para quem não conhecia essa funcionalidade, faça o teste agora mesmo. Selecione algo com o mouse e depois vá para um editor de texto por exemplo, e pressione o botão do meio do mouse. Veja que o texto selecionado foi inserido exatamente na posição onde foi feito o clique do botão central do mouse.

Instalação do xclip

Como disse, aqui no meu Slackinho o xclip não veio instalado. Por sorte minha a instalação foi tranquila e sem aquela chatice de dependências. Verifique se há como instalar o xclip em sua distribuição pelo gerenciador de pacote porque eu compilei na unha mesmo.

Baixe o xclip aqui: http://sourceforge.net/projects/xclip/

Descompacte e instale:

$ tar -zxvf xclip-X.XX.tar.gz
$ cd xclip-X.XX
$ make
# make install

Faça o teste e veja se o programa foi corretamente instalado:

$ xclip -h

O xclip

Pelo help do programa você vê que ele não possui muitas opções, por isso gostei desse programa. Simples e rápido. O xclip sempre considera por padrão a opção -i. Isso implica que ele irá esperar dados de stdin e quando esses dados chegarem, ele irá gravá-los no buffer. Mas qual buffer? O buffer de seleção é usado como padrão.

As opções -i (input/entrada) e -o (output/saída) controlam o comportamento do xclip. A opção -selection indica em qual buffer o xclip deve trabalhar. Os argumentos para -selection que utilizaremos serão: primary (= buffer de seleção) e clipboard (= buffer de cópia).

Note que as opções -i e -o não devem aparecer juntas na linha de comando do xclip. Caso apareçam, a opção -o sobrescreve o comportamento da opção -i. Isso implica para nós que para trocar o conteúdo dos buffers, como alguns leitores já devem ter imaginado, é necessário invocar o xclip novamente através de um pipe.

Exemplos de uso

Ufa! Finalmente exemplos. Vejamos alguns:

1) Enviar dados para os buffers

$ echo daemonio | xclip

“Aham.. e agora?” – Agora a string daemonio está no buffer de seleção, com isso podemos obter essa string apenas apertando o botão do meio do mouse.

$ cat /etc/password | xclip

Desse jeito enviamos o conteúdo do arquivo passwd para o buffer primário. Vá para um editor de texto e aperte o botão do meio do mouse para colar o conteúdo desse arquivo.

$ xclip /etc/passwd

Faz a mesma coisa que o comando acima. Isso se deve pelo fato que o xclip aceita como último argumento o nome de um arquivo.

$ xclip -selection clipboard /etc/passwd

Envia o arquivo passwd para o buffer de cópia. Para recuperar o conteúdo do passwd, aperte Ctrl+v em um editor de texto qualquer.

2) Recuperar dados dos buffers

$ xclip -o

Manda pra stdout o conteúdo do buffer de seleção.

$ xclip -o -selection clipboard

Manda pra stdout o conteúdo do buffer de cópia.

Observe aqui que os dados vão para stdout. O que isso significa? Pipes & Redirecionamentos.

$ xclip -o > daemonio_xclip.txt

Antes de tudo mande um ctrl+a nessa página que você está lendo. Agora vá para o terminal mais próximo e digite o comando acima. Pronto. Você acabou de salvar nesse txt o conteúdo dessa página.

$ xclip -o -selection clipboard | sed 's/uva/abacaxi/g'

Esse comando substitui todas as ocorrências de uva por abacaxi no buffer de cópia. Note que esse buffer não foi modificado. Para fazer isso temos que redirecionar a saída de tudo para um novo xclip. Veja:

$ xclip -o -selection clipboard | sed 's/uva/abacaxi/g' | xclip -selection clipboard

Agora mande um ctrl+v e veja o conteúdo modificado.

E para copiar o conteúdo de um buffer para outro? Agora ficou fácil:

$ xclip -o | xclip -selection clipboard

Copia o buffer primário no buffer de cópia. Só que, se o objetivo for trocar o conteúdo dos buffers, teremos que invocar mais de um comando no shell e salvar o conteúdo do buffer que será sobrescrito primeiro:

$ CLIPBOARD=$(xclip -o -selection clipboard)
$ xclip -o | xclip -selection c
$ xclip <<< "$CLIPBOARD"

Eu frequentemente baixo músicas e filmes LEGAIS (¬¬”) nesses sites de armazenamento de arquivos como megaupload e rapidshare. Os sites que fornecem as URL’s ultimamente estão utilizando o tal protetor de links. O bom que a maioria “protege” seus links somente os invertendo. Numa máquina com comandos padrões do linux e com a ajuda do xclip, é possível obter a URL correta de uma maneira extremamente fácil. Primeiramente, selecione a url invertida e logo em seguida vá para um terminal e faça:

$ xclip -o | rev | xclip

Vá para seu navegador e aperte o botão do meio do mouse, depois carregue a página e baixe seu arquivo normalmente. Pronto!

É, acho que é isso. O melhor jeito para aprender é brincar um pouco com ele. Crie scripts, copie, cole, selecione, e comente. Até.

Links & Referências

  1. http://www.vivaolinux.com.br/dica/Terminal-um-jeito-inteligente-de-copiar-e-colar
  2. http://linuxtidbits.wordpress.com/2008/02/22/command-line-to-clipboard/
  3. http://elcasey.wordpress.com/2008/02/12/xclip-use-the-clipboard-from-the-command-line/

http://www.vivaolinux.com.br/dica/Terminal-um-jeito-inteligente-de-copiar-e-colar

3 pensamentos sobre “Acessar clipboard do X com o xclip

  1. Pingback: Acessar Clipboard Do X Pelo Terminal Com O xsel | Daemonio Labs

Deixe um comentário