Клиент командной строки

Для машин, где буфера обмена нет вовсе. Он читает стандартный ввод и пишет в стандартный вывод, поэтому собирается со всем остальным, чем вы уже пользуетесь, — и это не вторая реализация: он импортирует ровно те же файлы шифрования и транспорта, которые выполняет браузер.

Установите

npx realtimeclipboard D75LV

Ставить, собственно, нечего: npx скачивает, запускает и не оставляет после себя ничего. Если хочется держать его в PATH:

npm install -g realtimeclipboard

Нужен Node 22 или новее — из-за встроенного WebSocket. На более старом Node клиент выходит сразу и говорит почему, а не отваливается на середине передачи.

Или через пакетный менеджер

brew install akshaynikhare/tap/realtimeclipboard-cli

Обратите внимание на имя: formula для CLI называется realtimeclipboard-cli, а десктопное приложение — это cask realtimeclipboard. Это разные вещи, и установка одного не даёт другого: серверу нужен конвейер, а не значок в строке меню.

Проверьте, что всё встало

npx realtimeclipboard --version

При подключении он печатает одну строку статуса в стандартный поток ошибок и никогда — в стандартный вывод:

realtimeclipboard · room 3f2a91c4…

Это усечённый хеш комнаты, а не ключ. Поскольку строка идёт в stderr, watch > file по-прежнему пишет только содержимое буфера. Передайте -q, чтобы убрать её совсем.

Первая синхронизация

  1. Откройте приложение в браузере и запишите ключ.
  2. На сервере отправьте туда что-нибудь:
    echo "deploy key" | npx realtimeclipboard send D75LV
  3. Оно появится в браузере. Теперь в обратную сторону — скопируйте что-нибудь в браузере и выполните на сервере:
    npx realtimeclipboard watch D75LV --once > token.txt

Четыре команды

КомандаЧто делает
realtimeclipboard <KEY>В обе стороны: печатает пришедшее, отправляет набранное
realtimeclipboard watch <KEY>Печатает приходящее содержимое
realtimeclipboard send <KEY>Читает стандартный ввод до EOF и отправляет
realtimeclipboard new [--long]Печатает новый ключ

Параметры: --relay <url>, --pin <pin>, --once, --json, --timeout <s>, -q, -h, -v. Ретранслятор и PIN читаются также из REALTIMECLIPBOARD_RELAY и REALTIMECLIPBOARD_PIN — именно так PIN и стоит передавать: аргументом он осядет в истории вашего шелла.

# структурированный вывод, по одному объекту JSON на строку
npx realtimeclipboard watch D75LV --once --json | jq -r .text

# с машины, куда вы зашли по ssh
ssh build-01 'cat /var/log/deploy.log' | npx realtimeclipboard send D75LV

# на собственный ретранслятор
npx realtimeclipboard --relay wss://clip.example.com D75LV

Когда не работает

«this needs Node 22 or newer» (нужен Node 22 или новее)

Ровно то, что написано: клиент использует встроенный в Node WebSocket, а не тянет зависимость, и появился этот встроенный только в 22-й версии. Клиент выходит на старте, а не посреди передачи.

Он висит и ничего не печатает

watch так и задуман — он ждёт; пока на той стороне ничего не скопировали, ничего и не придёт. В скрипте добавьте --timeout 30, чтобы он не ждал вечно, и --once, чтобы он вышел после первого же содержимого.

Вручную работает, а в CI нет

Там нет TTY, поэтому передайте -q и читайте стандартный вывод. Ключ кладите в переменную окружения, а не в командную строку — оттуда он попадёт в логи сборки.

Из-за прокси ничего не подключается

Клиент говорит на том же протоколе, что и браузер, и его можно направить на собственный ретранслятор через --relay. Запустить его — это один контейнер.

Удаление

После npx удалять нечего. Если вы ставили его глобально — npm uninstall -g realtimeclipboard, либо brew uninstall realtimeclipboard-cli.

Ключ сам по себе даёт доступ. Пока сессия открыта, прочитать её сможет любой, у кого он есть, — поэтому не пускайте ключ в историю шелла, в логи CI и в закоммиченные файлы. Содержимое шифруется на этой машине до отправки; ретранслятор всегда видит только хеш комнаты и шифротекст.

Все остальные платформы: руководство по установке. Что-то здесь неверно или устарело? Заведите issue.