Синхронизация буферов обмена VNC (linux) - Nix - eMule-Rus.Net Форум муловодов

Перейти к содержимому



- - - - -

Синхронизация буферов обмена VNC (linux)


  • Вы не можете ответить в тему
  • Вы не можете создать новую тему
В этой теме нет ответов

#1 OFFLINE   Al71

 

    Мастер

  • [eMule-Rus]
  • сообщений: 3 275
    Последний визит:
    22 ноя 2022 07:59
  • Пол:Мужчина
  • Откуда:Москва
 

Отправлено 06 Август 2019 - 00:27

При удаленном управлении рабочим столом при помощи VNC (в качестве клиента я использую remmina) нередко сталкивался с проблемами копирования текста между сервером и клиентом. В сети многие жалуются на подобные глюки, но никакого рабочего решения данной проблемы я не нашел. Позднее заметил, что копирования не происходит, если в тексте присутствуют русские буквы (то есть любые нелатинские в более широком смысле), и, как оказалось, это связано с ограничениями VNC, который не способен передавать национальные кодировки при синхронизации буферов обмена. Поскольку копировать иногда требуется, а ничего путного я так и не нашел, решил смастерить себе костыль и поделится опытом с широкой общественностью, может, кому пригодится.

Идея довольно проста: пара двухстрочных скриптов (можно обойтись однострочными) -- один на сервере, другой на клиенте, которые привязываются к своим комбинациям клавиш, при последовательном нажатии на которые и происходит эта самая синхронизация. Для этого нам потребуется nc, xclip и notify-send (возможно, что-то придется установить).

Скрипт на сервере выглядит так:

#!/bin/sh
notify-send Синхронизирую
xclip -o -selection clipboard | nc 172.16.150.6 5800 && notify-send Передано

Вместо 172.16.150.6 надо вписать свой адрес клиента в локальной сети, если клиент и сервер находятся в одной локалке, или адрес tun клиента, если используется подключение VPN. 5800 -- порт для передачи, можно задать любой. Для запуска скрипта на сервере я использовал комбинацию Alt+V. notify-send служит лишь для индикации того, что процесс запущен и успешно завершен.

Скрипт на клиенте:

#!/bin/sh
notify-send Слушаю
nc -l -p 5800 | xclip -sel clip

Здесь порт 5800 -- тот же, что и на сервере. Если используется файерволл, необходимо открыть порт для входящих соединений. Комбинация клавиш для запуска скрипта -- Alt+C.

Процесс синхронизации сводится к следующему. Выделяем нужный текст на сервере, нажимаем, как обычно, Ctrl+C или ПКМ--Копировать, и, если в тексте нет кириллицы, то синхронизация происходит автоматически, и можно сразу вставлять текст на клиентской машине (Ctrl+V/ПКМ--Вставить). Но, если в тексте есть русские буквы, то вставка не сработает. В этом случае нажимаю Alt+C, а затем Alt+V в активном окне VNC (без захвата клавиатуры), и текст передается из буфера обмена сервера в буфер клиента. Далее вставляю, как обычно (Ctrl+V). Наверно, можно обойтись без скриптов и привязать клавиши к однострочным командам, или вообще использовать одну комбинацию клавиш для клиента и сервера, но у меня с ходу не получилось, а копать глубже я не стал. Есть еще один нюанс: после принудительной синхронизации содержимое буфера обмена на сервере изменяется (символы кириллицы заменяются знаками вопроса), и, если вдруг понадобится заново передать тот же фрагмент, его надо скопировать еще раз (Ctrl+C).





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных