¿Cómo puedo compartir mi portapapeles entre dos servidores X?

9

Recientemente configuré mi máquina Ubuntu para ejecutar otra sesión X en pty8. Principalmente ejecuto máquinas virtuales o sesiones de escritorio remoto en este otro servidor X, lo que ayuda a mediar algunas de las frustraciones que pueden ocurrir con la integración del teclado en estos entornos.

Sin embargo, ahora si copio algo de alguna ventana en: 0, no puedo pegarlo en alguna ventana en: 1.

¿Hay alguna manera de compartir el portapapeles entre estas dos sesiones?

Andy E
fuente

Respuestas:

7

Se me ocurrió una solución que parece funcionar bastante bien. No estoy seguro de si hay una mejor manera, pero escribí un script que inicia mi VM y luego monitorea el portapapeles en la pantalla: 0 para cambios. Cuando se detecta un cambio, copia el contenido del portapapeles para mostrar: 1. Lo hace bidireccionalmente, por lo que también puedo copiar y pegar desde la VM.

Aquí está el guión:

#!/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

Entonces todo lo que se necesita es el comando para iniciar la segunda sesión X:

startx ./.startwin7 -- :1

No he notado ningún problema, pero si alguien puede pensar en una mejor manera, definitivamente agradecería la entrada.

Andy E
fuente
Tu entrada me dio una idea y he simplificado el script para esto: xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1(ver superuser.com/a/992418/19223 )
lorenzog
3

Si quieres algo llave en mano, Synergy debería hacer el truco. Nunca lo he usado en una sola caja, en X sesiones. Funciona para compartir portapapeles entre máquinas separadas, por lo que sería sorprendente que una falla de diseño o un problema de usabilidad impidiera que funcionara para usted.

Además: para sus vms, tienen compilaciones para Mac y Windows .

Bryan Agee
fuente
+1. Eso es genial, había visto algo así en mis búsquedas y esperaba que hubiera algo que no requiriera ninguna configuración. El único problema que he considerado de mi propia solución es si alguien inicia sesión en la cuenta de invitado en mi computadora portátil antes de iniciar sesión o iniciar mi máquina virtual. Eso aún no ha sucedido, pero si se convierte en un problema, podría considerar el uso de Synergy para sincronizar el portapapeles.
Andy E
1
Gracias de nuevo por su respuesta. He otorgado la recompensa, pero decidí ir con mi propia respuesta para la solución aceptada, ya que está más cerca de lo que estaba buscando, y hasta ahora no he tenido ningún problema.
Andy E
1
¡Gracias! Tu solución es interesante; hacer lo que funciona para ti, ¿verdad? Saludos
Bryan Agee
1

Yo tuve el mismo problema. La sinergia no funcionó bien para mí (tiene errores importantes en la parte X11 de su sincronización del portapapeles), y no quería tener un script que solo sondeara el portapapeles con un retraso de tiempo, ya que eso desperdicia CPU y / o agrega demoras aleatorias antes de que pueda pegar. Escribí un script llamado xclipsync que me soluciona el problema.

https://github.com/apenwarr/xclipsync

Apenwarr
fuente