Skip to content

Repository files navigation

DeskSwitch

Build

DeskSwitch est une petite application macOS de barre des menus qui coordonne un poste Mac et un PC Windows partageant les memes ecrans, le meme clavier et la meme souris.

Elle complete un setup base sur :

  • Synergy pour partager le clavier et la souris ;
  • BetterDisplay pour piloter les sources video des ecrans ;
  • un clavier, une telecommande programmable ou un XP-Pen ACK05 pour declencher les raccourcis.

DeskSwitch ne remplace ni Synergy ni BetterDisplay. Il orchestre leurs raccourcis et fournit une interface unique dans la barre des menus.

Fonctionnalites

  • F3 bascule le clavier et la souris vers le Mac.
  • F4 bascule le clavier et la souris vers le PC.
  • Une notification macOS dediee permet a BetterTouchTool de basculer alternativement le clavier et la souris entre le Mac et le PC.
  • Un HUD discret confirme la destination Clavier : Mac ou Clavier : PC apres chaque basculement.
  • Les evenements logiciels emis par un XP-Pen ACK05 sont captures puis reinjectes de maniere compatible avec Synergy.
  • Deux interrupteurs permettent de choisir independamment la source de l'ecran gauche et de l'ecran droit.
  • Les interrupteurs suivent les raccourcis BetterDisplay F1, F2, F5 et F6, y compris lorsqu'ils viennent du pad.
  • Un deplacement vers la frontiere Synergy peut servir de secours si le raccourci Synergy n'est pas pris en compte.
  • La configuration est stockee dans un fichier JSON modifiable.
  • L'application se lance automatiquement a l'ouverture de la session macOS.
  • Le lancement automatique peut etre active ou desactive depuis le menu DeskSwitch.
  • L'application fonctionne sans Karabiner-Elements.

Configuration attendue

La configuration par defaut correspond au schema suivant :

Action Raccourci Code macOS
Ecran gauche vers le Mac F1 122
Ecran gauche vers le PC F2 120
Clavier/souris vers le Mac F3 99
Clavier/souris vers le PC F4 118
Ecran droit vers le Mac F5 96
Ecran droit vers le PC F6 97

BetterDisplay

Creer quatre raccourcis BetterDisplay :

  1. F1 selectionne l'entree Mac de l'ecran gauche.
  2. F2 selectionne l'entree PC de l'ecran gauche.
  3. F5 selectionne l'entree Mac de l'ecran droit.
  4. F6 selectionne l'entree PC de l'ecran droit.

Dans le setup d'origine, le Mac utilise HDMI et le PC DisplayPort. DeskSwitch ne depend toutefois pas de ces connecteurs precis : BetterDisplay reste responsable du changement de source.

Synergy

Dans Synergy 3 :

  1. associer F3 a Switch to computer: Mac ;
  2. associer F4 a Switch to computer: PC ;
  3. placer le PC a gauche du Mac dans la disposition Synergy si le secours par frontiere est active.

Si la disposition est differente, modifier macEdgeDelta et pcEdgeDelta, ou desactiver useSynergyEdgeFallback.

XP-Pen ACK05

Dans le pilote XP-Pen :

  • affecter F3 au bouton de retour vers le Mac ;
  • affecter F4 au bouton de passage vers le PC ;
  • conserver F1, F2, F5 et F6 pour les sources des ecrans.

Le pilote ACK05 emet des evenements logiciels que Synergy peut ignorer. DeskSwitch les capture au niveau Quartz, les marque pour eviter une boucle, puis les reinjecte depuis une source HID macOS.

BetterTouchTool

Un geste BetterTouchTool peut publier la notification distribuee com.flavienjoly.deskswitch.toggle pour basculer alternativement le clavier et la souris entre les deux ordinateurs. Par exemple, associer Tap a 3 doigts a l'action Post Distributed Notification. Cette integration ne simule aucune touche et ne change pas les sources video.

Installation

Prerequis

  • macOS 13 ou plus recent ;
  • les Command Line Tools Apple (xcode-select --install) ;
  • Synergy et BetterDisplay deja configures.

Compiler

make build

L'application est creee dans build/DeskSwitch.app avec une signature ad hoc.

Pour utiliser une identite de signature locale stable :

DESKSWITCH_CODESIGN_IDENTITY="Nom de l'identite" make build

Les certificats et cles ne doivent pas etre ajoutes au depot.

Installer

make install

L'application est copiee dans ~/Applications/DeskSwitch.app, puis lancee.

Pour installer une version signee :

DESKSWITCH_CODESIGN_IDENTITY="Nom de l'identite" make install

Au premier lancement, autoriser DeskSwitch dans :

  1. Reglages Systeme > Confidentialite et securite > Accessibilite ;
  2. Reglages Systeme > Confidentialite et securite > Surveillance de l'entree.

Relancer l'application apres avoir accorde les autorisations.

Au premier lancement, DeskSwitch s'ajoute automatiquement aux elements d'ouverture de session. Cette option peut etre modifiee depuis le menu DeskSwitch avec Lancer a l'ouverture de session, ou dans Reglages Systeme > General > Ouverture.

Configuration

DeskSwitch cree son fichier de configuration ici :

~/Library/Application Support/DeskSwitch/config.json

Le menu Ouvrir la configuration ouvre directement ce fichier. Apres une modification, utiliser Recharger la configuration.

Exemple complet :

{
  "keyDelayMilliseconds": 120,
  "macDisplayKeys": [122, 96],
  "macEdgeDelta": 900,
  "macSynergyKey": 99,
  "macTriggerKey": 99,
  "pcDisplayKeys": [120, 97],
  "pcEdgeDelta": -900,
  "pcSynergyKey": 118,
  "pcTriggerKey": 118,
  "switchDisplaysWithTrigger": false,
  "synergyDelayMilliseconds": 450,
  "toggleTriggerKey": 80,
  "useSynergyEdgeFallback": true
}

switchDisplaysWithTrigger reste desactive par defaut. Ainsi F3 et F4 ne changent que le clavier et la souris ; les sources video restent independantes.

Journaux

Les journaux sont ecrits dans :

~/Library/Logs/DeskSwitch/desk-switch.log

Le menu Ouvrir le journal permet d'y acceder. Au demarrage, ces lignes confirment que la capture est active :

Permissions accessibility=1 listenEvents=1
Quartz event tap installed

Architecture

DeskSwitch est une application AppKit legere sans dependance tierce :

  • Sources/main.m contient l'application de barre des menus et le tap Quartz ;
  • Info.plist declare l'application comme agent de barre des menus (LSUIElement) ;
  • build.sh compile et signe le bundle ;
  • scripts/install.sh installe l'application dans le dossier Applications de l'utilisateur.

Le code utilise CGEventTapCreate pour observer F1 a F6 et CGEventPost avec kCGEventSourceStateHIDSystemState pour transmettre les raccourcis. Les evenements reinjectes portent une marque interne afin de ne pas etre captures une seconde fois.

Limites

  • L'etat affiche pour les ecrans correspond a la derniere commande observee, pas a une lecture DDC directe de l'ecran.
  • Les codes de touches sont des keycodes macOS, pas des caracteres.
  • Le secours par frontiere suppose par defaut que le PC est a gauche du Mac.
  • Une signature ad hoc peut obliger macOS a redemander les autorisations apres chaque recompilation. Une identite locale stable evite ce comportement.

Licence

DeskSwitch est distribue sous licence MIT.

About

A lightweight macOS menu bar app that coordinates Synergy and BetterDisplay for a software KVM setup.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages