6 पॉइंट द्वारा GN⁺ 2023-12-28 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • DeskHop एक open source hardware प्रोजेक्ट है, जो तब उपयोगी है जब दो कंप्यूटर एक ही keyboard/mouse साझा करते हैं और बटन वाले USB switch की जगह shortcut keys और mouse pointer movement से इनपुट target को तेज़ी से बदला जा सके
  • यह डिवाइस keyboard/mouse और दो कंप्यूटरों के बीच USB Host/Device की भूमिका निभाती है, दोनों ओर का connection एक साथ बनाए रखती है, और चुने गए output पर mouse movement और key input भेजती है
  • mouse switching के लिए HID report descriptor को absolute coordinates में बदला जाता है और अंदरूनी तौर पर relative movement को accumulate किया जाता है, ताकि screen boundary पार करने पर cursor दूसरी कंप्यूटर screen पर उसी ऊंचाई पर दिखाई दे
  • प्रमुख विशेषताओं में लगभग बिना महसूस होने वाली latency, किसी software installation की ज़रूरत नहीं, Linux/macOS/Windows support, 15€ से कम लागत वाले parts, 3D printed case, और outputs के बीच galvanic isolation शामिल हैं
  • सीमाएं भी स्पष्ट हैं: Windows 10 KB5003637 के बाद multi-screen absolute coordinates की समस्या है, macOS multi-screen के लिए experimental workaround चाहिए, और advanced keyboards, ज़्यादा buttons वाले mouse, तथा विभिन्न devices के साथ compatibility की गारंटी नहीं है

दो कंप्यूटरों के बीच तेज़ी से आने-जाने वाला hardware switch

  • DeskHop की शुरुआत उस उपयोग-परिदृश्य से हुई, जहां उपयोगकर्ता रोज़ दो कंप्यूटर चलाते हैं और एक ही keyboard/mouse साझा करना चाहते हैं
  • इसका उद्देश्य पारंपरिक USB switching box की उस समस्या को हल करना है जिसमें switch होने में समय लगता है और button ढूंढना असुविधाजनक होता है
  • वांछित व्यवहार दो तरह का है
    • keyboard shortcut से output switch करना
    • mouse pointer को monitors के बीच खींचने पर automatic switch करना
  • इसे अलग-अलग operating systems वाले कंप्यूटरों के बीच भी काम करने के लिए design किया गया है
  • User Manual उपलब्ध है

मुख्य फीचर्स

  • पूरी तरह मुफ़्त open source है और Open Source Hardware certification प्राप्त है
  • switching के समय महसूस होने वाली latency नहीं के बराबर है
  • mouse pointer को कंप्यूटरों के बीच खींचकर ले जाया जा सकता है
  • कंप्यूटर पर कोई अतिरिक्त software install नहीं करना पड़ता
  • parts की लागत 15€ से कम बताई गई है
  • 3D print होने योग्य snap-fit case का उपयोग करता है
  • outputs के बीच पूर्ण galvanic isolation प्रदान करता है
  • Linux, macOS, Windows पर काम करता है

यह कैसे काम करता है

  • यह डिवाइस keyboard/mouse और कंप्यूटर के बीच मध्यस्थ डिवाइस की तरह काम करती है
  • यह दोनों कंप्यूटरों के साथ connection एक साथ स्थापित और बनाए रखती है
  • वर्तमान selection state के आधार पर तय करती है कि mouse movement और key input किस कंप्यूटर को भेजना है
  • keyboard mouse का अनुसरण करता है, और mouse भी keyboard switching state का अनुसरण करता है
    • mouse को दूसरे desktop पर खींचने पर keyboard input target भी साथ बदल जाता है

mouse switching का implementation

  • mouse cursor के screens के बीच जाने का एहसास देने के लिए HID report descriptor को absolute coordinates मोड में बदला जाता है
  • वास्तविक mouse reports अब भी relative movement के रूप में आते हैं, और डिवाइस अंदर इन्हें accumulate करके current position संभालती है
  • जब cursor दूसरी monitor दिशा में current screen area से बाहर जाने लगता है, तो Y coordinate को बनाए रखते हुए X coordinate को उल्टी boundary पर बदला जाता है और output switch कर दिया जाता है
  • इससे cursor दूसरी कंप्यूटर screen पर उसी ऊंचाई पर दिखाई देता है और switching स्वाभाविक लगती है
  • वास्तविक switch उस क्षण होता है जब एक ओर का pointer रुकता है और दूसरी ओर का pointer चलना शुरू करता है

keyboard switching और LED state

  • डिवाइस USB Host के रूप में काम करते हुए keyboard को समय-समय पर poll करती है
  • HID report में पहले से configured shortcut मिलने पर उसके बाद के characters दूसरे output को भेजे जाते हैं
    • उदाहरण: Ctrl + Caps Lock
  • कौन सा output सक्रिय है, यह दिखाने के लिए keyboard LED का पुन: उपयोग किया जा सकता है
  • यह हर कंप्यूटर की LED state याद रखती है, इसलिए पिछली स्थिति को जारी रखा जा सकता है

build और firmware update

  • version mismatch और path समस्या कम करने तथा बड़े SDK download से बचने के लिए minimal pico sdk और tinyusb साथ में शामिल हैं
  • Debian/Ubuntu पर build-essential, cmake, gcc-arm-none-eabi, libnewlib-arm-none-eabi, python3 install होना चाहिए
  • default build निम्न commands से किया जाता है
    • cmake -S . -B build
    • cmake --build build
  • Docker के जरिए reproducible build भी उपलब्ध है
    • docker-compose -f misc/docker.yml run --rm build_container
  • pre-built images भी इस्तेमाल किए जा सकते हैं
    • version 0.6 से एक single universal image उपलब्ध है
    • .uf2 file को डिवाइस में copy करके उपयोग किया जाता है

firmware upgrade का तरीका

  • Option 1: firmware 0.6 या उससे ऊपर में left ctrl + right shift + c + o से config mode में प्रवेश किया जाता है
    • keyboard से जुड़ी ओर वाला डिवाइस reboot होकर DESKHOP नाम की USB drive के रूप में दिखता है
    • .uf2 file copy करने पर image verification के बाद flash और reboot होता है, फिर दूसरी board का upgrade भी जारी रहता है
    • यह drive सामान्य USB storage device नहीं है, इसलिए इसे file copy के सामान्य उपयोग के लिए नहीं लिया जा सकता
  • Option 2: ROM bootloader का उपयोग करके हर Pico की board button दबाए रखते हुए उसे connect करें और दिखाई देने वाली flash drive में .uf2 copy करें
  • Option 3: debug build में DH_DEBUG_CDC_FLASH=ON के साथ build किया गया हो, तो CDC serial command से bootloader mode में जाया जा सकता है
    • echo -n 'flash' > /dev/tty.usbmodem11104

अतिरिक्त फीचर्स

  • Mouse slowdown

    • right CTRL + right ALT से slow mouse mode toggle होता है
    • जब बहुत सटीक position adjustment चाहिए हो, तब pointer speed काफ़ी कम हो जाती है
  • Switch Lock

    • RIGHT CTRL + K से current screen पर lock किया जा सकता है
    • इससे गलती से दूसरी screen पर जाने से बचा जा सकता है
  • Lock Both Screens

    • RIGHT CTRL + L से दोनों कंप्यूटर एक साथ lock किए जा सकते हैं
    • इसके लिए हर output का operating system configure करना होता है
  • Gaming Mode

    • LEFT CTRL + RIGHT SHIFT + G से toggle होता है
    • इसमें current screen पर lock हो जाता है और mouse standard relative coordinate mouse की तरह काम करता है
    • यह उन games, virtual machines, या अभी unsupported operating systems की समस्याओं के लिए है जो absolute mouse mode के साथ ठीक नहीं चलते
  • Screensaver

    • default रूप से बंद रहता है
    • enable करने पर inactivity के बाद mouse pointer Pong ball की तरह screen पर उछलता रहता है
    • उस screen पर input भेजते ही यह अपने आप बंद हो जाता है

hardware configuration

  • schematic दो Raspberry Pi Pico boards पर आधारित है
    • Pico को इसलिए चुना गया क्योंकि यह लगभग 4.10€ प्रति unit सस्ता है, हाथ से solder किया जा सकता है, और आसानी से उपलब्ध है
  • दोनों Pico UART से जुड़े होते हैं
  • दोनों sides को digital isolator से अलग किया गया है
    • Analog Devices ADuM1201 लगभग 3€
    • TI ISO7721DR लगभग 1.5€ है, और यह सस्ता, तेज़, तथा pin-compatible होने के कारण पसंद किया गया है
  • RP2040 मूल रूप से dual USB support नहीं करता, लेकिन Pico-PIO-USB के जरिए PIO पर USB implement करके यह USB Host और Device दोनों भूमिकाएं निभाता है

PCB और case

  • DIY assembly आसान बनाने के लिए PCB traces को एक तरफ रखा गया है और parts की संख्या कम की गई है
  • USB D+/D- differential lines सिद्धांततः समान लंबाई की होनी चाहिए, लेकिन Pico PCB की GPIO trace length difference की भरपाई के लिए इन्हें जानबूझकर थोड़ा asymmetric बनाया गया है
  • differential impedance target 90Ω है और व्यवहार में लगभग 107Ω हासिल किया गया है
  • PCB thickness snap-fit case के अनुरूप 1.6mm रखी गई है
  • PCB v1.1 में v1.0 की तुलना में ये additions हैं
    • ESD protection TPD4E1U06DBVR
    • keyboard/mouse connector के लिए VBUS capacitors
    • silkscreen direction markers
    • pre-soldered header वाले clone boards के लिए holes और बेहतर alignment
    • USB 27Ω resistors
  • v1.1 में छोटे TVS IC और 0805 resistors के कारण hand-soldering थोड़ी कठिन है
  • case case में उपलब्ध है, लगभग 33g filament उपयोग करता है, और कुछ घंटों में print किया जा सकता है
  • यह बिना screws के snap-fit structure से बंद होता है, और lid में screwdriver से खोलने के लिए slot दिया गया है

लागत और parts

  • PCB v1.1 BOM की कुल लागत 11.22€ बताई गई है
  • मुख्य parts ये हैं
    • Raspberry Pi Pico 2 units: 8.20€
    • USB-A PCB connectors 2 units: 0.40€
    • TI ISO7721DR 1 unit: 1.40€
    • 100nF capacitors 2 units: 0.18€
    • 27Ω resistors 4 units: 0.12€
    • TPD4E1U06DBVR 2 units: 0.62€
    • 4.7uF capacitors 2 units: 0.14€
    • 2.54mm 1x03 headers 2 units: 0.16€
  • इसके अलावा PCB fabrication की ज़रूरत है और Gerber उपलब्ध है
  • 3D printing के लिए STL files भी उपलब्ध हैं

shortcut keys और settings

  • firmware 0.68 या उससे ऊपर के लिए मुख्य shortcuts ये हैं
    • Left Ctrl + Right Shift + C + O: config mode में प्रवेश
    • Right Shift + F12 + D: flash settings हटाएं
    • Right Shift + F12 + Y: screen switching offset save करें
    • Right CTRL + Right ALT: slow mouse mode toggle
    • Right CTRL + K: mouse desktop switching lock/unlock
    • Right CTRL + L: दोनों outputs एक साथ lock
    • Left CTRL + Right Shift + G: gaming mode toggle
    • Left CTRL + Right Shift + S: screensaver enable
    • Left CTRL + Right Shift + X: screensaver disable
    • Left CTRL + Caps Lock: output switch
  • कुछ keyboards दोनों Shift को एक साथ सही तरह नहीं भेजते, इसलिए shortcut बदले गए

web configuration mode

  • firmware 0.6 से बेहतर configuration mode जोड़ा गया है
  • Left Ctrl + Right Shift + C + O दबाने पर डिवाइस reboot होकर settings mode में जाती है
  • DESKHOP नाम की USB drive दिखती है, जिसके अंदर config.htm नाम की एक file होती है
  • इस file को Chromium या Chrome में खोलना चाहिए
    • Firefox WebHID implementation से बचता है, इसलिए फिलहाल supported नहीं है
  • connection की अनुमति देने के बाद options set करके save करने पर वे डिवाइस में लिख दिए जाते हैं
  • online settings page के बजाय local file method का उपयोग इसलिए किया गया है क्योंकि input devices के साथ interact करने वाली JavaScript को किसी मनमानी online location से load करना संभावित security risk हो सकता है
  • storage space limitation के कारण settings web page self-extracting format में है, और पूरा source repository में शामिल है

security और safety design

  • systems के बीच copy/paste या information sharing feature नहीं है
    • यह information leakage रोकने के लिए जानबूझकर रखी गई सीमा है
  • output computer से आने वाले incoming connections नहीं होते
    • अपवाद सिर्फ standard keyboard LED on/off messages हैं, जो 1-byte data तक सीमित हैं
  • output computer से firmware upgrade trigger नहीं किया जा सकता
    • केवल विशेष keyboard shortcut के जरिए स्पष्ट user action की अनुमति है
  • connected keyboard/mouse के custom endpoints expose नहीं किए जाते और न ही उनकी जानकारी डिवाइस की ओर भेजी जाती है
  • input records store नहीं किए जाते
  • डिवाइस अपने आप key inputs generate नहीं करती
    • केवल वही output होता है जिसे user ने input किया या trigger किया
  • outputs physically isolated हैं और कम से कम 2kV isolation voltage वाली galvanic isolation का उपयोग होता है
  • devices के बीच packets fixed length के हैं, और भेजे जाने वाले configuration options एक छोटी सूची तक सीमित हैं
  • Bluetooth, Wi-Fi, networking, या internet access नहीं है
  • connected computers को किसी भी स्थिति में trusted entity नहीं माना जाता
  • configuration mode inactivity के बाद अपने आप बंद हो जाती है
  • code binary blobs के बिना open source के रूप में उपलब्ध है

FAQ और compatibility

  • PCB और isolator के बिना सिर्फ दो Pico से भी यह चल सकता है, लेकिन isolator का उपयोग recommended है
  • अलग monitor resolutions पर भी mouse movement abstract coordinate space में process होता है और कंप्यूटर इसे physical screen पर map करता है, इसलिए इसे काम करना चाहिए
  • यह बिक्री के लिए commercial product नहीं है, बल्कि एक व्यक्तिगत non-commercial hobby project है
  • Elecrow पर PCB, assembled PCB, और complete device को single-unit मात्रा में order करने की update है
    • user reports के अनुसार board खाली स्थिति में आता है और firmware खुद flash करना पड़ता है
  • Logitech Unifying जैसे keyboard/mouse combo dongles को हालिया firmware update के बाद बेहतर support मिला है
  • अलग wireless receiver वाले wireless mouse और keyboard, Anker wireless mouse test में सही काम करते हैं
  • build समस्याओं के लिए Troubleshooting Wiki देखी जा सकती है

software alternatives

ज्ञात सीमाएं और योजनाएं

  • Windows 10 KB5003637 के बाद HID absolute coordinates behavior टूट गया है, इसलिए Windows पर 1 से अधिक screens का उपयोग नहीं किया जा सकता
    • mouse main screen पर ही रहता है, experimental workaround मौजूद है, और बेहतर workaround विकसित किया जा रहा है
  • code को cleanup और refactoring की ज़रूरत है
  • विभिन्न devices पर पर्याप्त testing नहीं हुई है, इसलिए hardware के अनुसार यह तुरंत काम न भी करे
  • knobs, extra buttons, और sliders वाले advanced keyboards में वे अतिरिक्त hardware features काम नहीं कर सकते
  • बहुत अधिक buttons वाले आधुनिक mouse में कुछ buttons अपेक्षित रूप से काम नहीं कर सकते
  • यह तभी काम करता है जब दोनों कंप्यूटर जुड़े हों और USB power दे रहे हों
    • क्योंकि हर board उस कंप्यूटर से power लेती है जिससे वह जुड़ी है
  • macOS में 2 या अधिक screens पर समस्या है, और नवीनतम firmware इसके लिए experimental workaround देता है
  • planned features में Windows/macOS multi-screen workaround सुधार, transparent/gaming mode, 2 से अधिक outputs support, settings UI सुधार आदि शामिल हैं
  • केवल single Pico W board पर बुनियादी फीचर्स देने वाला lite version भी बनाया जा रहा है
  • mouse polling फिलहाल 1000Hz तक काम कर सकती है

1 टिप्पणियां

 
GN⁺ 2023-12-28
Hacker News की राय
  • क्लाइंट सॉफ़्टवेयर के बिना स्क्रीन के किनारे को detect कर पाना अच्छा लगा
    माउस कर्सर को स्वाभाविक रूप से पार जाने देने के लिए mouse HID report descriptor को absolute coordinates में बदलते हैं, और वास्तव में relative movement के रूप में आने वाली mouse reports को अंदर ही accumulate करके सटीक position बनाए रखते हैं
    इसलिए यह clipboard फीचर और client software के बिना synergykm / Barrier की तरह काम करता है

    • यह बात खास तौर पर अच्छी है कि कंप्यूटरों का network से connected होना ज़रूरी नहीं है
    • अगर कर्सर माउस के अलावा किसी और चीज़ से move हो तो क्या यह पूरी तरह टूट जाएगा, यह जानने की जिज्ञासा है
      उदाहरण के लिए automation script या ऐसे game जिनमें कर्सर को स्क्रीन के बीच में lock किया जाता है
  • YouTube में अलग hardware के बिना भी , और . keys से वीडियो को frame-by-frame आगे-पीछे किया जा सकता है

    • काश Android पर भी इसका कोई समाधान होता
      touch interface में बारीक चयन slider से करना वाकई बहुत खराब है
    • 30 सेकंड और 1 frame के बीच की jumping संभव नहीं है
    • आजकल के mouse काफ़ी precise हैं और अच्छी तरह काम करते हैं, तो सोचता हूँ लोग कौन-सा mouse इस्तेमाल करते हैं कि scroll करते समय साँस रोकनी पड़ती है
    • mpv भी वही shortcuts इस्तेमाल करता है
      पहले किसने शुरू किया, यह नहीं पता, लेकिन मैंने इसे mpv में जाना और YouTube पर संयोग से दबाया तो यह काम कर गया
  • Windows में Microsoft Garage द्वारा बनाया गया और अब Windows PowerToys में शामिल Mouse Without Borders इस्तेमाल किया जा सकता है
    लिंक:
    https://www.microsoft.com/en-us/garage/profiles/mouse-without-borders
    https://github.com/microsoft/PowerToys

    • Barrier, Synergy से अलग हुआ cross-platform open source प्रोजेक्ट है, और बिना अतिरिक्त hardware के भी काफ़ी अच्छी तरह काम करता है
      लेकिन अभी देखा तो इसका maintenance बंद हो चुका है, और इसका उत्तराधिकारी Input Leap है
      https://github.com/debauchee/barrier
      https://github.com/input-leap/input-leap
    • मैंने इसे पहले इस्तेमाल किया है, और यह सचमुच बहुत अच्छा काम करता था
      खासकर कंप्यूटरों के बीच files को drag-and-drop करके copy करना आसान हो जाता है
  • Keyboard और mouse switch करने के लिए मैंने 4 USB hubs खरीदे, लेकिन ज़्यादातर device इतने खराब हैं कि बहुत झुंझलाहट होती है
    दिन में कई बार hub को physically unplug और replug करना पड़ता है, और webcam या USB mic जोड़ दें तो स्थिति और खराब हो जाती है
    मैं Synergy अच्छी तरह इस्तेमाल कर रहा हूँ, लेकिन webcam, mic, audio तक को ठीक से संभाल सके और keyboard shortcut से सिर्फ़ connected devices के set को move कर सके, ऐसा ढंग का KVM चाहिए
    KVM users को निश्चित रूप से पर्याप्त support नहीं मिल रहा है

    • कंपनी में संयोग से इस्तेमाल किया गया BenQ 32-inch 4K monitor का built-in KVM सेटअप सबसे अच्छा था
      हर DisplayPort input के साथ USB ports जुड़े होते हैं, और USB-C peripherals, display input और काफ़ी ठीक power output तक संभालता है
      डेस्क पर लगे छोटे switch से इसे बदला जाता है, और जिन input को दिखाया नहीं जा रहा उन पर भी monitor connected दिखता रहता है, इसलिए Windows को दोबारा rearrange करते हुए blink नहीं करना पड़ता और switching कहीं ज़्यादा तेज़ और smooth होती है
    • मैं PC और MacBook के बीच keyboard, mouse, monitor share करना चाहता हूँ, लेकिन ऐसा KVM शायद नहीं है जिसमें एक तरफ़ DP+USB और दूसरी तरफ़ Thunderbolt हो
      यह आम use case जैसा लगता है, इसलिए अफ़सोस है
      पहले dock में भी निकाला जा सकता है, लेकिन मैं जो monitor resolution इस्तेमाल करता हूँ वह ऊँची है, इसलिए ज़्यादातर docks पर बोझ पड़ता है या वे सिर्फ़ 30Hz support करते हैं
    • हाल ही में मैंने Dell का 32-inch 6K monitor खरीदा, जिसमें Thunderbolt 4 hub और KVM built-in हैं, और यह पूरी तरह काम करता है
      Mac को एक Thunderbolt 4 cable से, और PC को HDMI 2.1 तथा USB3 10Gbps से upstream जोड़ा जाता है
      monitor से ethernet और keyboard/mouse जुड़े हैं, और shortcut या monitor OSD से सही device पर switch हो जाता है
      PIP फीचर से दोनों devices को एक साथ भी देखा जा सकता है
    • मैं tesmart dual DP 4-port KVM से बहुत संतुष्ट हूँ
      इसकी सीमा बस यह है कि इसमें केवल USB 2 host controller है, इसलिए कुछ high-speed devices जैसे webcam को switch करना मुश्किल होता है
      अगर Apple products मिलाने हों, तो Apple को MST पसंद नहीं है, इसलिए display के दो channels अलग रखने के लिए Mac पर physical USB3 cables दो लगानी पड़ती हैं
    • ATEN USB KVM में लगभग कुछ भी plug किया जा सकता है
      files जल्दी transfer करने के लिए मैं USB drive लगाकर इस्तेमाल करता हूँ, और अगर device USB power पर चलता है तो आमतौर पर काम कर जाता है
      USB 3+, DP आदि वाले मॉडल चुनें तो महंगे हैं, लेकिन सिर्फ़ USB switching वाले सस्ते मॉडल भी हैं
      हालांकि एक बड़ी कमी यह है कि special keys वाले कुछ mouse और keyboard 100% काम नहीं करते हैं
  • मैं इस काम के लिए Synergy को 10 साल से ज़्यादा समय से इस्तेमाल कर रहा हूँ
    https://symless.com/synergy है, तेज़ है, Wi‑Fi पर भी तुरंत switch हो जाता है, और Windows/Mac/Linux तीनों को support करता है

    • Synergy, Barrier, और Input Leap एक ही पूर्वज से निकले काफ़ी अच्छे software solutions हैं
      इनमें बाद वाले दो free open source हैं, और Synergy में devices के बीच boundaries configure करने का तरीका अच्छा है
      लेकिन अच्छा होता अगर कोई भी solution custom monitor layout को ठीक से support करता
      मेरे setup में monitors एक सीध में नहीं हैं, और हर monitor अलग-अलग device पर independently switch हो सकता है, इसलिए अगर monitor-wise और device-wise boundaries तय की जा सकतीं तो कमाल होता, लेकिन software या hardware किसी में भी ऐसा दिखता नहीं
      मैंने हाल ही में Synergy से पूछा तो उन्होंने कहा कि यह एक popular feature request है और roadmap में है, उम्मीद है जल्दी आएगा
    • अगर कई computers पर अलग-अलग VPN चल रहे हों तो Synergy ठीक से काम नहीं करता, इसलिए मैंने यहाँ के DIY जैसे एक commercial device खरीदा, और वह बहुत बढ़िया चला
      पहले computer में login करने की ज़रूरत नहीं होती, और screen edge पार करके या key combination से switch किया जा सकता है
      जुड़े हुए USB devices को भी keyboard और mouse से अलग independently switch किया जा सकता है
      ऐसे products को boundless, borderless, roaming KM switch भी कहा जाता है
      https://www.cdw.com/product/siig-4-port-roaming-km-switch-wi...
    • ShareMouse का भी ज़िक्र होना चाहिए: https://www.sharemouse.com/
      मेरे अनुभव में यह Synergy से काफ़ी बेहतर चला
      मैं तब इस पर switch हुआ जब Synergy developers ने कई साल पुराने bugs पर प्रतिक्रिया देना बंद कर दिया और वह मेरे लिए इस्तेमाल लायक नहीं रहा
      उदाहरण: https://github.com/symless/synergy-core/issues/5992
      कमी यह है कि 1 साल बाद भी updates पाने हों तो “maintenance renewal” करना पड़ता है, लेकिन मैंने अभी renew नहीं किया है और फिर भी इसे अच्छी तरह इस्तेमाल कर रहा हूँ
    • कुछ महीने पहले दूसरे computer पर mouse अटक गया था, और उसे ठीक करने में कुछ मिनट लग गए क्योंकि मैं यह भूल ही गया था कि Synergy चल रहा है
      जाँचने पर पता चला कि setup 4~5 साल से बिना किसी समस्या के चल रहा था, और paid software में यह काफ़ी value-for-money है
    • अच्छा लगता है, लेकिन TLS को base paid SKU से ऊपर का premium feature बनाना निराशाजनक है
      security हर चीज़ में default और free होनी चाहिए; यह luxury नहीं, minimum requirement है
      फिर भी, अगर इस्तेमाल करके ठीक लगा तो copy-paste feature की वजह से premium license लेने का सोच सकता हूँ
  • एक similar project https://github.com/jfedor2/screen-hopper से प्रेरित होकर बनाया गया एक project है
    मेरे बनाए version में दो programs हैं
    एक Linux desktop पर चलता है, Linux input subsystem evdev के input events सुनता है, और एक खास key दबाने पर सारे events consume करके USB serial के ज़रिए RPI Pico को भेज देता है
    दोबारा दबाने पर यह passive listening mode में लौट आता है
    RPI Pico serial से मिले Linux evdev events को USB HID events में बदलकर दूसरे Windows PC को भेजता है
    नतीजा यह होता है कि Linux PC और किसी भी OS चलाने वाले PC के बीच तुरंत switch होने वाला KM switch बन जाता है
    wiring की फोटो: https://ibb.co/m0zhzgz
    मैंने एक और Pico को USB serial adapter की तरह इस्तेमाल किया, और hardware beginner होने के नाते सिर्फ 2 तारों की ज़रूरत पड़ना बहुत राहत की बात थी
    दोनों programs 100 lines से कम के थे, और Linux evdev को सुनने वाले Rust crates और Python packages बहुत हैं
    Pico side भी एक बड़े switch statement वाले loop जैसा ही है, और USB HID events भेजने के लिए Rust crate मौजूद है
    COBS इस्तेमाल करें तो framing की चिंता के बिना serial पर भेजा जा सकता है
    USB serial bug की वजह से मैंने आखिरकार इसे open source नहीं किया, क्योंकि disconnect होने के बाद यह Linux desktop पर ठीक से reconnect नहीं होता था
    यह Linux की वजह से था या Pico की, पता नहीं, और क्योंकि मैं cable निकालता नहीं हूँ, इसलिए अभी भी बिना समस्या के इस्तेमाल कर रहा हूँ
    मैं FPS games बहुत खेलता हूँ, इसलिए absolute coordinate feature जानबूझकर नहीं रखा, और switch key को mouse के side button से bind कर दिया ताकि keyboard को छुए बिना systems बदले जा सकें

    • यह सच में बहुत शानदार idea है
      मुझे screen-hopper project के बारे में कल ही पता चला, और लगा जैसे उस theory की पुष्टि हो गई कि आप जो भी बनाने की सोचें, कोई ज़्यादा होशियार इंसान उसे पहले ही और बेहतर बना चुका होता है
      मैं गेम बिल्कुल नहीं खेलता, इसलिए absolute coordinates मेरे लिए ठीक हैं, लेकिन इसे configurable बनाने की entry to-do list में है
    • USB serial bug ही शायद इसे public करने की वजह बन सकता है
      इससे कोई उस bug को पैदा करने वाली बारीकियों में उतरने के लिए nerd-sniped हो सकता है
    • bug के बावजूद इसे release करने का सुझाव मुझे बहुत लोगों से मिला, और उस तर्क में दम है
      जैसा है वैसा source यहाँ है: https://github.com/null-dev/picokvm
    • अच्छा होगा अगर इसे repository में no support, use-at-your-own-risk warning के साथ डाल सकें
    • bug बचे होने पर भी इसे देखना चाहने वाले लोग बहुत होंगे
  • USB 3.0 switch से दो PCs के बीच mouse और keyboard input बदलना मेरी बड़ी परेशानियों में से एक था
    जब Teams meeting में मुझे ज़्यादा बोलना नहीं होता था और कोई मेरा नाम पुकार देता या message भेज देता, तो Teams खुले हुए PC पर input वापस ले जाने के लिए button ढूँढते हुए घबराहट होती थी
    मैंने सोचा था कि ESP32 या Rpi Pico W और कुछ photocouplers को USB switch के button pins से जोड़कर एक HTTP endpoint expose किया जाए, फिर AutoHotkey script और shortcut key से दोनों devices के input toggle किए जाएँ
    लेकिन अभी कौन-सा input active है, यह पता लगाने का तरीका समझ नहीं आया, इसलिए छोड़ दिया; यह solution पसंद आया

    • Teams-compatible headsets में mute button वाले models देखना अच्छा रहेगा
      कंपनी से मिला मेरा Logitech headset cable पर volume, call end, और mute buttons देता है, इसलिए multitasking करते समय unmute करना काफ़ी आसान हो जाता है
  • Synergy इस उपयोग को pure software से अच्छी तरह संभालता है
    यह मुफ़्त या open source नहीं है, लेकिन काफ़ी सस्ता है
    https://symless.com/synergy

    • Synergy के closed source बनने से पहले इससे Barrier[0] fork हुआ था, और बाद में उससे input-leap[1] fork हुआ
      दोनों open source हैं
      [0] https://github.com/debauchee/barrier
      [1] https://github.com/input-leap/input-leap
    • Synergy open core है, और इसके ये हिस्से GPL के तहत licensed हैं: https://github.com/symless/synergy-core/#License-1-ov-file
      1.9 version से fork हुआ एक open source fork भी है: https://github.com/debauchee/barrier#what-is-it
    • लगता है Synergy में ऐसे bugs हैं जिन पर ध्यान नहीं दिया जाता
      उदाहरण के लिए, अगर आप macOS host इस्तेमाल करते हैं, तो Windows/Linux clients पर cursor position की गणना में macOS acceleration curve का उपयोग होता है, लेकिन असली cursor movement में नहीं
      इसलिए host के पास वाली Windows screen के एक-तिहाई हिस्से में काम करने की कोशिश करते समय अनजाने में फिर वापस चले जाते हैं
    • सोच रहा हूँ कि Windows और Android tablet के संयोजन के लिए कोई ठीक-ठाक सुझाव है क्या
      लगता है सभी solutions सिर्फ desktop OS पर ही काम करते हैं
    • लोग कहते हैं, “Synergy जितना परेशान करने वाला कुछ नहीं, लेकिन बाकी सब भी ऐसे ही हैं”
      इन तकनीकों में एक भी चीज़ स्थिर नहीं है, और Synergy ने कई बार जुड़े हुए keyboard तक को फ्रीज़ कर दिया, जिससे कंप्यूटर को power cycle करने पर ही वह फिर responsive हुआ
  • यह सचमुच कमाल का है
    कम से कम 20 साल से left-to-right Linux-Mac-Windows boxes वाले desktop setup का उपयोग करने वाले व्यक्ति के नज़रिए से तो खासकर ऐसा लगता है
    अगर programming languages में multilingual fluency होती है, तो hardware में multi-platform setup होता है
    अच्छी बात यह है कि पिछले कुछ सालों में system on chip (SoC) designs बढ़ने से यह और आसान हो गया है
    मौजूदा setup में Shenzhen से आए $250 के Ryzen SoC Mac mini clones के 2 units और एक M1 MBP हैं
    अफ़सोस यह है कि Synergy जैसे कभी मज़बूत रहे open source KVM solutions की दुनिया forks के recursive nightmare में बदल गई है, इसलिए ऐसा multi-platform open source software KVM ढूँढना मुश्किल हो गया है जो मुफ़्त में ठीक से काम करे
    अभी तो आखिरकार पुराना KVM switch ही इस्तेमाल कर रहा हूँ, लेकिन button दबाना ध्यान भंग करता है
    कभी न कभी इसे फिर से आज़माना चाहूँगा

  • अगर इसे commercialize करने के लिए साथ काम करने वाला कोई हो, तो मैं plastic injection molding, marketing, large-scale assembly और ज़रूरी दूसरे कामों की लागत उठाने और उन्हें संभालने के लिए तैयार हूँ
    ईमेल प्रोफ़ाइल में है

    • अगर इसे commercialize किया जाए, तो “यह तभी काम करता है जब दोनों कंप्यूटर जुड़े हों और powered on हों” वाली कमी ज़रूर दूर करनी चाहिए
      मेरे लिए यह deal-breaker है
    • ऐसा commercial product पहले से मौजूद है
      boundless, borderless, roaming KM switch खोजकर देखिए