Общий буфер обмена для Windows/Linux систем, с активацией по требованию

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
image

Виртуальные машины плотно вошли в мое рабочее окружение, VMware, VirtualBox, Hyper-V и RDP. Наличие поддержки у них общего буфера обмена — это удобная возможность обмена данными между системами. Но есть и ряд минусов:
  • Автоматическая синхронизация буфера обмена далеко не безопасна, можно случайно “засветить” чувствительные данные в другой системе.
  • Проблема передачи данных между двумя виртуальными машинами, приходится пользоваться хостовой машиной, как мост с промежуточным этапом вставки-копирования данных.
  • В Hyper-V, работа с буфером обмена для виртуалок с Linux, «из коробки» поддерживается пока только для Ubuntu.


Решил в свободное время сделать утилиту для совместного использования буфера обмена на разных системах, которая бы осуществляла перенос данных только по требованию пользователя. Реализовал это кроссплатформенное приложение на .NET Avalonia UI, с поддержкой ОС Windows и Linux. Применение его в своей повседневной работе сделало настолько удобным работу с виртуалками, что я решил поделиться этим приложением в статье на хабре.

Визуально приложение — это небольшое окно, которое всегда поверх других окон. Окно можно расположить в любом удобном месте рабочего стола. После клика на окне приложения и нажатием клавиш Ctrl+V, или “Paste” в контекстном меню, можно отправить содержимое буфера обмена в другую систему, где запущено такое же приложение.

В принципе, больших проблем создание приложения не вызвало. Нюансы возникли при работе с буфером обмена, так как форматы данных различаются для Windows и для Linux, хотя это было в целом ожидаемым. Форматы разделил на две группы, текст\графика и файлы. Поддерживать аудио не стал, так как пока не сталкивался с этим форматом, но архитектура программы позволяет добавить поддержку при необходимости. У каждой из групп форматов есть свой список конвертеров для сериализации\десериализации данных. Честно говоря, соответствие форматов для текста и графики между Windows и Linux подбирал опытным путем, найти какие-либо готовые таблицы соответствия не смог. На текущий момент корректно переносятся данные между системами, Windows10/11, Linux Ubuntu (18-22) и Linux Mint (20-21).

Копирование-вставка файлов осуществляется через временную папку, т.е. файлы передаются и сохраняются на принимающей стороне в папке tmp/ShareClipbrd_60D54950, затем уже эти файлы копируется в локальный буфер обмена, и вставка файлов происходит из этой папки. Содержимое временной папки не очищается автоматически, только замещается новыми файлами\папками при последующих операциях копирования-вставки.

Сами данные передаются по TCP/IP соединению. В настройках, контекстное меню с настройками вызывается правым кликом, в поле “Host address” необходимо указать сетевой адрес хоста, с указанием номера порта, например “WIN-U2EPЕ64NN1:61002”. В поле “Partner address” указывается, соответственно сетевой адрес партнерской системы, также с указанием номера порта, например “linux-sandbox-01:61002”.

Для систем, в которых не используются доменные имена и IP-адреса выделяются динамически, был добавлен сервис mDNS. С помощью этого сервиса обе части приложения автоматически определяют свои адреса в локальной сети. Этот сервис включается при указании специальной строки в поле адресов. Строка должна начинаться с префикса «mdns:», затем идет цифро-буквенный идентификатор, например “mdns:win10_linux”. Если необходимо для Firewall использовать конкретный номер порта, то его можно указать после идентификатора через двоеточие, например “mdns:win10_linux:61002”. Для поля “Partner address” соответственно указывается префикс «mdns:» и идентификатор партнера, номер порта вводить не нужно.

Пример сетевых настроек.
image


Чтобы быстро переключаться между системами, имеются 3 профиля сетевых настроек, переход на другой профиль инициирует соединение в соответствии с настройками этого профиля. Для удобства проверки статуса соединения, на окне приложения есть пара круглых индикаторов, один показывает соединение к партнеру, а второй наоборот от партнера.
Код проекта открытый и расположен на github.com/viordash/ShareClipbrd. Готовые exe-шники для Windows и Linux есть в github.com/viordash/ShareClipbrd/releases.
Источник: https://habr.com/ru/articles/767482/


Интересные статьи

Интересные статьи

При разработке децентрализованных систем всегда остро стоит проблема аутентификации субъектов при обмене публичными ключами как между непосредственными собеседниками, так и между узлами в самой сети. ...
Привет, Хабр! Меня зовут Олег, я работаю с машинным обучением в VK Видео, внедряю нейросети в Клипы ВКонтакте для создания эффектов дополненной реальности. В статье расскажу, как запустить T...
В SQL Server используется стоимостной оптимизатор запросов (cost-based optimizer), который ищет оптимальный план в течение времени, выделенного для компиляции запроса. При оптимизации плана учитываетс...
Вячеслав Ермолин, 18 августа 2020 г. Миссия: Основная: Запуск 58 коммуникационных спутников Starlink-10. Десятый запуск Starlink v1.0. Для будущей системы низкоорбитального ...
Всем привет! Начал перевод небольшой книги: "Understanding Message Brokers", автор: Jakub Korab, издательство: O'Reilly Media, Inc., дата издания: June 2017, ISBN: 9781492049296. Из введен...