🎧 Listen to this article: हिंदी · English · தமிழ்
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
आज 13 अक्टूबर, 2026 है, और मैंने आखिरकार एक छोटा प्रोजेक्ट पूरा कर लिया है जो कई दिनों से आधा-अधूरा पड़ा था: दो कंप्यूटरों के लिए एक कीबोर्ड और माउस का उपयोग करना। एक Linux लैपटॉप है। दूसरा एक Mac mini है जो बिना मॉनिटर के एक कोने में रहता है, जिसे मैं आमतौर पर केवल SSH के जरिए एक्सेस करता हूँ। इस काम के लिए टूल Deskflow है, जो एक मुफ़्त, ओपन-सोर्स प्रोग्राम है जो एक कंप्यूटर के कीबोर्ड और माउस को नेटवर्क पर अन्य कंप्यूटरों को नियंत्रित करने की सुविधा देता है।
विचार सरल है। वास्तविकता में लगभग एक दर्जन छिपे हुए कदम थे। उन्हें लिख लेने का यह एक अच्छा समय है, क्योंकि Linux और macOS दोनों अब पहले से अधिक अनुमतियाँ माँगते हैं, और एरर मैसेज हमेशा वास्तविक कारण की ओर इशारा नहीं करते हैं। मैं धीरे-धीरे आगे बढ़ूँगा और हर शब्द को पहली बार आने पर समझाऊँगा। मैं मुझे मिले वास्तविक एरर मैसेज भी दिखाऊँगा, ताकि यदि आप कोई एरर देखें, तो आप उसे खोज सकें और इस पेज को पा सकें।
आप क्या सीखेंगे
अंत तक आप जान जाएँगे कि कैसे:
- सर्वर और क्लाइंट का चुनाव करें, और यह चुनाव क्यों मायने रखता है;
- स्क्रीन लेआउट तैयार करें ताकि कर्सर सही दिशा में किनारे को पार करे;
- वे TLS सर्टिफिकेट बनाएँ और उन पर भरोसा करें जिनका उपयोग Deskflow कनेक्शन को एन्क्रिप्ट करने के लिए करता है;
- वे macOS अनुमतियाँ दें जिन्हें SSH पर नहीं दिया जा सकता;
- अपने होम नेटवर्क के लिए Linux फ़ायरवॉल खोलें, और किसी अन्य चीज़ के लिए नहीं;
- Mac के लॉग इन होने पर क्लाइंट को स्वचालित रूप से शुरू करें;
- पहचानें कि आपके सामने दो सामान्य विफलता प्रकारों में से कौन सा है: कनेक्शन की समस्या या अनुमति की समस्या।
सरल शब्दों में, Deskflow कैसे काम करता है
Deskflow की दो भूमिकाएँ हैं।
वह सर्वर वह कंप्यूटर है जिसमें वास्तविक कीबोर्ड और माउस जुड़े होते हैं। यह हर की-प्रेस और माउस के हर मूवमेंट को पढ़ता है।
वह क्लाइंट वह कंप्यूटर है जिसे आप सर्वर से नियंत्रित करना चाहते हैं। क्लाइंट पर एक छोटा बैकग्राउंड प्रोग्राम नेटवर्क पर, TCP पोर्ट 24800 पर सर्वर से कनेक्ट होता है, और निर्देशों की प्रतीक्षा करता है।
आप एक छोटा नक्शा भी बनाते हैं जो यह बताता है कि प्रत्येक स्क्रीन कहाँ स्थित है। मेरे मामले में Mac लैपटॉप के दाईं ओर है। जब तक पॉइंटर लैपटॉप की स्क्रीन पर रहता है, सब कुछ सामान्य रूप से काम करता है। जब पॉइंटर लैपटॉप स्क्रीन के दाहिने किनारे पर पहुँचता है, तो सर्वर लैपटॉप के प्रोग्रामों को इवेंट देना बंद कर देता है और इसके बजाय उन्हें Mac पर भेजना शुरू कर देता है। Mac पर मौजूद क्लाइंट तब उन इवेंट्स को स्थानीय रूप से इंजेक्ट करता है, मानो कीबोर्ड और माउस Mac में ही जुड़े हों। पॉइंटर को Mac के बाएँ किनारे से बाहर ले जाएँ और नियंत्रण वापस लैपटॉप पर आ जाता है।
तीन चीजें जो Deskflow नहीं करता है, ताकि आप उनसे अपेक्षा न करें:
- यह आपको दूसरे कंप्यूटर की स्क्रीन नहीं दिखाता है। यदि Mac में कोई मॉनिटर नहीं है, तब भी पॉइंटर एक ऐसी स्क्रीन पर चला जाता है जो केवल सॉफ्टवेयर में मौजूद होती है। आप वहाँ क्या कर रहे हैं यह देखने के लिए आपको एक मॉनिटर या स्क्रीन शेयरिंग टूल की आवश्यकता होगी।
- यह ड्रैग और ड्रॉप द्वारा फ़ाइलों को स्थानांतरित नहीं करता है। यह पॉइंटर, कीबोर्ड और क्लिपबोर्ड साझा करता है, और बस इतना ही।
- यह आपको लॉग इन नहीं कराता है। क्लाइंट प्रोग्राम का चल रहा होना आवश्यक है, और डिस्क एन्क्रिप्शन वाले Mac पर किसी को पहले लॉग इन करना होगा।
शुरुआत में मेरे पास क्या था
- सर्वर के रूप में दो मॉनिटरों के साथ Wayland पर GNOME डेस्कटॉप चलाने वाला एक Linux लैपटॉप। मैं इसे नाम दूँगा
laptop. - क्लाइंट के रूप में FileVault (डिस्क एन्क्रिप्शन) चालू वाला हालिया macOS चलाने वाला एक Mac mini। मैं इसे नाम दूँगा
macmini। इसमें कोई मॉनिटर नहीं है और मैं आमतौर पर इसका उपयोग केवल SSH के माध्यम से करता हूँ, इसलिए key-only SSH लॉगिन पहले से ही सेट थे। - दोनों पर Deskflow 1.27.0 पहले से इंस्टॉल था। Linux पर यह आया था एक
.debपैकेज से, और Mac पर यह Applications फ़ोल्डर में सामान्य एप्लिकेशन है। - दोनों मशीनें एक ही होम नेटवर्क पर हैं, और साथ ही Tailscale पर भी हैं, जो एक निजी नेटवर्क है और प्रत्येक मशीन को एक निश्चित पता देता है जो बदलता नहीं है।
- एक USB हब के माध्यम से लैपटॉप से जुड़ा एक कीबोर्ड और माउस।
मैं पूरी मार्गदर्शिका में प्लेसहोल्डर पतों का उपयोग करूँगा। 192.0.2.10 होम नेटवर्क पर लैपटॉप का पता है, और 100.64.0.10 Tailscale पर लैपटॉप का पता है। Mac का अपना पता, 192.0.2.20, कहीं भी टाइप करने की आवश्यकता नहीं है। इन्हें अपने पतों से बदलें।
शुरू करने से पहले: अपने हार्डवेयर को जानें
मैंने शुरुआत में कुछ मिनट यह पता लगाने में बिताए कि लैपटॉप में वास्तव में कौन सा कीबोर्ड और माउस था, क्योंकि मैं यह सुनिश्चित करना चाहता था कि भौतिक डिवाइस लैपटॉप पर हों, Mac पर नहीं। Linux बिना किसी अतिरिक्त सॉफ्टवेयर के आपको यह बता सकता है।
USB डिवाइसों की सूची देखें:
lsusb
lsusb -t
दूसरा कमांड एक ट्री प्रिंट करता है, जो दिखाता है कि कौन सा डिवाइस किस हब के पीछे स्थित है। मेरे मामले में दोनों वायरलेस रिसीवर (छोटे USB डोंगल जिनका उपयोग वायरलेस माउस और कीबोर्ड करते हैं) एक ही USB हब में प्लग किए गए थे, जो बदले में लैपटॉप में प्लग किया गया था।
Bluetooth डिवाइसों की सूची देखें और उनके विवरण पढ़ें:
bluetoothctl devices
bluetoothctl info AA:BB:CC:DD:EE:FF
bluetoothctl info यह दिखाता है कि कोई डिवाइस पेयर किया गया है, ट्रस्टेड है और वर्तमान में कनेक्टेड है या नहीं। मेरे कीबोर्ड ने तीन Bluetooth चैनलों का समर्थन किया, और यह एक चैनल पर लैपटॉप के साथ और दूसरे पर Mac के साथ पेयर था। यह एक उपयोगी फ़ॉलबैक है: यदि Deskflow कभी काम करना बंद कर देता है, तो कीबोर्ड पर एक बटन इसे दूसरे कंप्यूटर पर स्विच कर देता है।
यदि आपके पास दो डोंगल हैं और आप जानना चाहते हैं कि कौन सा माउस है, तो माउस हिलाते समय प्रत्येक डिवाइस द्वारा भेजे जाने वाले इवेंट्स को गिन सकते हैं। पहले डिवाइस के नाम खोजें:
ls -l /dev/input/by-id/
फिर एक डिवाइस को तीस सेकंड तक देखें और पॉइंटर इवेंट्स की गिनती करें:
sudo timeout 30 libinput debug-events --device /dev/input/event3 | grep -c POINTER
जिस डोंगल ने माउस हिलाते समय हज़ारों इवेंट्स उत्पन्न किए, वह माउस रिसीवर था। दूसरे ने कोई इवेंट उत्पन्न नहीं किया। यह Deskflow के लिए वैकल्पिक है, लेकिन कई USB रिसीवर वाली किसी भी Linux मशीन के लिए यह एक बढ़िया ट्रिक है।
चरण 1: सर्वर विंडो में एक मोड चुनें
मेरा पहला प्रयास कॉन्फ़िगरेशन फ़ाइलों को मैन्युअल रूप से लिखना और SSH पर कमांड लाइन से सर्वर शुरू करना था। Deskflow के इस संस्करण पर, सेटिंग्स फ़ाइल में स्क्रीन लेआउट मौजूद होते ही सर्वर सेगमेंटेशन फॉल्ट के साथ क्रैश हो गया। मैंने हेडलेस Qt प्लेटफॉर्म के साथ और उसके बिना भी कोशिश की, और परिणाम वही रहा। मैंने इससे जूझना बंद कर दिया और इसके बजाय ग्राफिकल विंडो का उपयोग किया।
जब मैंने विंडो खोली, तो Start बटन ग्रे था और विंडो में "You must select a mode" लिखा था। मैंने Deskflow को कभी यह नहीं बताया था कि यह कंप्यूटर सर्वर था। पहला विकल्प चुनें, जिसमें लिखा है "Use this computer's keyboard and mouse (make this computer the server)"। Configure Server बटन और एक सक्रिय Start बटन दिखाई देते हैं।
यदि आप कभी Start को निष्क्रिय (ग्रे) देखते हैं, तो पहले इसे जांचें। यह सबसे आम कारण है कि Start पर क्लिक करने से कुछ नहीं होता।
चरण 2: लेआउट तैयार करें
Configure Server पर क्लिक करें। बीच में आपके अपने कंप्यूटर के साथ एक ग्रिड दिखाई देता है। ऊपरी दाएँ कोने में एक मॉनिटर आइकन है। इसे ग्रिड पर खींचें, इसे उस तरफ रखें जहाँ दूसरा कंप्यूटर भौतिक रूप से स्थित है। मैंने इसे लैपटॉप के ठीक दाईं ओर वाले सेल में रखा।
नई स्क्रीन का नाम "Unnamed" है। इसकी सेटिंग्स खोलने के लिए इस पर डबल-क्लिक करें, और इसे वह नाम दें जिसका उपयोग क्लाइंट करेगा। नाम क्लाइंट के कंप्यूटर नाम से बिल्कुल मेल खाना चाहिए, जिसमें बड़े अक्षर और हाइफ़न शामिल हैं। मैंने इस्तेमाल किया macmini। आप मॉडिफ़ायर कीज़ और अन्य विकल्पों को जैसा है वैसा ही छोड़ सकते हैं। उस विंडो में Save पर क्लिक करें, फिर Configure Server विंडो में फिर से Save पर क्लिक करें।
फिर मुख्य विंडो में Start पर क्लिक करें। स्टेटस लाइन बदलकर "Deskflow is waiting for clients" हो जानी चाहिए।
चरण 3: सर्वर को अपने इनपुट को कैप्चर करने की अनुमति दें (Wayland)
Wayland डेस्कटॉप पर, प्रोग्रामों को पूरे सिस्टम के कीबोर्ड और माउस को पढ़ने की अनुमति तब तक नहीं होती जब तक कि डेस्कटॉप वातावरण ऐसा करने की अनुमति न दे। जब Deskflow सर्वर शुरू करता है तो GNOME एक प्रॉम्प्ट दिखाता है:
एक एप्लिकेशन इनपुट इवेंट्स कैप्चर करना चाहता है। Allow Remote Input Capturing।
स्विच चालू करें और Share पर क्लिक करें। यह वह अनुमति है जो Deskflow को आपके कीबोर्ड और माउस को पढ़ने की अनुमति देती है ताकि वह उन्हें आगे भेज सके। यदि आप इसे अस्वीकार करते हैं, तो सर्वर शुरू हो जाता है लेकिन कुछ भी क्लाइंट तक नहीं पहुँचता।
आप पुष्टि कर सकते हैं कि सर्वर चालू है और लिसनिंग स्थिति में है:
ss -ltn | grep 24800
आपको एक लाइन दिखनी चाहिए जिसमें 0.0.0.0:24800 लिसनिंग स्थिति में हो।
चरण 4: क्लाइंट को एक सर्टिफिकेट दें
Deskflow TLS के साथ कनेक्शन को एन्क्रिप्ट करता है, वही तकनीक जो वेब पेजों की सुरक्षा करती है। प्रत्येक पक्ष को एक सर्टिफिकेट की आवश्यकता होती है। सर्वर पहली बार चलने पर अपना सर्टिफिकेट स्वयं बनाता है। एक क्लाइंट जो केवल कमांड लाइन से ही चला है, उसके पास कोई सर्टिफिकेट नहीं होता, और जब मैंने इसे शुरू किया तो मुझे यह दिखा:
ERROR: secure socket error: tls certificate doesn't exist: .../Library/Deskflow/tls/deskflow.pem
ERROR: could not load client certificates
मैंने Mac पर सर्टिफिकेट बनाया opensslके साथ, जो वहाँ पहले से इंस्टॉल है:
mkdir -p ~/Library/Deskflow/tls && cd ~/Library/Deskflow/tls
openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
-subj "/CN=macmini" -keyout key.tmp -out cert.tmp
cat key.tmp cert.tmp > deskflow.pem && rm key.tmp cert.tmp
chmod 600 deskflow.pem
openssl x509 -in deskflow.pem -noout -fingerprint -sha256
Deskflow प्राइवेट की और सर्टिफिकेट को एक ही फ़ाइल में एक साथ रखने की अपेक्षा करता है, यही कारण है कि cat कमांड उन्हें जोड़ता है। फ़ाइल अनुमति 600 का अर्थ है कि केवल आपका अपना उपयोगकर्ता ही इसे पढ़ सकता है, जो महत्वपूर्ण है क्योंकि फ़ाइल में एक प्राइवेट की होती है। अंतिम कमांड सर्टिफिकेट का फ़िंगरप्रिंट प्रिंट करता है, एक छोटा कोड जो सर्टिफिकेट की पहचान करता है। इसे लिख लें। आप अगले चरण में इसकी तुलना करेंगे।
चरण 5: एक-दूसरे के फ़िंगरप्रिंट पर भरोसा करें
फ़िंगरप्रिंट एक ऐसे नेम टैग की तरह है जिसे जाली नहीं बनाया जा सकता। Deskflow ऐसे किसी कंप्यूटर से बात नहीं करेगा जिसके फ़िंगरप्रिंट पर भरोसा करने के लिए उसे नहीं कहा गया है। यही बात आपके नेटवर्क पर किसी अजनबी को आपके Mac होने का नाटक करने से रोकती है।
सर्वर साइड। जब क्लाइंट पहली बार कनेक्ट होता है, तो सर्वर "New client connecting" नामक एक विंडो दिखाता है। यह क्लाइंट के फ़िंगरप्रिंट की एक तस्वीर और हैश प्रदर्शित करता है। Show hash पर क्लिक करें, और इसकी तुलना उस फ़िंगरप्रिंट से करें जिसे आपने चरण 4 में लिखा था। केवल तभी Yes पर क्लिक करें यदि वे बिल्कुल समान हों। मेरे मामले में वे वर्ण-दर-वर्ण मेल खाते थे। आपके Yes पर क्लिक करने के बाद, सर्वर फ़िंगरप्रिंट को एक फ़ाइल में सहेजता है जिसका नाम है trusted-clients और यह इसके tls फ़ोल्डर के अंदर होती है।
क्लाइंट साइड। क्लाइंट को भी सर्वर पर भरोसा करना चाहिए। इसके बिना, क्लाइंट लॉग इससे भर जाता है:
WARNING: fingerprint does not match trusted fingerprint
ERROR: failed to verify server certificate fingerprint
आप Mac पर मौजूद एक फ़ाइल में सर्वर का फ़िंगरप्रिंट जोड़कर इसे ठीक कर सकते हैं, जिसका नाम है trusted-servers। पहले लैपटॉप पर फ़िंगरप्रिंट पढ़ें:
openssl x509 -in ~/.config/Deskflow/tls/deskflow.pem -noout -fingerprint -sha256
फिर, Mac पर, इसे लोअरकेस में, बिना कोलन के, लिखें और v2:sha256: प्रिफ़िक्स का उपयोग करें:
printf 'v2:sha256:<64 lowercase hex characters>\n' > ~/Library/Deskflow/tls/trusted-servers
chmod 600 ~/Library/Deskflow/tls/trusted-servers
जांचें कि पहले कुछ वर्ण सर्वर विंडो में दिखाए गए वर्णों से मेल खाते हैं, और इस जांच को न छोड़ें। यदि आप चाहें, तो ग्राफिकल क्लाइंट पहली बार स्क्रीन पर फ़िंगरप्रिंट की पुष्टि करने के लिए आपसे पूछ सकता है, जो यही काम करता है।
चरण 6: Deskflow को Mac को नियंत्रित करने की अनुमति दें
इस बिंदु पर क्लाइंट कनेक्ट हुआ और फिर तुरंत बंद हो गया। लॉग में कहा गया था:
INFO: connected to secure socket
WARNING: cursor may not be visible
ERROR: failed to create quartz event tap
FATAL: process is not trusted anymore, quitting
कनेक्शन और सर्टिफिकेट ठीक थे। macOS Deskflow को कीबोर्ड और माउस इवेंट पढ़ने और इंजेक्ट करने की अनुमति देने से इनकार कर रहा था। उस अनुमति को Accessibility कहा जाता है, और यह Privacy and Security के तहत System Settings में होती है।
यह वह कदम है जिसे आप SSH पर नहीं कर सकते। macOS उस सूची की सुरक्षा करता है, और इसे बदलने पर खाते का पासवर्ड माँगा जाता है। यहाँ तक कि व्यवस्थापक अधिकारों वाला उपयोगकर्ता भी कमांड लाइन से गोपनीयता डेटाबेस को संपादित नहीं कर सकता है, क्योंकि System Integrity Protection इसे ब्लॉक कर देता है। इसलिए आपको Mac की स्क्रीन पर देखना होगा, या तो मॉनिटर के साथ या Screen Sharing के माध्यम से, और आपको पासवर्ड स्वयं टाइप करना होगा।
यहाँ बताया गया है कि क्या करना है:
- System Settings खोलें, फिर Privacy and Security, फिर Accessibility।
- Mac पर Deskflow एप्लिकेशन लॉन्च करें। macOS तब "Deskflow would like to control this Mac" पूछता है और Deskflow को सूची में जोड़ता है, बंद स्थिति में।
- Deskflow को चालू करें। पूछे जाने पर खाते का पासवर्ड टाइप करें।
- यदि आप उसी क्षेत्र में Input Monitoring भी देखते हैं, तो जांचें कि यदि कीबोर्ड इनपुट Mac तक नहीं पहुँचता है तो Deskflow को वहाँ भी अनुमति दी गई है या नहीं।
SSH के साथ एक जाल
यदि आप SSH सत्र से Deskflow क्लाइंट शुरू करते हैं, तो macOS "Deskflow" को अनुमति माँगने वाले प्रोग्राम के रूप में नहीं देखता है। यह SSH सेवा को देखता है। Accessibility सूची में यह एक प्रविष्टि के रूप में दिखाई देता है जिसका नाम है sshd-keygen-wrapper। आप इसे चालू करने के लिए ललचा सकते हैं ताकि SSH द्वारा शुरू किया गया क्लाइंट काम करे। मैं इसके खिलाफ सलाह देता हूँ। इसे चालू करने से किसी भी SSH सत्र द्वारा शुरू की गई प्रत्येक प्रक्रिया को आपके कीबोर्ड को पढ़ने और आपके माउस को नियंत्रित करने की क्षमता मिल जाती है, जो ठीक उसी तरह की शक्ति है जिसे आप सौंपना नहीं चाहते हैं। इसके बजाय Deskflow एप्लिकेशन से क्लाइंट चलाएँ और उस एप्लिकेशन को अनुमति दें। यदि आपने रैपर (wrapper) को पहले ही चालू कर दिया है, तो इसे बंद कर दें। Deskflow काम करता रहता है क्योंकि इसकी अपनी प्रविष्टि है।
चरण 7: एप्लिकेशन से क्लाइंट शुरू करें
Mac पर Deskflow ऐप खोलें। "Use another computer's mouse and keyboard (make this computer the client)" चुनें। सुनिश्चित करें कि कंप्यूटर का नाम वही है जो स्क्रीन नाम आपने चरण 2 में दिया था। "Connect to" में, लैपटॉप का पता दर्ज करें, और Connect पर क्लिक करें। एक सफल शुरुआत दिखाती है:
INFO: connected to secure socket
INFO: server tls certificate info: /CN=Deskflow
INFO: local layouts: en
INFO: remote layouts: en
Deskflow is connected as client of 192.0.2.10
लैपटॉप पर आप दूसरी तरफ से इसकी पुष्टि इसके साथ कर सकते हैं:
ss -tn state established '( sport = :24800 )'
पीयर के रूप में Mac के एड्रेस वाली लाइन का मतलब है कि क्लाइंट कनेक्ट है। अब पॉइंटर को लैपटॉप के दाएँ किनारे से बाहर ले जाएँ और थोड़ी देर के लिए आगे बढ़ाते रहें। Deskflow स्विच करने से पहले किनारे पर लगभग एक-चौथाई सेकंड इंतज़ार करता है, ताकि बॉर्डर के पास काम करते समय आप गलती से पार न चले जाएँ।
स्टेप 8: सिर्फ़ Tailscale ही नहीं, होम नेटवर्क का उपयोग करें
मैंने पहले Mac को लैपटॉप के Tailscale एड्रेस पर पॉइंट किया, और यह तुरंत काम कर गया। Tailscale प्रत्येक मशीन को एक निश्चित एड्रेस देता है और एन्क्रिप्शन व रूटिंग को संभालता है, इसलिए कुछ और खोलने की ज़रूरत नहीं होती। लेकिन दोनों कंप्यूटर एक ही कमरे में हैं। होम नेटवर्क पर सीधे कनेक्शन में देरी (delay) कम होती है, और माउस मूवमेंट देरी के प्रति बहुत संवेदनशील होता है। इंटरनेट कनेक्शन बंद होने पर भी यह काम करता रहता है, जो मेरे घर में ख़राब मौसम के दौरान होता है।
इसलिए मैं होम नेटवर्क एड्रेस का उपयोग करना चाहता था, और कनेक्शन टाइम आउट हो गया। क्लाइंट लॉग में दिखा:
WARNING: failed to connect to server: cannot connect socket
WARNING: failed to connect to server: Timed out
दो अलग-अलग चीज़ें बाधा बन रही थीं।
macOS Local Network प्रॉम्प्ट
पहला संदेश, cannot connect socket, इसलिए दिखाई दिया क्योंकि macOS ने अभी तक Deskflow को लोकल नेटवर्क पर मौजूद डिवाइसों से संचार करने की अनुमति नहीं दी थी। पहली बार जब कोई एप्लिकेशन कोशिश करता है, तो macOS दिखाता है:
"Deskflow" को लोकल नेटवर्क पर डिवाइस ढूंढने की अनुमति दें?
Allow पर क्लिक करें। Tailscale एड्रेस इस प्रॉम्प्ट को ट्रिगर नहीं करते हैं, यही वजह है कि मैंने इसे कभी नहीं देखा था। यदि आप गलती से Don't Allow पर क्लिक कर देते हैं, तो आप इसे बाद में System Settings में Privacy and Security, फिर Local Network के अंतर्गत बदल सकते हैं।
Linux फ़ायरवॉल
मेरे Allow पर क्लिक करने के बाद, संदेश बदलकर Timed out. इससे पता चलता है कि पैकेट Mac से निकल तो रहे हैं लेकिन उनका कोई जवाब नहीं मिल रहा है। मैंने Mac से टेस्ट किया:
ping -c 2 192.0.2.10
nc -vz -G 4 192.0.2.10 24800
nc -vz -G 4 100.64.0.10 24800
पिंग काम कर रहा था, होम एड्रेस का पोर्ट टेस्ट टाइम आउट हो गया, और Tailscale एड्रेस का पोर्ट टेस्ट सफल रहा। यह पैटर्न सीधे लैपटॉप पर फ़ायरवॉल की ओर इशारा करता है। लैपटॉप इस्तेमाल कर रहा था ufw, जिसमें डिफ़ॉल्ट नियम "deny all incoming connections" था। Tailscale ट्रैफ़िक एक अलग नियम द्वारा स्वीकार किया जाता है, और यही वजह है कि Tailscale एड्रेस शुरू से ही काम कर रहा था।
आप नियमों को इससे देख सकते हैं:
sudo ufw status verbose
मैंने एक नियम जोड़ा जो Deskflow पोर्ट को केवल मेरे होम नेटवर्क के लिए खोलता है:
sudo ufw allow from 192.0.2.0/24 to any port 24800 proto tcp comment "Deskflow (LAN only)"
इसमें from 192.0.2.0/24 वाला भाग महत्वपूर्ण है। इसका मतलब है कि केवल आपके अपने होम नेटवर्क के कंप्यूटर ही पोर्ट तक पहुँच सकते हैं, पूरा इंटरनेट नहीं। जब तक आप जोखिम को न समझें, कभी भी इस तरह के पोर्ट को "Anywhere" के लिए न खोलें। रिमोट डेस्कटॉप और प्रिंटिंग के लिए मेरे लैपटॉप पर मौजूद अन्य नियम पहले से ही इसी पैटर्न का पालन करते थे, इसलिए यह उसमें सही बैठ गया।
कुछ ही सेकंड में कनेक्शन स्थापित हो गया। फिर Mac पर लॉग में Mac के होम एड्रेस से लैपटॉप के होम एड्रेस तक कनेक्शन दिखाई दिया।
क्लाइंट को दोनों एड्रेस देना
Deskflow सर्वरों की कॉमा-सेपरेटेड सूची स्वीकार करता है और उन्हें क्रम से आज़माता है। मैंने Mac के "Connect to" फ़ील्ड को इस पर सेट किया:
192.0.2.10,100.64.0.10
इसका मतलब है: पहले होम नेटवर्क आज़माएँ, और यदि वह काम न करे तो Tailscale पर फ़ॉलबैक करें। कॉमा के बाद स्पेस न दें। जब मैंने 192.0.2.10, 100.64.0.10 स्पेस के साथ टाइप किया, तो एप्लिकेशन ने बिना किसी सूचना के फ़ील्ड को खाली कर दिया और Connect बटन ने कुछ नहीं किया। सेटिंग्स फ़ाइल इस सूची को एक सिंगल कोटेड स्ट्रिंग के रूप में स्टोर करती है, और यह सामान्य है।
एक और सुझाव: लैपटॉप का होम एड्रेस आमतौर पर DHCP से आता है, इसलिए यह बदल सकता है। यदि ऐसा होता है, तो क्लाइंट Tailscale पर फ़ॉलबैक करता है। होम एड्रेस को स्थायी बनाने के लिए, अपने राउटर में लैपटॉप को एक निश्चित एड्रेस या रिज़र्वेशन दें।
स्टेप 9: क्लाइंट को अपने आप शुरू करें
एक ऐसा क्लाइंट जिसे आपको खुद शुरू करना पड़े, उस कंप्यूटर पर ज़्यादा काम का नहीं होता जिसे आप कभी छूते भी नहीं हैं। एप्लिकेशन को लॉगिन आइटम के रूप में जोड़ें। आप इसे System Settings में General, फिर Login Items के अंतर्गत कर सकते हैं। यदि आप कमांड पसंद करते हैं:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/Applications/Deskflow.app", hidden:false, name:"Deskflow"}'
फिर जाँचें कि क्लाइंट की सेटिंग्स फ़ाइल में दो सेटिंग्स मौजूद हैं, ~/Library/Deskflow/Deskflow.conf:
[core]
coreMode=1
computerName=macmini
[client]
remoteHost="192.0.2.10,100.64.0.10"
[gui]
startCoreWithGui=true
coreMode=1 का मतलब क्लाइंट है, startCoreWithGui=true का मतलब है "एप्लिकेशन शुरू होने पर कनेक्शन शुरू करें", और remoteHost में सर्वरों की सूची होती है। ऐप startCoreWithGui को खुद तब लिखता है जब वह कनेक्ट रहने के दौरान बंद होता है।
मैंने एप्लिकेशन से बाहर निकलकर और उसे फिर से लॉन्च करके इसका परीक्षण किया। लगभग पंद्रह सेकंड बाद क्लाइंट बिना किसी क्लिक के अपने आप कनेक्ट हो गया।
एक सीमा है। FileVault चालू होने पर, Mac रीस्टार्ट के बाद लॉगिन स्क्रीन पर किसी के लॉगिन करने तक आपके लॉगिन आइटम्स शुरू नहीं कर सकता। यदि आप किसी रिमोट Mac को रीस्टार्ट करते हैं, तो इस्तेमाल करें sudo fdesetup authrestart, जो Mac को रीस्टार्ट करता है और एक बार अपने आप साइन इन कर देता है, ताकि लॉगिन आइटम्स चल सकें।
कंप्यूटरों के बीच कैसे मूव करें
लैपटॉप के दाईं ओर Mac होने पर, इन दिशाओं का उपयोग करें:
- लैपटॉप से Mac पर जाने के लिए, पॉइंटर को लैपटॉप स्क्रीन के दाएँ किनारे से बाहर ले जाएँ।
- वापस आने के लिए, पॉइंटर को Mac स्क्रीन के बाएँ किनारे से बाहर ले जाएँ।
- यदि पॉइंटर स्विच नहीं होता है, तो Scroll Lock दबाएँ। डिफ़ॉल्ट रूप से Deskflow पॉइंटर को उसी कंप्यूटर पर लॉक करने के लिए Scroll Lock का उपयोग करता है जिस पर वह मौजूद है। इसे अनलॉक करने के लिए दोबारा दबाएँ।
- यदि लेआउट आपके अनुकूल नहीं है, तो इसे लैपटॉप पर Configure Server में बदलें। आप Mac को किसी भी तरफ, या ऊपर और नीचे रख सकते हैं।
सामने आई समस्याओं की एक तालिका
| जो आपको दिखाई देता है | इसका वास्तव में क्या अर्थ है | इसे कैसे ठीक किया गया |
|---|---|---|
| Start बटन ग्रे है, "You must select a mode" | कोई सर्वर या क्लाइंट विकल्प नहीं चुना गया है | विंडो में सर्वर विकल्प चुनें |
unknown computer name लेआउट फ़ाइल में |
इस संस्करण में स्क्रीन मुख्य सेटिंग्स फ़ाइल में रखी जाती हैं, लेआउट फ़ाइल में नहीं | सेटिंग्स में स्क्रीन परिभाषित करें या ग्राफिकल विंडो का उपयोग करें |
| शुरू होने पर सर्वर segmentation fault के साथ क्रैश हो जाता है | संस्करण 1.27.0 पर हेडलेस सर्वर में एक बग जब कोई लेआउट मौजूद हो | ग्राफिकल विंडो से सर्वर शुरू करें |
tls certificate doesn't exist |
क्लाइंट के पास कोई सर्टिफ़िकेट नहीं है | बनाएँ deskflow.pem इसके ज़रिए: openssl |
fingerprint does not match trusted fingerprint |
क्लाइंट अभी तक सर्वर पर भरोसा नहीं करता है | सर्वर फ़िंगरप्रिंट को इसमें जोड़ें: trusted-servers |
failed to create quartz event tap |
macOS Accessibility अनुमति मौजूद नहीं है | Mac की स्क्रीन पर जाकर Accessibility में Deskflow को चालू करें |
| Connect बटन कुछ नहीं करता, "Connect to" खाली है | सर्वर सूची में एक स्पेस है, या ऐप ने मान को खारिज कर दिया | इसे बिना स्पेस के दोबारा टाइप करें |
cannot connect socket होम नेटवर्क पर |
macOS Local Network अनुमति नहीं दी गई | प्रॉम्प्ट पर Allow पर क्लिक करें |
Timed out होम नेटवर्क पर लेकिन Tailscale काम करता है |
Linux फ़ायरवॉल होम नेटवर्क से पोर्ट को ब्लॉक करता है | एक ufw नियम केवल अपने होम नेटवर्क के लिए जोड़ें |
कुछ त्वरित जाँचें जो समय बचाती हैं
जब कोई चीज़ काम न करे तो इन्हें क्रम से चलाएँ। प्रत्येक जाँच एक प्रश्न का उत्तर देती है।
- क्या सर्वर चल रहा है?
ss -ltn | grep 24800सर्वर पर चलाएँ। कोई लाइन न आने का मतलब है कि यह लिसन नहीं कर रहा है। - क्या क्लाइंट चल रहा है? Mac पर, एक
deskflow-core clientप्रोसेस देखें। - क्या क्लाइंट सर्वर तक पहुँच सकता है? इस्तेमाल करें
nc -vz <server address> 24800क्लाइंट से। टाइमआउट नेटवर्क या फ़ायरवॉल की ओर इशारा करता है। कनेक्शन रिफ़्यूज़ होने का मतलब है कि कुछ भी लिसन नहीं कर रहा है। - क्या क्लाइंट का लॉग सर्टिफ़िकेट, फ़िंगरप्रिंट या अनुमतियों के बारे में शिकायत कर रहा है? वे संदेश बहुत विशिष्ट होते हैं, और ऊपर दी गई तालिका उन संदेशों को कवर करती है जो मैंने देखे थे।
- क्या पॉइंटर लॉक है? Scroll Lock एक बार दबाएँ और फिर से कोशिश करें।
निष्कर्ष
Deskflow एक बार चालू होने के बाद अच्छी तरह से काम करता है, लेकिन इसका सेटअप मुख्य रूप से अनुमतियों और भरोसे (trust) के बारे में है, न कि स्वयं प्रोग्राम के बारे में। एक मोड चुनें, लेआउट तैयार करें, क्लाइंट को एक सर्टिफ़िकेट दें, दोनों तरफ़ फ़िंगरप्रिंट पर भरोसा करें, Mac की अपनी स्क्रीन पर macOS अनुमतियाँ दें, केवल अपने होम नेटवर्क के लिए फ़ायरवॉल खोलें, और एप्लिकेशन को लॉगिन आइटम के रूप में जोड़ें। इन्हें क्रम से करें और कर्सर Linux लैपटॉप और हेडलेस Mac के बीच आसानी से आर-पार चला जाता है। मैंने जो अधिकांश समय गंवाया, वह उन संदेशों पर बीता जो कनेक्शन की समस्या जैसे दिखते थे लेकिन वास्तव में अनुमति की समस्याएँ थीं, इसलिए लॉग संदेश को ध्यान से पढ़ना इससे सीखने वाली सबसे अच्छी आदत है।
लाभ
- मुफ़्त और ओपन सोर्स, दोनों कंप्यूटरों के लिए एक ही कीबोर्ड और माउस के साथ।
- TLS से एन्क्रिप्टेड, फ़िंगरप्रिंट जाँच के साथ ताकि कोई अजनबी कनेक्ट न हो सके।
- क्लिपबोर्ड शेयर करता है, इसलिए मशीनों के बीच कॉपी और पेस्ट काम करता है।
- होम नेटवर्क और Tailscale पर काम करता है, और फ़ॉलबैक एड्रेस जोड़ना आसान है।
- क्लाइंट लॉगिन पर अपने आप शुरू हो सकता है, इसलिए हेडलेस Mac पर ध्यान देने की ज़रूरत नहीं होती।
- कंप्यूटर के बहुत कम संसाधनों का उपयोग करता है।
कमियाँ
- कई अनुमतियाँ केवल Mac पर ही दी जा सकती हैं, रिमोटली नहीं, और उनके लिए अकाउंट पासवर्ड की ज़रूरत होती है।
- Wayland वाले Linux पर, ग्राफिकल सेटअप को अनुमति प्रॉम्प्ट की आवश्यकता होती है, और इस संस्करण पर कमांड-लाइन सर्वर मेरे लिए अविश्वसनीय था।
- यह दूसरे कंप्यूटर की स्क्रीन नहीं दिखाता है और न ही ड्रैग एंड ड्रॉप द्वारा फ़ाइलें ले जाता है।
- FileVault वाले Mac पर क्लाइंट तब तक शुरू नहीं होता जब तक रीस्टार्ट के बाद कोई लॉगिन न कर ले।
- त्रुटि संदेश नेटवर्क खराबी जैसे लग सकते हैं जबकि वे वास्तव में अनुमति की खामियाँ होते हैं, इसलिए समस्या का निदान करने में धैर्य की आवश्यकता होती है।
- सख्त फ़ायरवॉल के लिए एक नियम की आवश्यकता होती है, और एक गलत नियम आपके इरादे से ज़्यादा एक्सेस खोल सकता है।
सावधानी
यह लेख सीखने के उद्देश्य से है। प्रत्येक प्लेसहोल्डर एड्रेस, होस्टनेम और नाम को अपने विवरण से बदलें, और अपना वास्तविक सर्टिफ़िकेट, प्राइवेट की, फ़िंगरप्रिंट या पासवर्ड कभी साझा न करें। Deskflow, Linux और macOS संस्करणों के बीच सेटिंग्स स्क्रीन, प्रॉम्प्ट, फ़ाइल लोकेशन और कमांड नाम भिन्न हो सकते हैं, इसलिए किसी भी कदम पर निर्भर रहने से पहले अपने सिस्टम पर उसकी जाँच कर लें। फ़ायरवॉल पोर्ट केवल उन्हीं नेटवर्क के लिए खोलें जिन पर आप भरोसा करते हैं, और रिमोट-एक्सेस प्रोग्रामों को उनकी ज़रूरत से ज़्यादा अनुमति देने से बचें। किसी भी महत्वपूर्ण कार्य के लिए इसका उपयोग करने से पहले अपने सेटअप पर यहाँ किए गए प्रत्येक दावे को सत्यापित करें।
अक्सर पूछे जाने वाले प्रश्न
- क्या Deskflow ड्रैग एंड ड्रॉप द्वारा फ़ाइलें शेयर कर सकता है? — नहीं। यह पॉइंटर, कीबोर्ड और क्लिपबोर्ड शेयर करता है। फ़ाइलों के लिए, किसी कॉपी टूल का उपयोग करें जैसे कि
scp, कोई शेयर्ड फ़ोल्डर या कोई सिंक टूल। - मेरा कर्सर दूसरे कंप्यूटर पर क्यों नहीं जाता? — सामान्य कारणों में कोई मोड न चुना होना, क्लाइंट का कनेक्ट न होना, macOS अनुमति का मौजूद न होना, कर्सर का लॉक होना, या फ़ायरवॉल द्वारा पोर्ट 24800 को ब्लॉक किया जाना शामिल हैं। सर्वर और क्लाइंट लॉग दिखाते हैं कि कौन सा कारण है।
- क्लाइंट यह क्यों कहता है कि फ़िंगरप्रिंट मेल नहीं खाता? — क्लाइंट को अभी तक सर्वर पर भरोसा करने के लिए नहीं कहा गया है। वास्तविक फ़िंगरप्रिंट से तुलना करने के बाद, सर्वर के SHA-256 फ़िंगरप्रिंट को इसकी trusted-servers फ़ाइल में जोड़ें।
- क्या मुझे Mac पर Accessibility अनुमति की आवश्यकता है? — हाँ। इसके बिना macOS Deskflow को कीबोर्ड और माउस इवेंट पढ़ने या इंजेक्ट करने से रोकता है, और क्लाइंट कनेक्ट होने के तुरंत बाद बंद हो जाता है।
- क्या मैं SSH के ज़रिए macOS अनुमतियाँ दे सकता हूँ? — नहीं। गोपनीयता सेटिंग्स सिस्टम द्वारा सुरक्षित होती हैं और उनके लिए Mac की अपनी स्क्रीन पर या स्क्रीन शेयरिंग के माध्यम से अकाउंट पासवर्ड की आवश्यकता होती है।
- क्या Deskflow Tailscale पर काम करता है? — हाँ। क्लाइंट में सर्वर के Tailscale एड्रेस का उपयोग करें। जब दोनों मशीनें एक ही जगह पर हों तो होम-नेटवर्क एड्रेस तेज़ होता है, इसलिए इसे पहले सूचीबद्ध करें।
- क्या फ़ायरवॉल में पोर्ट 24800 खोलना सुरक्षित है? — केवल तभी यदि आप इसे अपने नेटवर्क तक सीमित रखते हैं, उदाहरण के लिए अपने होम सबनेट से अनुमति देने वाले नियम के साथ। इसे पूरे इंटरनेट के लिए न खोलें।
- मैं Mac से वापस Linux पर कैसे स्विच करूँ? — पॉइंटर को उस किनारे से बाहर ले जाएँ जो दूसरे कंप्यूटर की तरफ है। यदि यह स्विच नहीं होता है, तो Scroll Lock दबाएँ, जो कर्सर को किसी एक मशीन पर लॉक या अनलॉक करता है।
- क्या यह रीबूट के बाद अपने आप शुरू हो जाएगा? — यदि आप इसे लॉगिन आइटम के रूप में जोड़ते हैं और Mac लॉगिन करता है। FileVault के साथ, किसी को पहले लॉगिन करना होगा, या आप प्रमाणीकृत रीस्टार्ट (authenticated restart) के साथ रीस्टार्ट कर सकते हैं।
- क्या कनेक्शन एन्क्रिप्टेड है? — हाँ, TLS के साथ, और प्रत्येक पक्ष उस पर भरोसा करने से पहले दूसरे के फ़िंगरप्रिंट की जाँच करता है।
टैग
#deskflow #linux #macos #homelab #tailscale #kvm #wayland #sysadmin #remoteaccess #opensource
Docker Security Checklist
Lock down your containers from build to runtime — 29 practical controls covering images, runtime flags, secrets, and the daemon. Enter your email — you'll get the PDF instantly, plus new posts on Docker, Linux & security.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.