5

Для справки я запускаю сервер Synergy 1.4.2 в Windows 7 x64 с одним клиентом CentOS 5.5 Linux. Большинство функций мыши и клавиатуры работают точно так же, как и ожидалось. Следующее является исключением.

Скопировать и вставить с сервера -> клиент не удается при определенных условиях. Кажется, что все текстовые копии, сделанные на клиенте Linux, работают (я могу вставить текст в Windows). Обратное не совсем верно. При запуске Synergy от имени пользователя с правами администратора копии текста на сервере Windows 7 x64 работают из всех программ (я могу успешно вставить скопированный текст на любой компьютер). При запуске Synergy как службы (запущенной из services.msc) текстовые копии на сервере Windows 7 x64 работают из всех программ, кроме Firefox. В частности, в сервисном режиме, когда я выделяю текст в Firefox и выполняю любое из следующих действий: (а) Правка -> Копировать, (б) щелкните правой кнопкой мыши -> Копировать или (с) Control-C, я МОГУ вставить текст в любой другой программа на сервере Windows 7, но не может вставить этот текст на клиент Linux. Это происходит только с Firefox.

В качестве обходного пути (все еще в сервисном режиме) я часто открываю текстовый документ в Блокноте. Я копирую текст из Firefox и успешно вставляю его в Блокнот. Затем я могу скопировать текст из Блокнота и успешно вставить его в клиент Linux. Опять же, другие программы, кроме Firefox, не демонстрируют такое поведение (то есть я могу без проблем копировать / вставлять из Google Chrome). И снова, эта проблема возникает, только когда сервер Windows 7 x64 Synergy запущен в сервисном режиме.

Кто-нибудь еще испытывал такое же явление? Любые комментарии и предложения приветствуются.

3 ответа3

3

Кажется, у меня та же проблема, и я нашел ее достаточно раздражающей, чтобы тратить время на ее устранение и исправление (для меня).

Симптом заключается в том, что, по-видимому, все записи в текстовом формате, не являющиеся открытым текстом, игнорируются. Это можно легко проверить, открыв MS Word и представление буфера обмена, поскольку записи там имеют маленькие значки, обозначающие формат записи.

Согласно коду, это не должно быть проблемой, поскольку каждая запись имеет несколько форматов и всегда простой текст в кодировке UTF-16, чего и ожидает Synergy.

К сожалению, Synergy пытается перечислить все доступные форматы ввода через EnumClipboardFormats, что также не должно быть проблемой, но так или иначе это так. Я написал простую тестовую программу, и с этим подходом проблем не было. В Synergy EnumClipboardFormats возвращает только первый формат CF_UNICODETEXT для простого текста и что-то совершенно другое для всего остального. Вместо того, чтобы возвращать другие форматы, как моя тестовая программа, в Synergy следующий вызов EnumClipboardFormats возвращает ошибку 183 (ERROR_ALREADY_EXISTS), которая не имеет смысла и не документирована.

Замена CMSWindosClipboard::get приведенным ниже методом действительно устранила проблему для меня.

CString
CMSWindowsClipboard::get(EFormat format) const
{
IMSWindowsClipboardConverter* converter = NULL;
for (ConverterList::const_iterator index = m_converters.begin();
                        index != m_converters.end(); ++index) {
    converter = *index;
    if (converter->getFormat() == format) {
        HANDLE win32Data = GetClipboardData(converter->getWin32Format());
        if (win32Data != NULL) 
            return converter->toIClipboard(win32Data);
    }
}

return CString();
}
1

Это работает для меня: http://tots.1o24.org/how-to-fix-copy-paste-clipboard-issue-on-windows-7-synergy-client/

Клиент Windows 7

Сервер Linux

Решение: отключите Elevate на клиенте Windows 7

0

Я также недавно столкнулся с этой проблемой на новой машине с Windows 7. В моем случае Linux-машина - это сервер, а Windows 7 (и XP) - это клиенты. Я могу без проблем копировать и вставлять между XP и Linux в любом направлении, и копирование из Linux для вставки в Windows 7 также работает. Но я не могу скопировать из Windows 7. Я взглянул на сообщения отладки, но ничего не выделялось, кроме того, что я вообще не видел сообщений буфера обмена при выходе из экрана Windows 7.

Мне кажется, что служба Synergy не может прочитать буфер обмена, вероятно, как часть обновленной модели безопасности Windows 7.

Я думаю, что могу с уверенностью сказать, что это ошибка в Synergy, но, надеюсь, ее легко исправить! (Я думаю, я пойду сам, если это станет достаточно раздражающим ...)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .