Jak mogę udostępnić mój schowek między dwoma serwerami X?
9
Niedawno skonfigurowałem moją maszynę Ubuntu, aby uruchomić kolejną sesję X w pty8. Przeważnie uruchamiam maszyny wirtualne lub sesje pulpitu zdalnego na tym drugim serwerze X, co pomaga zapanować nad frustracjami, które mogą wystąpić przy integracji klawiatury w tych środowiskach.
Jednak teraz, jeśli skopiuję coś z jakiegoś okna na: 0, nie mogę wkleić go do jakiegoś okna na: 1.
Czy istnieje sposób na udostępnienie schowka między tymi dwiema sesjami?
Wymyśliłem rozwiązanie, które wydaje się działać całkiem dobrze. Nie jestem pewien, czy jest lepszy sposób, ale napisałem skrypt, który uruchamia moją maszynę wirtualną, a następnie monitoruje schowek na wyświetlaczu: 0 pod kątem zmian. Po wykryciu zmiany kopiuje zawartość schowka do wyświetlenia: 1. Robi to dwukierunkowo, więc mogę również skopiować i wkleić z maszyny wirtualnej.
Oto skrypt:
#!/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 versaif[["$from"==":0"]];then
xclip -o -selection clipboard -d :02>/dev/null | xclip -selection clipboard -d :1
to=:1fiwhile 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 changedif[["$curr"!="$prev"]];then
echo "$curr"| xclip -selection clipboard -d $to
fi
prev="$curr"
sleep 0.5done}
watch_clip :0&
watch_clip :1&
wait $waitpid
Zatem wszystko, czego potrzeba, to polecenie rozpoczęcia drugiej sesji X:
startx ./.startwin7 -- :1
Nie zauważyłem żadnych problemów, ale jeśli ktoś może wymyślić lepszy sposób, zdecydowanie docenię wkład.
Twój post dał mi pomysł i uprościłem twój skrypt do tego: xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1(patrz superuser.com/a/992418/19223 )
lorenzog
3
Jeśli chcesz coś pod klucz, Synergy powinna załatwić sprawę. Nigdy nie korzystałem z niego tylko na jednym pudełku w X sesjach. Działa, aby współdzielić schowki między oddzielnymi komputerami, więc byłoby zaskakujące, gdyby wada projektowa lub problem z użytecznością uniemożliwiły jej działanie.
+1. To całkiem fajne, widziałem coś takiego podczas moich poszukiwań i miałem tylko nadzieję, że było coś, co nie wymagało żadnej konfiguracji. Jedynym problemem, który wziąłem pod uwagę z mojego własnego rozwiązania, jest to, czy ktoś zaloguje się na konto gościa na moim laptopie przed zalogowaniem lub uruchomieniem mojej maszyny wirtualnej. To się jeszcze nie zdarzyło, ale jeśli stanie się to problemem, mógłbym zamiast tego użyć Synergy do synchronizacji schowka.
Andy E,
1
Jeszcze raz dziękuję za odpowiedź. Przyznałem nagrodę, ale zdecydowałem się pójść z własną odpowiedzią na zaakceptowane rozwiązanie, ponieważ jest ono bliższe temu, czego szukałem, i jak dotąd nie miałem z tym żadnych problemów.
Andy E,
1
Dzięki! Twoje rozwiązanie jest interesujące; rób to, co Ci odpowiada, prawda? Na zdrowie
Bryan Agee,
1
Miałem ten sam problem. Synergia nie działała dla mnie dobrze (ma poważne błędy w części X11 synchronizacji schowka) i nie chciałem mieć skryptu, który po prostu sonduje schowek z opóźnieniem, ponieważ marnuje procesor i / lub dodaje losowe opóźnienia, zanim będę mógł wkleić. Napisałem skrypt o nazwie xclipsync, który rozwiązuje dla mnie problem.
xclip -selection clip -o -display :0 | xclip -selection clip -i -display :1
(patrz superuser.com/a/992418/19223 )Jeśli chcesz coś pod klucz, Synergy powinna załatwić sprawę. Nigdy nie korzystałem z niego tylko na jednym pudełku w X sesjach. Działa, aby współdzielić schowki między oddzielnymi komputerami, więc byłoby zaskakujące, gdyby wada projektowa lub problem z użytecznością uniemożliwiły jej działanie.
Ponadto: dla vms mają kompilacje dla komputerów Mac i Windows .
źródło
Miałem ten sam problem. Synergia nie działała dla mnie dobrze (ma poważne błędy w części X11 synchronizacji schowka) i nie chciałem mieć skryptu, który po prostu sonduje schowek z opóźnieniem, ponieważ marnuje procesor i / lub dodaje losowe opóźnienia, zanim będę mógł wkleić. Napisałem skrypt o nazwie xclipsync, który rozwiązuje dla mnie problem.
https://github.com/apenwarr/xclipsync
źródło