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

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s