Comment partager mon presse-papiers entre deux serveurs X?


9

J'ai récemment configuré ma machine Ubuntu pour que j'exécute une autre session X dans pty8. J'exécute principalement des machines virtuelles ou des sessions de bureau à distance sur cet autre serveur X, ce qui contribue à atténuer certaines des frustrations qui peuvent survenir avec l'intégration du clavier dans ces environnements.

Cependant, maintenant, si je copie quelque chose d'une fenêtre sur: 0, je ne peux pas le coller dans une fenêtre sur: 1.

Existe-t-il un moyen de partager le presse-papiers entre ces deux sessions?

Réponses:


7

J'ai trouvé une solution qui semble plutôt bien fonctionner. Je ne sais pas s'il y a une meilleure façon, mais j'ai écrit un script qui démarre ma machine virtuelle et surveille ensuite le presse-papiers à l'écran: 0 pour les changements. Lorsqu'un changement est détecté, il copie le contenu du presse-papiers pour afficher: 1. Il le fait bidirectionnellement, donc je peux aussi copier et coller à partir de la machine virtuelle.

Voici le 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

Ensuite, tout ce qui est nécessaire est la commande pour démarrer la deuxième session X:

startx ./.startwin7 -- :1

Je n'ai remarqué aucun problème, mais si quelqu'un peut penser à une meilleure façon, j'apprécierais certainement la contribution.


Votre message m'a donné une idée et j'ai simplifié votre script pour cela: xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1(voir superuser.com/a/992418/19223 )
lorenzog

3

Si vous voulez quelque chose de clé en main, Synergy devrait faire l'affaire. Je ne l'ai jamais utilisé sur une seule boîte, à travers des sessions X. Il fonctionne pour partager des presse-papiers entre des machines distinctes, il serait donc surprenant qu'un défaut de conception ou un problème d'utilisation l'empêchent de fonctionner pour vous.

Aussi: pour vos vms, ils ont des builds pour Mac et Windows .


+1. C'est plutôt cool, j'avais vu quelque chose comme ça dans mes recherches et j'espérais juste qu'il y avait quelque chose qui ne nécessitait aucune configuration. Le seul problème que j'ai considéré dans ma propre solution est que quelqu'un se connecte au compte invité sur mon ordinateur portable avant de me connecter ou de démarrer ma machine virtuelle. Cela ne s'est pas encore produit, mais si cela devient un problème, je pourrais envisager d'utiliser Synergy pour synchroniser le presse-papiers à la place.
Andy E

1
Merci encore pour votre réponse. J'ai attribué la prime, mais j'ai décidé d'aller avec ma propre réponse pour la solution acceptée car elle est plus proche de ce que je cherchais, et je n'ai eu aucun problème jusqu'à présent.
Andy E

1
Merci! Votre solution est intéressante; faites ce qui fonctionne pour vous, non? Acclamations
Bryan Agee

1

J'ai eu le même problème. Synergy n'a pas bien fonctionné pour moi (il y a des bugs majeurs dans la partie X11 de la synchronisation de son presse-papiers), et je ne voulais pas avoir un script qui interroge simplement le presse-papiers avec un délai, car cela gaspille du CPU et / ou ajoute des retards aléatoires avant de pouvoir coller. J'ai écrit un script appelé xclipsync qui résout le problème pour moi.

https://github.com/apenwarr/xclipsync

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.