Kolik trilobitu ma jeden trilobyte?

Synchronizace clipboardu



Jedna z dost neprijemnych vlastnosti Xek je existence dvou nezavislych schranek (clipboardu). Jedna je Xova a druha je oznacovana jako GTK clipboard. Tyto dve schranky jsou vetsinou synchronizovany (fluxbox, windowmaker, twm ... jak je to v Gnome a KDE netusim). Obcas se sice povede oznacit neco v graficke aplikaci a pak prostrednim tlacitkem misto pozadovaneho vlozit do xtermu posledni oznaceny text z jineho terminalu, ale nestava se to casto a staci oznacit neco dalsiho, znovu oznacit a vse je v poradku. Trosku otravne ...

Prava sranda ovsem zacina pri pouziti vnc. Nepouzivam vncviewer na uplne nejnovejsim systemu, takze nelze vyloucit, ze uz je tato vec opravena.

Vncviewer propoji Xovoe schranky. Oznacim neco v xtermu, prostrednim tlacitkem vlozim do jineho - at uz ve vnc, nebo v hostitelsych Xkach. Zadny problem. Ale z xtermu v hostitelskych Xkach do Firefoxu ve vnc, ani zpatky to nejde.

Program synergy propojuje desktopy (forwarduje mys a klavesnici, resi prepinani a spojuje schranky). Da se spojit i fyzicka masina s Xvnc, ale problem je v tom, ze pri oznaceni textu pres vnc a nikoliv pres synergy spojeni schranek nefunguje.

Po neuspesnem vyzkouseni nekolika programu mi nakonec nezbylo, nez napsat tento skript:
#!/bin/bash

#needed packages:
#xclip
#
#usage:
#run it on the same machine in terminals in differrent xservers. 
#it copying all changes in clipboard to one file and sets all clipboards to that.
#no race conditions assumed because one man with one mouse is slower than computer often

#version 0.3
#author Yokotashi
#licence: GPL

clipboardfile="/home/lhc/.clipboard"
clipboardfile2="/home/lhc/.clipboard_"

clip=""

while true; do
        clip_tmp="`xclip -o`"
        if [ -z "$clip_tmp" ]; then
                #during move into vnc id clipboardfile erased often
                clip_tmp="`cat "$clipboardfile2" `"
                echo -n "$clip_tmp" > "$clipboardfile"
                echo -n "$clip_tmp"|xclip -i
        fi
        if [ "q$clip_tmp" != "q$clip" ]; then
                clip="$clip_tmp"
                echo -n "$clip" > "$clipboardfile"
                echo -n "$clip" > "$clipboardfile2"
        fi
        fclip="`cat "$clipboardfile" `"
        if [ "q$fclip" != "q$clip" ]; then
                clip="$fclip"
                echo -n "$fclip"|xclip -i
        fi
        sleep 0.5
done

Pouziti je jednoduche - ve vsech Xkach otevreme xterm, logneme se ssh -X na jeden z pocitacu a pustime skript. Timpadem vsechny instance skriptu ctou stejny soubor a neni treba sitovy disk. Na zvolenem pocitaci musi byt nainstalovan xclip.

sleep by mozna sel prodlouzit.

Skript je samozrejme velmi neefektivni a vyplatilo by se napsat ho v jinem jazyce, nez je bash, asi za pouziti vhodne knihovny, nebo zdrojaku xclip. Nicmene funguje.

Prvni podminka testujici prazdnost souboru je pridana kvuli chovani VNC, ktere pri prechodu mysi do okna VNC nekdy vyprazdni schranku.