Удивительное рядом. Как устроен буфер обмена в Windows и Linux
Буфер обмена — один из основных элементов GUI, но он сложен в реализации. Подводных камней настолько много, что вы больше никогда не сможете произнести слово «копипаст» с презрительным выражением. Есть тысячи приложений и форматов данных. Невозможно обеспечить полную конвертацию всего во всё.
В некоторых случаях данные вообще нигде не сохраняются по нажатию Ctrl+C. И по нажатию Ctrl+V будет возвращён NULL . Shit happens, как говорится…
В одних программах возможен копипаст только текста, в других можно выделить графику, где-то поддерживается копирование/вставка файлов и т. д. Нюансов очень много. Попробуем выделить основные моменты для Windows и Linux.
Если идти от простого к сложному и в примерно хронологическом порядке, то лучше начать с X11.
▍ X11
Графический стек Linux состоит из множества разных элементов, которые объединены в монолитную архитектуру и каким-то чудом работают вместе без постоянных глюков.
Так или иначе, клипборд в X11 работает не так, как в других ОС. Здесь создаётся впечатление двух независимых буферов обмена. Один по горячим клавишам типа Ctrl+C/V (или Ctrl/Shift+Ins), а второй — по нажатию мыши. Если скопировать данные в буфер горячей клавишей с клавиатуры, то и вставить можно только с клавиатуры. А если скопировал мышью — то вставить средним колёсиком. Но иногда работают оба способа, то есть можно скопировать текст в буфер обмена мышью, а вставить — сочетанием клавиш.
Документация подтверждает, что в X11 действительно несколько независимых буферов обмена (здесь они называются selections). Их даже не два, а может быть сколько угодно много. По схеме эти selections представляют способ коммуникации между клиентами. Сами клиенты должны договориться между собой, какой буфер они будут использовать. Например, если вы пишете какой-то клиент под Linux, то как владелец буфера (SelectionOwner) можете ввести свой буфер обмена и надеяться, что остальные его поймут.
То есть работа с буфером обмена в общем виде выглядит так:
- Клиент 1 заявляет X-серверу о владении определённым буфером как SelectionOwner (буфер 1).
- В какой-то момент времени клиент 2 может попросить у сервера содержимое буфера 1 в определённом формате.
- X Server получает запрос и перенаправляет его соответствующему владельцу.
- Владелец буфера (клиент) напрямую отправляет запрошенные данные в указанном формате клиенту 2, когда (и если) сможет это сделать.
- Клиент 2 возвращает клиенту 1 подтверждение получения.
Как же получается, что для пользователя вся эта система выглядит словно два изолированных буфера, один для горячих клавиш, а второй для мыши? Ну, здесь дело в идентификации буферов. Внутренне это произвольные номера, а внешне (для клиентов) три варианта:
- PRIMARY : буфер «средней кнопки мыши» (условно говоря);
- SECONDARY : практически не используется в наше время;
- CLIPBOARD : буфер Ctrl+C (условно говоря).
В реальности содержимое буфера передаётся через окна, а именно через запись в свойства окна (туда помещается ограниченный объём данных). В этом смысле работа буферов аналогична работе окон — в X11 нет требований, чтобы эти окна работали на одном хосте или по одному протоколу. Например, теоретически копипаст должен работать в разных программах, даже если клиенты находятся на разных компьютерах и подключены к одному X-серверу через интернет.
Вот так всё работает в X11: это просто брокер между клиентами, который принимает минимальное участие в передаче данных из буфера обмена. В X11 даже нет встроенного менеджера для таких данных.
▍ Wayland
Как известно, на замену X11 разработан протокол Wayland, где всё организовано несколько иначе.
Работа буфера обмена в спецификациях Wayland описана с применением той же специфической терминологии (selection — буфер обмена, clipboard — один из буферов обмена, уникальный идентификатор atom и т. д.).
Но если разобраться, всё организовано довольно просто и логично, как в X11, даже с некоторыми усовершенствованиями.
Здесь примерно так же организовано владение буфером определённого типа. Когда вы нажимаете Ctrl+C, программа просто захватывает буфер обмена определённого типа и заявляет о наличии данных в определённом формате (например, image/png , text/x-moz-url1 или text/plain ). На этом этапе никакие данные никуда не передаются и нигде не сохраняются. Так что в отсутствие специального менеджера для буфера обмена данные будут потеряны при закрытии окна или при их удалении в окне.
Захват буфера разрешён только основному окну. Когда новое окно захватывает буфер, оно получает сообщение от предыдущего владельца буфера о наличии данных и их формате. Затем наступает этап вставки данных «из буфера» (в кавычках, потому что мы уже поняли, что буфер — абстрактное понятие), то есть помеченных для копирования данных. Так вот, второй клиент делает запрос (создаёт дескриптор файла) с указанием формата, в котором хочет получить данные. Этот формат может не полностью совпадать с указанными выше, и тогда он получит лишь часть данных или вовсе ничего.
Несмотря на долгую эволюцию, API для буфера обмена в Wayland далеко не совершенен и этой подсистеме по-прежнему нужен внешний менеджер (библиотека) для нормальной работы.
▍ Как это работает в Windows
В Windows применяется та же концепция «владельца буфера». Владельцем становится любое приложение, которое отправило информацию в буфер стандартным способом. Поддерживаются следующие системные вызовы:
- Вызов OpenClipboard(hwnd) отправляет информацию об окне, которое должно стать новым владельцем буфера.
- Вызов EmptyClipboard() стирает из буфера предыдущее содержимое.
- Вызов SetClipboardData() для каждого фрагмента данных, которые вы хотите поместить в буфер (по историческим причинам этот вызов могут использовать даже программы, не владеющие буфером).
- Вызов CloseClipboard() сообщает об окончании работы с данными.
- Поздравляем, вы новый владелец буфера.
Предполагаемая схема использования для чтения данных из буфера обмена следующая:
- Вызов OpenClipboard(hwnd) отправляет информацию об окне, которое читает из буфера.
- Вызов GetClipboardData() для получения данных из буфера.
- Вызов CloseClipboard() для индикации окончания чтения данных.
Примерно так же работает буфер в macOS (собственно, изобретателями самой концепции буфера обмена считаются создатели компьютера Mac/Lisa, под Mac есть отличные менеджеры с поиском по многомесячной истории типа ClipBuddy, Alfred и Raycast).
Кроме того, в Windows есть Linux-подобный способ работы с буфером, когда данные нигде не сохраняются, а просто помечаются как доступные (для экономии памяти). Это упомянутый выше отложенный рендеринг WM_RENDERFORMAT . Поэтому если скопировать в буфер большой диапазон ячеек Excel, а потом попробовать их вставить в другой программе в текстовом формате, то операция может завершиться неудачно. В Windows действует ограничение 30 секунд на отложенный рендеринг (на июнь 2022 года). Если в течение этого времени данные не удалось переконвертировать в новый формат для вставки, то буфер вернёт NULL .
▍ Вывод
Таким образом, буфер обмена — это высокоуровневая абстракция, которая описывает человеку механизм передачи данных между программами (клиентами, окнами) на понятном для него языке. При этом в Linux вообще никакого буфера нет, ничего туда не копируется, данные только помечаются для передачи. Это очень грамотный подход — расход памяти сводится к нулю.
Недостаток тоже понятен — при закрытии исходного окна информация «из буфера» тоже будет потеряна и уже никуда не вставится (хотя эту проблему решают специальные менеджеры буфера).
В других операционных системах решили пожертвовать производительностью (памятью) ради удобства пользователей, поскольку копипаст — одна из самых востребованных функций у обычных людей, и потеря данных недопустима.
Что такое буфер обмена в компьютере или телефоне и где его найти?
Доброго всем времени на fast-wolker.ru! Многие начинающие пользователи сталкиваются с различными еще неизвестными компьютерными понятиями, что вполне нормально, и пытаются в них разобраться. По сути это и есть компьютерная грамотность.
Многие элементы этих знаний важны, даже несмотря на свою простоту. Одним из таких моментов является понятие “буфера обмена”. Что это такое, мы сейчас и рассмотрим.
Что такое буфер обмена и где он находится в компьютере?
Понятие “буфер обмена”, в принципе, говорит само за себя. Это такое место в компьютере, куда временно помещаются и хранятся короткое время некоторое время некие данные. Во время работы как с текстовыми файлами, так и с изображениями, (не говоря о сети интернет, мы так или иначе копируем и сохраняем для себя какую-то информацию.
В старые добрые времена, когда не было ни компьютеров, ни принтеров, на которых можно распечатать, то что было сохранено, копировалось и сохранялось все в ручную. Т.е., брали ручку, листок бумаги и переписывали из книг все, что было необходимо, делали вырезки из газет и журналов и наклеивали их в тетради.
Сейчас это уже не столь необходимо, хотя может быть, есть некоторые, кто до сих пор сохраняет для себя таким образом всю нужную информацию.
Итак, найдя в тексте нужную информацию или обнаружив нужную картинку, мы нажимаем правой клавишей мыши и в открывшемся меню выбираем надпись “копировать”.
В результате эта информация или файл попадают в специальную область компьютера, где будут храниться до тех пор, пока мы не вставим ее в необходимое нам место. Надо заметить, что после выключения компьютера эта информация из буфера обмена автоматически стирается и при повторном включении ее в буфере обмена уже не будет.
Поэтому, при выключении своего компьютера убедитесь, что все нужное у вас сохранено.
Область компьютера, в которой храниться временные данные называется “оперативной памятью”(ОЗУ, RAM). У каждой ячейки есть адрес, в который временно помещается информация из буфера обмена, а так же другая служебная информация. Под буфер обмена отводится некий диапазон ячеек ОЗУ.
И еще одно, информация в буфере обмена не накапливается, а заменяется предыдущая на последующую. Например, если вы скопировали сначала один текст, а потом другой, то последний скопированный текст заменит предыдущий и при вставке скопирует именно его.
Но при вставке информации, файла, картинки и прочее, они из буфера обмена не удаляются. Таким образом, вы можете вставлять неограниченное количество раз.
Есть и технические нюансы. Не всякую скопированную информацию можно вставить туда, куда хочется. Например, открыв папку в нее вы вставите только файл, а вот текст вы сможете вставить только в редактор или ворд, или какой-либо другой. Так же как и скопированный текст из интернета. Его можно вставить только в текстовой редактор и никуда более.
При работе с копированием и вставкой можно пользоваться не только клавишами мыши, но и самой клавиатурой. Для этого вам понадобятся следующие комбинации клавиш:
Где же хранится эта скопированная информация? В операционной системе старого образца Windows XP есть специальная программа под названием «Clipbrd.exe». Открыв ее можно узнать, что храниться в буфере обмена этой системы.
Найти программу можно по следующему пути: «C:/Documents and Settings/System 32». Что же касается более поздних версий, таких ка 7 и пр., то такой программы там уже нет, а имеется просто исполняющий файл. Расположен он в папке «C:/ windows/System 32», а там находим файл под именем clip.exe. Если навести на него курсором мыши то можно прочитать его свойства.
Поскольку стандартный буфер обмена сохраняет только одну информацию, заменяя ею предыдущую, а иногда возникает необходимость в сохранении и повторной вставке одной и той же информации, то были разработаны программы для таких целей. Одна из них (Для Windows 7) – утилита Comfort Clipboard.
Эта программа удобна тем, что в ней сохраняется вся скопированная информация, включая текст, папки, файлы и пр. Они уже не заменяют друг друга, а содержатся в ней все. В результате вы сможете выбирать и вставлять что вам нужно и куда нужно.
Что такое буфер обмена в телефоне и где он находится?
В телефоне так же имеется буфер обмена, который играет аналогичную роль, что и в компьютере. Все скопированные файлы хранятся в этом месте до тех пор, пока их не переместили.
Буфер обмена находится в оперативной памяти смартфона. Что бы скопировать и переместить любой файл, достаточно нажать на него и несколько секунд удерживать. Появится надпись «Копировать» или «Переместить».
Выбираем нужное, затем вам предложат выбрать место для копирования или перемещения. Выбираете – в основной памяти телефона или же переносите на карту памяти. В результате произойдет процесс копирования.
Проверять буфер обмена и очищать его так же, как и память и ненужные файлы – необходимо. Поскольку телефон, в отличие от компьютера гораздо менее производителен. Что бы добраться до буфера обмена в телефоне надо воспользоваться специальными программами.
Одна из них – Clipper. Это довольно простая в использовании утилита.
После установки программы и копировании каких-либо данный, открыв программу во вкладке буфер обмена их можно будет обнаружить.
Эти данные можно как вставлять куда необходимо, так и удалять в любой момент. Вот такие особенности буфера обмена как на компьютере, так и на телефоне. Успехов!
Буфер обмена: где находится и как его очистить
Буфер обмена — незаменимая составляющая компьютерной техники. Без него невозможно копировать текст или файлы, чтобы перебросить в другое место. Чтобы им воспользоваться, необходимо знать специальные команды. Рассмотрим, где находится это временное хранилище и как его очистить.
Что такое буфер обмена, его функции
Без буфера обмена невозможно представить современные компьютерные технологии. Все привыкли к тому, что текст легко и просто скопировать и вставить в другом месте. Это в разы упрощает и ускоряет использование компьютера или телефона. Это касается не только текста, но и файлов.
Что такое буфер обмена? Буфер обмена представляет собой определенное место в памяти компьютера, телефона или планшета, где временно хранится информация, которую нужно переместить или сделать копию. Все, что сохранено в буфере обмена, можно вставить в новое место. Информация остается в этом хранилище до тех пор, пока не понадобится выполнить другую такую операцию или до тех пор, пока техника остается включенной.
Например, пользователь может скопировать информацию из текстового файла и вставить ее в сообщение электронной почты. Если пользователь вставляет данные из буфера обмена несколько раз, одна и та же информация вставляется повторно. Если пользователь копирует что-то еще, эта новая информация заменяет старые данные в буфере обмена.
Буфер обмена еще называют промежуточным хранилищем данных, которое предоставляет программное обеспечение и предназначено для переноса или копирования информации в приложениях или частях одного приложения через функции вырезать, копировать, вставить. Программы используют буфер обмена операционной системы через определенный интерфейс. Некоторые приложения имеют собственный буфер обмена. Физически все скопированные данные хранятся в оперативной памяти.
Стандартные горячие клавиши для работы с буфером обмена для Windows:
- Ctrl+C или Ctrl+Ins — копировать выделенные файлы или текст;
- Ctrl+X или Shift+Del — вырезать объекты или текст для перемещения в другое место;
- Ctrl+V или Shift+Ins — вставить из буфера обмена.
На системе Mac такие горячие клавиши:
- Command+C — скопировать данные;
- Command+X — вырезать данные;
- Command+V — вставить из буфера обмена.
Где находится буфер обмена на ноутбуке? Разницы между обыкновенным ПК и ноутбуком нет. Буфер обмена предоставляет операционная система, все хранится в оперативной памяти. Как посмотреть буфер обмена? Для этого на Windows 10 и Windows 11 предусмотрено сочетание клавиш Win+V, которое открывает журнал буфера обмена. Если он не активирован, система предложит это сделать после нажатия. Если этого не произойдет, включите журнал вручную:
- Через меню «Пуск» откройте параметры системы.
- Войдите в системный раздел и откройте категорию «Буфер обмена».
- Активируйте журнал буфера обмена.
В этом же меню можно настроить синхронизацию между другими устройствами с помощью буфера обмена. Для этого предусмотрен параметр «Синхронизация между устройствами». Активировав эту функцию система автоматически синхронизирует копируемый текст и файлы для переноса на другой ПК. Учтите, что функция синхронизации привязана к учетной записи Microsoft или рабочей учетной записи, поэтому перенос информации возможен только в среде этой учетной записи.
Как открыть буфер обмена на Android? Чтобы посмотреть содержимое буфера обмена, вызовите клавиатуру. В верхней части нажмите на иконку списка. Это и есть буфер обмена. Если открываете его первый раз, будет предложено активировать буфер обмена. Сделайте это, переместив ползунок в активное положение.
Когда сохраняете текст на Android, служба буфера обмена сохраняет информацию в оперативной памяти. На стандартных телефонах Android не можете получить доступ к этим данным напрямую. На телефонах Samsung история буфера обмена хранится в файле в каталоге /data/Clipboard.
Даже на Samsung этот файл недоступен без рутирования смартфона, но на любом телефоне Android с помощью приложения для управления буфером обмена можете получить доступ к его истории.
Очистка буфера обмена на компьютере и на телефоне
Находящаяся в буфере обмена информация никоим образом на работоспособность устройств не влияет. Но по разным причинам бывает необходимо очистить историю буфера обмена. Как правило, очистить его необходимо, если пользователь скопировал логин или пароль, а после него гаджетом воспользуется посторонний человек и узнает персональные данные. Рассмотрим способы чистки этого временного хранилища на ПК и Android подробнее.
Как очистить буфер обмена?
На системе Windows все просто. Для этого выполните такие действия:
- Войдите в параметры системы через меню «Пуск».
- Откройте раздел «Система».
- Откройте категорию «Буфер обмена».
- Нажмите на кнопку внизу «Очистить».
На системе Mac выполните следующее:
- Войдите в приложение Finder.
- Запустите Terminal. Найдете его в папке «Утилиты»→«Приложения».
- Впишите pbcopy
После этого буфер обмена будет чист.
В программах Office есть свой буфер обмена. Чтобы его открыть, предусмотрена специальная кнопка для его вызова во вкладке «Главная». Для очистки буфера через программы Office выполните такие действия:
- Откройте буфер обмена.
- Появится соответствующее окно в левой части экрана. Нажмите «Очистить все».
Если хотите удалить только отдельный файл или текст, щелкните по стрелочке справа от отдельного фрагмента и удалите.
Очистка буфера обмена на телефоне
На портале WikiHow предложены такие приложения для просмотра буфера обмена, как Gboard и Clipper. Эти приложения позволяют просматривать его содержимое. Установите их на телефон, разрешите им работать поверх других приложений. Райан Дубе рассказал, что с их помощью можно очистить буфер обмена. Если используете диспетчер буфера обмена Clipper, заметите параметр «Удалить», когда выберете три точки справа от выделения. Используйте его, чтобы очистить элементы буфера обмена.
Другое решение — включить и использовать клавиатуру Gboard, которая идет вместе с новыми телефонами Android. Если этого приложения нет, установите его через Google Play, а затем выполните такие действия:
- Откройте приложение для обмена сообщениями на Android и нажмите на символ + слева от текстового поля.
- Выберите значок клавиатуры. Когда она появится, выберите символ > вверху. Здесь можете нажать на значок буфера обмена, чтобы открыть его.
- Если никогда раньше не использовали буфер обмена на телефоне, увидите уведомление о включении буфера обмена Gboard. Для этого нажмите «Включить буфер обмена».
- При включенном буфере обмена каждый раз, когда копируете что-либо, а затем снова нажимаете на буфер обмена на клавиатуре Google Android, увидите историю всех последних добавленных элементов.
- Чтобы удалить любой из этих элементов, сначала коснитесь значка редактирования.
- Выберите каждый элемент, который хотите удалить, и коснитесь значка корзины.
Менеджер буфера обмена, который поставляют со встроенным приложением для клавиатуры, во многом зависит от версии и марки телефона Android. Клавиатура обычно становится основным способом доступа к буферу обмена и управления им без приложения.
Буфер обмена в iOS довольно ограничен. Он может хранить только одну часть информации за раз и не доступен пользователю напрямую. Адам С. Доуд отметил, замена текста в буфере обмена пустым текстом — хороший способ эффективно стереть сохраненную там информацию. Все, что нужно сделать, это скопировать пробел, и все будет готово. Вот как это сделать:
- Откройте любое приложение, в котором есть поле ввода текста, например «Заметки».
- Введите два пробела в поле поиска.
- Нажмите и удерживайте пробелы и выберите «Копировать».
Вот и все. Любые данные, которые были в буфере обмена, будут заменены двумя пробелами. Чтобы убедиться, что буфер обмена практически пуст (содержит два пробела), все, что нужно сделать, это вставить его в приложение:
- Откройте любое приложение с текстовым полем.
- Нажмите и удерживайте поле поиска вверху.
- Коснитесь «Вставить».
Очистка буфера обмена — мера предосторожности, которая позволяет соблюсти конфиденциальность и уберечь личную информацию от посторонних глаз. Не все, что копируете и вставляете, обязательно представляет угрозу безопасности.
Копирование паролей, банковской информации, номеров телефонов, адресов может привести к их воровству. Чтобы какие-либо из этих сведений не были украдены, очистите буфер обмена, выполнив описанные выше шаги.
При подготовке материала использовались источники:
https://habr.com/ru/companies/ruvds/articles/723812/
Что такое буфер обмена в компьютере или телефоне и где его найти?
https://www.nur.kz/technologies/instructions/1718924-cto-takoe-bufer-obmena-i-kak-im-polzovatsa/