Como posso compartilhar minha área de transferência entre dois servidores X?


9

Recentemente, configurei minha máquina Ubuntu para executar outra sessão X no pty8. Geralmente, executo máquinas virtuais ou sessões de área de trabalho remota nesse outro servidor X, o que ajuda a mediar algumas das frustrações que podem ocorrer com a integração do teclado nesses ambientes.

No entanto, agora se eu copiar algo de alguma janela em: 0, não posso colá-lo em alguma janela em: 1.

Existe uma maneira de compartilhar a área de transferência entre essas duas sessões?

Respostas:


7

Eu vim com uma solução que parece funcionar muito bem. Não tenho certeza se existe uma maneira melhor, mas escrevi um script que inicia minha VM e monitora a área de transferência na tela: 0 para alterações. Quando uma alteração é detectada, ele copia o conteúdo da área de transferência para exibir: 1. Isso é feito bidirecionalmente, para que eu possa copiar e colar da VM também.

Aqui está o script:

#!/bin/bash

virtualbox --startvm "Windows 7" --fullscreen &
waitpid=$!

watch_clip() {
  local curr="" prev="" from=$1 to=:0

  # On first run, we need to copy from :0 to :1 but not vice versa
  if [[ "$from" == ":0" ]]; then
    xclip -o -selection clipboard -d :0 2> /dev/null | xclip -selection clipboard -d :1
    to=:1
  fi

  while true; do
    # Get the current clipboard contents
    curr=`xclip -o -selection clipboard -d $from 2> /dev/null`

    # Compare to previous results and copy if it's changed
    if [[ "$curr" != "$prev" ]]; then
      echo "$curr" | xclip -selection clipboard -d $to
    fi

    prev="$curr"   
    sleep 0.5
  done
}

watch_clip :0 &
watch_clip :1 &
wait $waitpid

Então, tudo o que é necessário é o comando para iniciar a segunda sessão X:

startx ./.startwin7 -- :1

Não notei nenhum problema, mas se alguém puder pensar em uma maneira melhor, eu definitivamente aprecio a entrada.


Seu post me deu uma idéia e eu tenho simplificado seu script para isso: xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1(ver superuser.com/a/992418/19223 )
lorenzog

3

Se você quiser algo chave na mão, a Synergy deve fazer o truque. Eu nunca o usei em apenas uma caixa, nas sessões X. Ele trabalha para compartilhar pranchetas entre máquinas separadas, portanto, seria surpreendente se uma falha de design ou um problema de usabilidade o impedisse de funcionar para você.

Além disso: para seus vms, eles têm versões para Mac e Windows .


+1. Isso é muito legal, eu tinha visto algo assim em minhas pesquisas e esperava que houvesse algo que não exigisse nenhuma configuração. O único problema que considerei em minha própria solução é se alguém fizer login na conta de convidado no meu laptop antes de fazer login ou iniciar minha máquina virtual. Isso ainda não aconteceu, mas se isso se tornar um problema, talvez eu use o Synergy para sincronizar a área de transferência.
Andy E

11
Mais uma vez obrigado pela sua resposta. Eu concedi a recompensa, mas decidi seguir minha própria resposta para a solução aceita, pois ela está mais próxima do que estava procurando, e ainda não tive problemas com ela até agora.
Andy E

11
Obrigado! Sua solução é interessante; faça o que funciona para você, certo? Cheers
Bryan Agee

1

Eu tive o mesmo problema. O Synergy não funcionou bem para mim (possui bugs importantes na parte X11 da sincronização da área de transferência), e eu não queria ter um script que apenas analisasse a área de transferência com um atraso de tempo, pois isso desperdiça CPU e / ou adiciona atrasos aleatórios antes que eu possa colar. Eu escrevi um script chamado xclipsync que resolve o problema para mim.

https://github.com/apenwarr/xclipsync

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.