Самбуфер — буфер обмена в 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)
