O cliente de linha de comando
Para as máquinas que não têm área de transferência nenhuma. Ele lê a entrada padrão e escreve na saída padrão, então se encaixa em tudo o que você já usa — e não é uma segunda implementação: importa exatamente os mesmos arquivos de criptografia e transporte que o navegador executa.
Instale
npx realtimeclipboard D75LV
Não há nada para instalar: o npx baixa, executa e não deixa
nada para trás. Se preferir tê-lo no seu PATH:
npm install -g realtimeclipboard
É preciso Node 22 ou mais novo, por causa do
WebSocket embutido. Num Node mais antigo o cliente sai na
hora e diz o motivo, em vez de falhar no meio de uma transferência.
Ou por um gerenciador de pacotes
brew install akshaynikhare/tap/realtimeclipboard-cli
Repare no nome: a formula do CLI é realtimeclipboard-cli e o
aplicativo de desktop é o cask realtimeclipboard. São coisas
diferentes, e instalar uma não te dá a outra — um servidor quer o pipe,
não um ícone na barra de menus.
Confira se funcionou
npx realtimeclipboard --version
Ao conectar, ele imprime uma linha de status na saída de erro, nunca na saída padrão:
realtimeclipboard · room 3f2a91c4…
Esse é o hash da sala, truncado — nunca a chave. Como vai para o stderr,
watch > file continua gravando só o conteúdo. Passe
-q para silenciar de vez.
Sua primeira sincronização
- Abra o aplicativo no navegador e anote a chave.
- No servidor, mande alguma coisa para ela:
echo "deploy key" | npx realtimeclipboard send D75LV - Aparece no navegador. Agora faça o caminho inverso — copie algo no
navegador e, no servidor, rode:
npx realtimeclipboard watch D75LV --once > token.txt
Os quatro comandos
| Comando | O que faz |
|---|---|
realtimeclipboard <KEY> | Mão dupla: imprime o que chega, envia o que você digita |
realtimeclipboard watch <KEY> | Imprime o conteúdo que chega |
realtimeclipboard send <KEY> | Lê a entrada padrão até o EOF e envia |
realtimeclipboard new [--long] | Imprime uma chave nova |
Opções: --relay <url>, --pin <pin>,
--once, --json, --timeout <s>,
-q, -h, -v. O retransmissor e o PIN
também são lidos de REALTIMECLIPBOARD_RELAY e
REALTIMECLIPBOARD_PIN, que é o jeito certo de passar um PIN —
como argumento ele fica no histórico do seu shell.
# saída estruturada, um objeto JSON por linha
npx realtimeclipboard watch D75LV --once --json | jq -r .text
# de uma máquina em que você entrou por ssh
ssh build-01 'cat /var/log/deploy.log' | npx realtimeclipboard send D75LV
# apontando para o seu próprio retransmissor
npx realtimeclipboard --relay wss://clip.example.com D75LV
Quando não funciona
“this needs Node 22 or newer” (precisa do Node 22 ou mais novo)
Exatamente o que está escrito: o cliente usa o WebSocket
embutido do Node em vez de puxar uma dependência, e ele só chegou na 22.
Ele sai na inicialização, não no meio da transferência.
Ele trava e nunca imprime nada
O watch espera por conteúdo, é assim mesmo — nada chega
enquanto ninguém copiar nada do outro lado. Use
--timeout 30 num script para ele não esperar para sempre, e
--once para sair depois do primeiro conteúdo.
Funciona no terminal, mas não na CI
Não há TTY, então passe -q e leia a saída padrão. Ponha a
chave numa variável de ambiente em vez da linha de comando, onde ela
apareceria nos logs de build.
Nada conecta atrás de um proxy
O cliente fala o mesmo protocolo do navegador e pode ser apontado para o
seu próprio retransmissor com --relay.
Rodar um é um contêiner.
Desinstalando
O npx não deixa nada para desinstalar. Use
npm uninstall -g realtimeclipboard se você instalou
globalmente, ou brew uninstall realtimeclipboard-cli.
A chave é uma credencial ao portador. Quem estiver com ela consegue ler a sessão enquanto ela estiver aberta, então mantenha a chave fora do histórico do shell, fora dos logs de CI e fora de arquivos versionados. O conteúdo é criptografado nesta máquina antes de sair; o retransmissor só vê um hash de sala e texto cifrado.
Todas as outras plataformas: o guia de instalação. Algo errado ou desatualizado aqui? Abra uma issue.