Copiar para área de transferência do Firefox não funciona com o Synergy executado no modo de serviço no Windows 7 x64

5

Para referência, eu executo um servidor Synergy 1.4.2 no Windows 7 x64 com um cliente Linux do CentOS 5.5. A maioria das funções de mouse e teclado funciona exatamente como esperado. O seguinte é uma exceção.

Copiar & colar do servidor - > cliente falha sob certas condições. Todas as cópias de texto feitas no cliente Linux parecem funcionar (eu posso colar texto no Windows). O contrário não é bem verdade. Ao executar o Synergy como um usuário com privilégios de administrador, as cópias de texto no servidor Windows 7 x64 parecem funcionar em todos os programas (posso colar com êxito o texto copiado em qualquer das máquinas). Ao executar o Synergy como um serviço (iniciado em services.msc), as cópias de texto no servidor Windows 7 x64 parecem funcionar em todos os programas, exceto no Firefox. Especificamente, no modo de serviço, quando realço texto no Firefox e faço qualquer um de (a) Editar - > Copiar, (b) clique com o botão direito - > Copiar ou (c) Control-C, POSSO colar o texto em qualquer outro programa no servidor Windows 7, mas não posso colar esse texto no cliente Linux. Isso somente ocorre com o Firefox.

Como solução alternativa (ainda no modo de serviço), geralmente abro um documento de texto no Bloco de Notas. Eu copio o texto do Firefox e o colo no Bloco de Notas. Eu posso então copiar o texto do Bloco de Notas e colá-lo com sucesso no cliente Linux. Novamente, outros programas além do Firefox não exibem esse comportamento (ou seja, eu posso copiar / colar do Google Chrome sem problemas). E novamente, esse problema somente ocorre quando o servidor Windows 7 x64 Synergy é iniciado no modo de serviço.

Alguém mais experimentou esse mesmo fenômeno? Todos e quaisquer comentários ou sugestões são bem-vindos.

    
por sivs422 06.04.2011 / 19:37

3 respostas

0

Eu também experimentei esse problema recentemente com uma nova máquina com Windows 7. No meu caso, a máquina Linux é o servidor e o Windows 7 (e XP) são clientes. Eu posso copiar e colar entre XP e Linux em qualquer direção sem problemas, e copiar do Linux para colar no Windows 7 também funciona. Mas eu não consigo copiar do Windows 7. Eu dei uma olhada nas mensagens de depuração, mas nada se destacou, além de não ver nenhuma mensagem da área de transferência ao sair da tela do Windows 7.

Para mim, parece que o serviço Synergy não consegue ler a área de transferência, provavelmente como parte do modelo de segurança atualizado do Windows 7.

Eu acho que posso dizer com segurança que isso é um bug no Synergy, mas espero que seja fácil de consertar! (Eu acho que vou me dar um tempo se ficar irritante o suficiente ...)

    
por 14.04.2011 / 13:33
3

Eu pareço ter o mesmo problema e achei chato o suficiente para gastar tempo para depurar e consertar (para mim).

O sintoma é que aparentemente todas as entradas de texto não-simples na área de transferência são ignoradas. Isso pode ser bem verificado abrindo o MS Word e a visualização da área de transferência, pois as entradas contêm pequenos ícones que identificam o formato da entrada.

De acordo com o código, isso não deve ser um problema, uma vez que cada entrada tem vários formatos e sempre texto simples codificado em UTF-16, que é o que o Synergy espera.

Infelizmente, o Synergy tenta enumerar todos os formatos de entrada disponíveis via EnumClipboardFormats, o que também não deve ser problema, mas de alguma forma é. Eu escrevi um programa de teste simples e não havia problema com essa abordagem. Em Synergy EnumClipboardFormats retorna apenas o primeiro formato que é CF_UNICODETEXT para texto sem formatação e algo completamente diferente para todo o resto. Em vez de retornar os outros formatos, como meu programa de teste, no Synergy, a próxima chamada para EnumClipboardFormats retorna o erro 183 (ERROR_ALREADY_EXISTS), o que não faz sentido e não está documentado.

A substituição de CMSWindosClipboard :: get pelo método abaixo corrigiu o problema para mim.

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();
}
    
por 05.06.2012 / 19:52
1

Isso funciona para mim: link

Cliente Windows 7

Servidor Linux

Solução: desative o Elevate no Windows 7 Client

    
por 24.01.2014 / 16:38