Acessar Clipboard Do X Pelo Terminal Com O xsel

Introdução

Quem nunca desejou selecionar um texto qualquer no navegador web e ter acesso aos dados selecionados no terminal? Bem, isso é possível. Hoje iremos aprender como acessar o buffer de seleção e clipboard do servidor X usando o comando xsel.

Instalação

Atualmente uso o Fedora 15 e instalei o xsel da seguinte maneira:

$ sudo yum install xsel

Uma versão 32 bits do pacote está disponível para o Slackware 13.37 em:

http://repository.slacky.eu/slackware-13.37/utilities/xsel/1.2.0/xsel-1.2.0-i686-7sl.txz

Definições

O x selection é um buffer usado pelo servidor X que pode ser usado como IPC, ou seja, uma comunicação entre clientes do X distintos. O x selection é divido em 3 tipos:

  • PRIMARY: É o buffer usado para copiar e colar usando o mouse. Esse é o buffer padrão das operações.
  • SECONDARY: Buffer raramente usado e muito pouco documentado. Não consegui muitas informações sobre ele, mas ele pode ser utilizado como um buffer auxiliar manipulável somente pelo xsel/xclip[1].
  • CLIPBOARD: Esse é o buffer que armazena os dados das conhecidas operações de copiar (ctrl+c) e colar (ctrl + v).

O xsel possui uma opção flag para habilitar cada um desses buffers.

Colando com o xsel

Selecione algo com o mouse e vá para um terminal gráfico e digite:

$ xsel

para colar o texto selecionado no terminal. O xsel sem opções faz o mesmo que o xsel -o.

Agora selecione um texto e aperte ctrl+c, para simular um ctrl+v no terminal, digite:

$ xsel -b

A opção -b faz o xsel operar em cima do CLIPBOARD ao invés do buffer primário.

Enviando dados para o xsel

O comando xsel consegue enviar dados para o x selection facilmente. Com isso podemos, por exemplo, colar a saída de um comando diretamente em um editor de texto.

Para isso use a opção -i de input:

$ xsel -i

Irá ler de stdin. Para ler de um arquivo:

$ xsel -i < /etc/passwd

Para colar basta clicar com o botão direito do mouse. Caso queira enviar os dados para o clipboard, use a opção -b. Com isso os dados estarão acessíveis via ctrl+v:

$ cat /etc/passwd | xsel -b -i

A opção -i por padrão sobrescreve o conteúdo antigo com os novos dados. Use a opção -a no lugar do -i para concatenar os dados antigos com os novos.

$ echo -n 'mus' | xsel -i
$ echo 'ica' | xsel -a
$ xsel
musica

Compartilhando o X selection com terminais tty

Executar o xsel em um terminal tty (aqueles acessíveis via ctrl+alt+Fn) irá gerar um erro, pois o terminal não está conectado no servidor X. A opção –display do xsel pode ser usada para indicar qual servidor X deverá ser usado. Desse modo podemos acessar o x selection do ambiente gráfico nos terminais tty.

Para fazer esse teste, primeiramente digite no ambiente gráfico, onde o servidor X está rodando:

$ echo $DISPLAY
:0

O “:0” é o que precisamos passar para o xsel. Envie qualquer coisa para o buffer primário:

$ echo 'daemonio' | xsel -i

Agora vá para um terminal tty com ctr+alt+Fn, logue e digite:

$ xsel --display ':0'
daemonio

Exemplos práticos

Nada melhor que alguns exemplos úteis utilizando o xsel:

1) Salvando uma página web

$ xsel > pagina_web.txt

Primeiramente selecione o texto da página (ctrl+a ou com o mouse) e depois digite o comando acima. O conteúdo da pagina estará no arquivo pagina_web.txt

2) Desprotegendo link invertido

$ xsel | rev | xsel -i -b

Antes de tudo selecione o link invertido para depois digitar o comando acima. O link invertido será passado para o rev que o inverterá. Uma segunda instância do xsel irá copiar o link para o clipboard. Agora digite ctrl+v na barra de endereços de seu navegador favorito e visite o link normalmente.

3) Postar a saída de algum comando

Em forums é comum postarmos a saída de algum comando para obtermos ajuda em determinado problema. Antes de conhecer o xsel e o xclip[1] eu primeiro salvava a saída de tal comando usando redirecionamentos e depois abria o arquivo salvo em um editor de texto para depois copiar seu conteúdo e colar no post do forum.

Usando o xsel não preciso mais desse trabalho todo, basta um:

$ lspci | xsel -i -b

para colocar a saída do comando lspci no clipboard.

Conclusão

Depois que conheci o xclip[1] e posteriormente o xsel quase todas as minhas tarefas foram agilizadas. Com um simples comando eu transfiro a complexidade da linha de comando para a comodidade do ambiente gráfico e isso tem me ajudado bastante.

Referências

[1] Acessar o clipboard do X com o xclip, by Daemonio (Acessado em: Setembro/2011)
https://daemoniolabs.wordpress.com/2011/02/10/acessar-clipboard-do-x-com-o-xclip/

[2] Man page do xsel (Acessado em: Setembro/2011)
http://linux.die.net/man/1/xsel

[3] Manipulando a clipboard do X11 com o xsel, by Hudson Murilo dos Santos (Acessado em: Setembro/2011)
http://cialinux.wordpress.com/2010/07/13/manipulando-a-clipboard-do-x11-com-o-xsel/

[4] Copiando textos no Terminal, by Lucas Villela Canoas (Acessado em: Setembro/2011)
http://www.dicas-l.com.br/arquivo/copiando_textos_no_terminal.php

2 pensamentos sobre “Acessar Clipboard Do X Pelo Terminal Com O xsel

  1. Só um detalhe:

    “Para colar basta clicar com o botão direito do mouse.”

    Na verdade é com o botão do MEIO do mouse, como vocês já devem ter percebido.

    Daemonio,
    t+

  2. Caramba cara, você viu essa minha dica!!!! Gostei muito do seu conteúdo aqui :)

    Descobri seu site ano passado! Sou um grande amante do sistema do pinguim também! Você ainda está por aí?

Deixe um comentário