Открыть сервисСервис

Самбуфер — буфер обмена в Linux

Самбуфер (smbuf) — утилита для Linux, предназначенная для синхронизации содержимого системного буфера обмена (клипборда) между несколькими X-серверами, работающими на одном компьютере. Инструмент решает проблему, возникающую при одновременной работе с несколькими дисплеями или сеансами X11: стандартный буфер обмена привязан к конкретному X-серверу, и данные, скопированные в одном сеансе, недоступны в другом. Самбуфер переносит данные между этими раздельными буферами, делая их единым логическим пространством.

Проблема изолированных буферов обмена

В графической подсистеме X Window System буфер обмена реализован на уровне протокола X11 и принадлежит конкретному X-серверу. Если на машине запущено несколько независимых X-серверов — например, один для локального монитора, другой для удалённого подключения по VNC или XDMCP, третий в рамках виртуального окружения — каждый из них ведёт собственный буфер обмена. Команда копирования в одном сеансе не видна в другом, что создаёт неудобства при перетаскивании данных между окружениями.

До появления специализированных решений пользователи вынуждены были либо переносить данные через файлы, либо использовать промежуточные приложения (например, почтовый клиент или редактор) в качестве «моста». Самбуфер автоматизирует этот процесс: утилита отслеживает изменения в буфере обмена одного X-сервера и воспроизводит их в буферах остальных.

Принцип работы

Самбуфер работает как демон (фоновая служба), который подключается к нескольким X-серверам одновременно. Для этого утилита использует механизм переключения переменной окружения DISPLAY: последовательно подключаясь к каждому дисплею, она подписывается на события изменения буфера обмена (события SelectionNotify и SelectionRequest). При обнаружении изменения в одном из буферов данные копируются и воспроизводятся в остальных.

При этом важно учитывать, что в X11 буфер обмена устроен иначе, чем в большинстве других систем: данные физически не хранятся в буфере, а предоставляются владельцем выделения (selection owner) по запросу. То есть приложение-владелец обязано оставаться запущенным, чтобы данные можно было скопировать. Самбуфер учитывает эту особенность: при переносе данных между серверами он временно становится владельцем выделения, чтобы корректно передать содержимое.

Установка и запуск

В большинства дистрибутивов Linux самбуфер доступен в стандартных репозиториях под пакетом smbuf. Утилита написана на Perl и использует модуль X11::Clipboard, поэтому для работы требует установленных Perl и соответствующего модуля.

Типичный запуск выглядит так:

`` smbuf -display :0 -display :1 ``

где параметры -display указывают адреса X-серверов, буферы которых требуется синхронизировать. После запуска демон работает в фоне и мониторит указанные дисплеи.

Ограничения

Самбуфер ориентирован прежде всего на текстовые данные. Синхронизация сложных форматов (изображения, произвольные типы данных) между разными X-серверами не всегда реализуема из-за различий в поддерживаемых форматах и приложений-владельцах. Кроме того, поскольку утилита должна оставаться владельцем выделения для передачи данных, одновременная работа нескольких экземпляров самбуфера или конфликт с другими менеджерами буфера обмена (например,.clipmenud, parcellite, clipit) может приводить к непредсказуемому поведению.

Альтернативы

В современных дистрибутивах Linux синхронизацию буфера обмена между несколькими X-серверами часто решают иначе:

  • xclipsel / clipmenu — утилиты, работающие в рамках одного X-сервера;
  • Wayland-утилиты (wl-clipboard) — в Wayland буфер обмена устроен иначе и не привязан к «серверу» в привычном смысле;
  • синхронизация через облако — специализированные сервисы переносят буфер обмена между разными физическими машинами, что косвенно решает и задачу нескольких X-серверов на одной машине.

Тем не менее для сценариев с несколькими локальными X-сеансами самбуфер остаётся одним из немногих специализированных инструментов.

Интересные факты

  • Название «smbuf» является сокращением от «sync multiple buffers» — «синхронизация множественных буферов».
  • Утилита написана на Perl, что нетипично для подобных низкоуровневых инструментов работы с X11, но упрощает её модификацию и портирование.
  • Самбуфер активно использовался в эпоху массового развёртывания XDMCP-терминалов в начале 2000-х годов, когда один сервер обслуживал десятки тонких клиентов, и задача общего буфера обмена была особенно актуальна.

Источники:

  • Руководство man по утилите smbuf
  • Документация проекта X Window System (X11 Selections)
  • Модуль Perl X11::Clipboard (CPAN)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru