synergy.pngraspberry.jpg

Voilà-t'y pas que mon vieux PC vient de me lâcher sans que Meltdown ou Spectre y soient pour quelque chose (enfin je crois vu qu'ayant plus de 10 ans).

Qu'à cela ne tienne, j'ai un Raspberry Pi 2 en stock, l'occasion de voir si ça tient la route pour un usage raisonné.... et oui, même pour regarder des vidéos ! Il faut juste s'habituer à des outils moins gourmands (chromium en attendant que Firefox 57 soit utilisable, Claws, i3 - depuis le temps qu'il fallait que je m'y mette ...).

Mais à un moment donné, me vient l'idée de partager clavier et souris avec un autre PC plus puissant via Synergy....

J'installe donc synergy via apt-get sur la framboise (qui sera le serveur), j'y crée le fichier de configuration synergy.conf suivant:

 section: screens
   raspberry:
     halfDuplexCapsLock = false
     halfDuplexNumLock = false
     halfDuplexScrollLock = false
     xtestIsXineramaUnaware = false
     switchCorners = none
     switchCornerSize = 0
 
   elite:
     halfDuplexCapsLock = false
     halfDuplexNumLock = false
     halfDuplexScrollLock = false
     xtestIsXineramaUnaware = false
     switchCorners = none
     switchCornerSize = 0
 end
 
 section: aliases
 end
 
 section: links
   raspberry:
     left = elite
   elite:
     right = raspberry
 end
 
 section: options
   relativeMouseMoves = false
   screenSaverSync = true
   win32KeepForeground = false
   switchCorners = none
   switchCornerSize = 0
 end

ce qui fait que le serveur (raspberry) est à gauche et le client (elite) à droite.

Sur le raspberry, enfin, je lance le serveur:

 $ synergys -f --name raspberry -c synergy.conf

et sur le client:

 $ synergy -f -name elite <IP du raspberry>

Notez l'option -f pour que synergy ne passe pas en tâche de fond afin de voir les messages de débogage ... et ça été utile !

Car, bien sûr, ça ne fonctionne pas.

 WARNING: failed to connect to server: Connection   refused ....

Bon, que dit le serveur ? Ben que les versions des protocoles du client et du serveur sont incompatibles (1.8.8 versus 1.5).

En effet, un:

 $ synergyc --version
 synergyc 1.8.8, protocol version 1.6

et

 $ synergys --version
 synergys 1.5, protocol version 1.5

le confirment.

Donc la version de synergy dans le dépôt stretch de la Debian ARM installée sur notre Raspberry s'avère trop ancienne. Donc, idée géniale: récupérons la version 1.8.8 et compilons gaiement !

Ouai ... ben pas aussi simple à faire qu'à dire. Voici donc tout ce que j'ai du faire pour que la compilation fonctionne (la plupart des solutions ayant été glanées à droite et à gauche sur Internet, le reste à l'expérience)

Récupération du code source:

Voici le lien sur github.

Installation des paquets:

 $ sudo apt-get install cmake \
    libcurl4-openssl-dev libx11-dev libssl1.0-dev

Oui, le dernier paquet est ancien mais libssl-dev provoque une erreur de compilation.

J'ai également installé libgtest-dev et googletest pour essayer de faire passer - sans succès - les étapes de test que j'ai fini par (spoiler) zapper purement et simplement (voir plus loin). Donc inutile de les installer.

Modification du chemin d'accès des includes

Modifier la ligne 199 du fichier CMakeLists.txt en remplaçant /usr/local/include par /usr/include comme c'est d'ailleurs indiqué en commentaire:

 else() # not-apple
 
   # add include dir for bsd (posix uses /usr/include/)
   set(CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH}:/usr/include")

Configuration:

 $ ./configure

Notez qu'en cas de problème, il faut vider le cache avant de relancer la commande configure sinon les modifications ne seront pas prises en compte. Pour ce faire, supprimer le fichier CMakeCache.txt.

Suppression des étapes de tests de Makefile2:

Comme je l'ai dit plus haut, le make ne fonctionnera pas suite à cause des étapes de tests. Je prends le parti de sauter les tests (sur l'air de "ça va marcher").

Pour ça, je commente les parties suivantes du fichier CMakeFiles/Makefile2:

  • lignes 1226 à 1229 (src/test/CMakeFiles/gmock.dir/all)
  • lignes 1263 à 1266 (src/test/CMakeFiles/gtest.dir/all)
  • lignes 1327 à 1330 (src/test/CMakeFiles/gtest.dir/all)
  • lignes 1391 à 1394 (src/test/CMakeFiles/gtest.dir/all)

Compilation:

 $ make preinstall

et voilà, les binaires sont dans le sous-répertoire bin.

 $ bin/synergys --version
 synergys 1.8.8, protocol version 1.6

On relance le client et le serveur et cette fois, ça marche ...

enfin presque: mon client Ubuntu 17.10 étant sous wayland, on voit bien le passage du focus d'un PC à l'autre, le clavier fonctionne (mais en qwerty) quant au pointeur de la souris, il reste là où il était (pas de menus non plus, contextuels ou pas)... A suivre, donc ...

Bonne année !