Wie kann ich meine Zwischenablage zwischen zwei X-Servern freigeben?

9

Ich habe kürzlich meinen Ubuntu-Computer so eingerichtet, dass ich eine weitere X-Sitzung in pty8 ausführe. Ich führe hauptsächlich virtuelle Maschinen oder Remotedesktopsitzungen auf diesem anderen X-Server aus, um einige der Frustrationen zu vermitteln, die bei der Tastaturintegration in diesen Umgebungen auftreten können.

Wenn ich jetzt jedoch etwas aus einem Fenster auf: 0 kopiere, kann ich es nicht in ein Fenster auf: 1 einfügen.

Gibt es eine Möglichkeit, die Zwischenablage zwischen diesen beiden Sitzungen freizugeben?

Andy E.
quelle

Antworten:

7

Ich habe eine Lösung gefunden, die ziemlich gut zu funktionieren scheint. Ich bin mir nicht sicher, ob es einen besseren Weg gibt, aber ich habe ein Skript geschrieben, das meine VM startet und dann die angezeigte Zwischenablage überwacht: 0 auf Änderungen. Wenn eine Änderung festgestellt wird, wird der Inhalt der Zwischenablage kopiert, um Folgendes anzuzeigen: 1. Dies geschieht bidirektional, sodass ich auch problemlos von der VM kopieren und einfügen kann.

Hier ist das Skript:

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

Dann ist nur noch der Befehl zum Starten der zweiten X-Sitzung erforderlich:

startx ./.startwin7 -- :1

Ich habe keine Probleme bemerkt, aber wenn sich jemand einen besseren Weg vorstellen kann, würde ich die Eingabe auf jeden Fall begrüßen.

Andy E.
quelle
Ihre Post gab mir eine Idee und ich habe Ihr Skript dies vereinfacht: xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1(siehe superuser.com/a/992418/19223 )
lorenzog
3

Wenn Sie etwas schlüsselfertiges wollen, sollte Synergy den Trick machen. Ich habe es nie für nur eine Box in X-Sitzungen verwendet. Es funktioniert, um Zwischenablagen zwischen verschiedenen Computern zu teilen. Es wäre daher überraschend, wenn ein Konstruktionsfehler oder ein Usability-Problem verhindern würde, dass es für Sie funktioniert.

Außerdem: Für Ihre VMs gibt es Builds für Mac und Windows .

Bryan Agee
quelle
+1. Das ist ziemlich cool, ich hatte so etwas bei meinen Suchen gesehen und hoffte nur, dass es etwas gab, für das kein Setup erforderlich war. Das einzige Problem, das ich bei meiner eigenen Lösung berücksichtigt habe, ist, dass sich jemand auf meinem Laptop beim Gastkonto anmeldet, bevor ich mich anmelde oder meine virtuelle Maschine starte. Das ist noch nicht geschehen, aber wenn es zu einem Problem wird, könnte ich stattdessen Synergy verwenden, um die Zwischenablage zu synchronisieren.
Andy E
1
Nochmals vielen Dank für Ihre Antwort. Ich habe das Kopfgeld vergeben, aber ich habe mich entschlossen, meine eigene Antwort auf die akzeptierte Lösung zu geben, da sie näher an dem liegt, wonach ich gesucht habe, und ich hatte bisher keine Probleme damit.
Andy E
1
Vielen Dank! Ihre Lösung ist interessant; Mach was für dich funktioniert, oder? Prost
Bryan Agee
1

Ich hatte das gleiche Problem. Synergy hat bei mir nicht gut funktioniert (es gibt große Fehler im X11-Teil der Synchronisierung der Zwischenablage), und ich wollte kein Skript, das die Zwischenablage nur mit einer Zeitverzögerung abfragt, da dies CPU und / oder verschwendet Fügt zufällige Verzögerungen hinzu, bevor ich einfügen kann. Ich habe ein Skript namens xclipsync geschrieben, das das Problem für mich löst.

https://github.com/apenwarr/xclipsync

Apenwarr
quelle