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
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+
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í?