लिनक्स पर Lync सम्मेलन में स्वचालित रूप से लॉग इन करना

नमस्कार, हेब्र!

मेरे लिए, यह वाक्यांश हैलो वर्ल्ड के समान है, क्योंकि मैं आखिरकार अपने पहले प्रकाशन के लिए मिला था। मैंने इस अद्भुत क्षण को लंबे समय तक स्थगित कर दिया, क्योंकि इसके बारे में लिखने के लिए कुछ भी नहीं था, लेकिन मैं यह भी चूसना नहीं चाहता था कि पहले से ही कई बार चूसा गया था। सामान्य तौर पर, मेरे पहले प्रकाशन के लिए मुझे कुछ मौलिक, दूसरों के लिए उपयोगी और किसी प्रकार की चुनौती और समस्या को हल करने की आवश्यकता थी। और अब मैं इसे साझा कर सकता हूं। अब, पहले चीजें पहले।

प्रविष्टि


यह सब इस तथ्य से शुरू हुआ कि कुछ समय पहले मैंने एक काम करने वाले कंप्यूटर पर खुद को लिनक्स मिंट रोल किया। बहुत से लोग शायद जानते हैं कि Sipe प्लगइन के साथ Pidgin लिनक्स सिस्टम के लिए Microsoft Lync (अब इसे व्यवसाय के लिए Skype कहा जाता है) के लिए पूरी तरह से उपयुक्त प्रतिस्थापन है। काम की बारीकियों के कारण, मुझे अक्सर घूंट सम्मेलनों में भाग लेना पड़ता है, और जब बेकर होता था, तो सम्मेलन का प्रवेश द्वार प्राथमिक था: हमें मेल द्वारा निमंत्रण मिलता है, लॉगिन लिंक पर क्लिक करें, हम अंदर तैयार हैं।

जब लिनक्स के अंधेरे पक्ष पर स्विच किया जाता है, तो चीजें थोड़ी जटिल हो जाती हैं: बेशक, सम्मेलन के लिए एक पिजिन प्रवेश है, लेकिन इसके लिए आपको अपने sip खाते के गुणों में मेनू से सम्मेलन में शामिल होने के विकल्प का चयन करने की आवश्यकता है और उस आयोजक का नाम खिड़की में खुलने या दर्ज करने के लिए एक लिंक डालें। और conf आईडी। और कुछ समय बाद मैं सोचने लगा: "क्या यह संभव है कि किसी तरह यह सरल हो?" हाँ, आप कहते हैं, आपको इसकी आवश्यकता क्यों थी, विंडोज पर बैठेंगे और मूंछ नहीं फोड़ेंगे।

चरण 1. अनुसंधान


"क्या फुसफुसा रहा है - यह सुर्खियों में जा रहा है - आपने उसे इसमें से नहीं हराया," - नेक्रासोव ने अपने काम में कहा "रूस में कौन अच्छी तरह से रह सकता है"।

इसलिए, जब से सोचा था कि सिर पर चोट लगी है, कुछ समय बाद कार्यान्वयन के लिए पहला विचार उत्पन्न हुआ। सब कुछ सरल लग रहा था - आपको कॉल करने के लिए मिलने की जरूरत है। एक सम्मेलन में लोकलहोस्ट की ओर इशारा करते हुए। इसके अलावा, इस वेब सर्वर को उस लिंक को संसाधित करना चाहिए जो किसी भी तरह से आया था और किसी भी तरह इसे पिजिन में स्थानांतरित कर दिया (मैं तुरंत कहूंगा कि इस स्तर पर मेरे पास कोई विचार नहीं है कि उसे इसे कैसे दिया जाए)। समाधान, निश्चित रूप से, बैसाखी की तरह खुशबू आ रही है, लेकिन हम प्रोग्रामर हैं, बैसाखी हमें डराता नहीं है (चीख़)।

फिर संयोग से मैंने किसी तरह Google क्रोम के निमंत्रण का लिंक खोला (और आमतौर पर मैं हमेशा मोज़िला फ़ायरफ़ॉक्स का उपयोग करता हूं)। और मेरे आश्चर्य के लिए, वेब पेज पूरी तरह से अलग दिख रहा था - कोई उपयोगकर्ता डेटा इनपुट फ़ॉर्म नहीं था और पृष्ठ में प्रवेश करने के तुरंत बाद xdg-open के माध्यम से कुछ खोलने का अनुरोध किया गया था। मस्ती के लिए, मैं "हाँ" पर क्लिक करता हूं और एक त्रुटि संदेश दिखाई देता है - लिंक lync15: confjoin? Url = https: //meet.company.com/user/confid नहीं खोला जा सकता है। हम्म। इस तरह के लिंक को खोलने के लिए किस तरह का xdg-open होता है और इसकी क्या आवश्यकता है? प्रलेखन को पढ़ने वाली एक शव परीक्षा से पता चला कि यह एक ग्राफिकल शेल हैंडलर है जो कि यूआरआई योजना या कुछ प्रकार की फ़ाइलों के लिए प्रोटोकॉल के साथ जुड़े अनुप्रयोगों को लॉन्च करने में मदद करता है। संघों को एक माइम-प्रकार मानचित्रण के माध्यम से कॉन्फ़िगर किया गया है। इसलिए, हम देखते हैं कि हम lync15 नाम के साथ uri स्कीम के लिए एक मैप किए गए एप्लिकेशन की खोज शुरू कर रहे हैं और लिंक को xdg-open में पास किया गया है, जो सिद्धांत रूप में इसे कुछ एप्लिकेशन को पास करना चाहिए जो इस प्रकार के लिंक के लिए जिम्मेदार है। जो हम, सिस्टम में नहीं है। और यदि नहीं, तो वे खुले स्रोत की दुनिया में कैसे करते हैं? यह सही है, हम इसे स्वयं लिखेंगे।

लिनक्स की दुनिया में आगे विसर्जन और विशेष रूप से इस बात के अध्ययन में कि ग्राफिकल शेल (डेस्कटॉप वातावरण, डीई) कैसे काम करता है, जिस तरह से मेरे पास लिनक्स मिंट में Xfce है, उसने दिखाया कि एप्लिकेशन और इससे जुड़े माइम-प्रकार आमतौर पर एक्सटेंशन के साथ शॉर्टकट फ़ाइलों में सीधे लिखे जाते हैं .desktop। ठीक है, क्यों नहीं, मैं एक सरल एप्लिकेशन शॉर्टकट बनाता हूं, जिसे बस बैश स्क्रिप्ट को चलाना चाहिए और कंसोल को दिए गए तर्क को आउटपुट करना चाहिए, मैं केवल शॉर्टकट फ़ाइल को ही दे दूंगा:

[Desktop Entry] Name=Lync Exec=/usr/local/bin/lync.sh %u Type=Application Terminal=false Categories=Network;InstantMessaging; MimeType=x-scheme-handler/lync15; 

मैं xdg-open को कंसोल से उसी लिंक से लॉन्च करता हूं जो ब्राउज़र और ... bummer से आता है। फिर वह कहता है कि वह लिंक को संसाधित नहीं कर सकता।

जैसा कि यह निकला, मैंने अपने आवेदन के साथ संबंधित माइम-प्रकार की निर्देशिका को अपडेट नहीं किया। यह एक साधारण आदेश के साथ किया जाता है:

 xdg-mime default lync.desktop x-scheme-handler/lync15 

जो बस ~ / .config / mimeapps.list फ़ाइल को संपादित करता है

Xdg- ओपन कॉल के साथ नंबर 2 का प्रयास करें - और फिर से विफलता। कुछ भी नहीं, कठिनाइयाँ हमें डराती नहीं हैं, बल्कि केवल ईंधन का ब्याज देती हैं। और बैश (यानी, ट्रेसिंग) की सारी शक्ति से लैस होकर, हम डिबगिंग में सिर झुकाते हैं। यहां यह ध्यान रखना महत्वपूर्ण है कि xdg-open केवल एक शेल स्क्रिप्ट है।

 bash -x xdg-open $url 

ट्रेसिंग के बाद आउटपुट का विश्लेषण करते हुए, यह थोड़ा स्पष्ट हो जाता है कि एक्सो-ओपन पर आगे नियंत्रण स्थानांतरित हो जाता है। और यह पहले से ही एक द्विआधारी फ़ाइल और समझ है कि यह एक असफल रिटर्न कोड क्यों देता है जब एक तर्क में एक लिंक को पारित करना पहले से ही अधिक कठिन है।

Xdg-open के अंदरूनी भाग के माध्यम से चलने के बाद, मुझे पता चला कि यह विभिन्न पर्यावरणीय मापदंडों का विश्लेषण करता है और किसी विशेष डीई के लिए विशेष रूप से फाइल / लिंक खोलने के लिए या तो कुछ टूलों पर नियंत्रण करता है, या इसे ओपन_जेनर फ़ंक्शन के रूप में कमबैक है

 open_xfce() { if exo-open --help 2>/dev/null 1>&2; then exo-open "$1" elif gio help open 2>/dev/null 1>&2; then gio open "$1" elif gvfs-open --help 2>/dev/null 1>&2; then gvfs-open "$1" else open_generic "$1" fi if [ $? -eq 0 ]; then exit_success else exit_failure_operation_failed fi } 

मैंने जल्दी से पारित तर्क के विश्लेषण के साथ यहां एक छोटी सी हैक काट दी, और यदि हमारा विशिष्ट विकल्प lync15 है , तो हम तुरंत ओपन_जेनरिक फ़ंक्शन पर नियंत्रण पास करते हैं।

नंबर 3 का प्रयास करें और आपको लगता है कि यह काम किया है? हाँ, अब कैसे। लेकिन त्रुटि संदेश पहले से ही बदल गया है, यह पहले से ही प्रगति है - अब उसने मुझे बताया कि फ़ाइल नहीं मिली और एक फ़ाइल के रूप में उसने मुझे लिखा बहुत तर्क के रूप में पारित लिंक।

इस बार, यह फ़ंक्शन is_file_url_or_path है , जो फ़ाइल फ़ाइल के लिंक का विश्लेषण करता है: // या फ़ाइल का पथ या कुछ और। और चेक ने इस तथ्य के कारण सही ढंग से काम नहीं किया कि हमारी उपसर्ग (url योजना) में नंबर हैं, और नियमित अभिव्यक्ति केवल एक वर्ण सेट के लिए जाँच की जाती है: अल्फा: अवधि और डैश। समान संसाधन पहचानकर्ता के लिए rfc3986 मानक से परामर्श करने के बाद , यह स्पष्ट हो गया कि इस बार Microsoft ने कुछ भी उल्लंघन नहीं किया (हालांकि मेरे पास ऐसा संस्करण था)। बस एक वर्ण वर्ग: अल्फा: में लैटिन वर्णमाला के केवल अक्षर होते हैं। मैं जल्दी से अल्फ़ान्यूमेरिक की नियमित जांच को बदल देता हूं। हो गया, आप रमणीय हैं, सब कुछ आखिरकार शुरू हो जाता है, हमारे स्क्रिप्ट एप्लिकेशन को सभी चेक दिए जाने के बाद नियंत्रण, हमारा लिंक कंसोल पर प्रदर्शित होता है, सब कुछ वैसा ही है जैसा कि यह होना चाहिए। उसके बाद, मुझे संदेह होने लगता है कि एक्सो-ओपन के साथ सभी समस्याएं भी आरेख में संख्याओं के कारण लिंक प्रारूप के सत्यापन के कारण होती हैं। परिकल्पना का परीक्षण करने के लिए, मैं आवेदन के माइम-प्रकार के पंजीकरण को सिर्फ लंक स्कीम और वायिला में बदल देता हूं - सब कुछ ओपन_एक्सफैस फ़ंक्शन को फिर से परिभाषित किए बिना काम करता है। लेकिन यह किसी भी तरह से हमारी मदद नहीं करेगा, क्योंकि सम्मेलन में प्रवेश करने के लिए वेब पेज lync15 के साथ लिंक बिल्कुल बनाता है।

तो, पथ का पहला भाग पूरा हो गया है। हम लिंक कॉल को इंटरसेप्ट कर सकते हैं और फिर हमें किसी तरह इसे प्रोसेस करने और पिजिन के अंदर पास करने की जरूरत है। "सम्मेलन में शामिल हों" मेनू में एक लिंक के माध्यम से डेटा दर्ज करते समय यह आंतरिक रूप से कैसे काम करता है, यह समझने के लिए, मैंने Sipe प्रोजेक्ट रिपॉजिटरी को क्लोन किया और फिर से कोड में गोता लगाने के लिए तैयार किया। लेकिन यहाँ, सौभाग्य से, मैं कंट्रीब्यूट / डबस / डायरेक्टरी में स्क्रिप्ट से आकर्षित हुआ:

  • sipe-join-conference-with-uri.pl
  • sipe-join-conference-with-organizer-and-id.pl
  • sipe-call-phone-number.pl
  • SipeHelper.pm

यह पता चलता है कि Sipe plugin dbus (डेस्कटॉप बस) के माध्यम से बातचीत के लिए उपलब्ध है और स्क्रिप्ट के अंदर एक लिंक के माध्यम से सम्मेलन में शामिल होने के सीधे उदाहरण हैं, या तो आयोजक के नाम और conf-id के माध्यम से, या आप जिप के माध्यम से कॉल शुरू कर सकते हैं। यह ठीक वही है जिसकी हमारे पास कमी थी।

चरण 2. ऑटो-जॉइन के लिए एक हैंडलर लागू करना


चूंकि मोती के लिए तैयार उदाहरण हैं, मैंने सिर्फ sipe-join-conference-with-uri.pl का उपयोग करने का फैसला किया और इसे अपने लिए थोड़ा संशोधित किया। मैं मोती में लिख सकता हूं, इसलिए इससे कोई विशेष कठिनाई नहीं हुई।

अलग से स्क्रिप्ट का परीक्षण करने के बाद, मैंने lync.desktop फ़ाइल में इसकी कॉल दर्ज की। और यह एक जीत थी! जब आप कॉन्फ़्रेंस में शामिल होने और xdg-open के लॉन्च की अनुमति के पृष्ठ में प्रवेश करते हैं, तो पिजिन से सम्मेलन की पॉप-अप विंडो अपने आप खुल जाती है। मैं कैसे आनन्दित हुआ।
सफलता से उत्साहित होकर, मैंने अपने मुख्य ब्राउज़र मोज़िला फ़ायरफ़ॉक्स के लिए भी ऐसा करने का फैसला किया। लोमड़ी के माध्यम से प्रवेश करते समय, प्राधिकरण के लिए एक पृष्ठ खुलता है और बहुत नीचे कार्यालय संचारक का उपयोग करते हुए एक सम्मिलित बटन होता है । उसने भी मेरा ध्यान आकर्षित किया। जब आप ब्राउज़र में इस पर क्लिक करते हैं, तो लिंक इस पर जाता है:

 conf:sip:{user};gruu;opaque=app:conf:focus:id:{conf-id}%3Frequired-media=audio 

जिस पर वह मुझसे कहता है कि वह नहीं जानता कि इसे कैसे खोला जाए और, शायद, मेरे पास इस तरह के प्रोटोकॉल के लिए एक संबद्ध एप्लिकेशन नहीं है। खैर हम पहले ही इसे पारित कर चुके हैं।

जल्दी से मेरे स्क्रिप्ट आवेदन भी uri- स्कीम conf और ... कुछ नहीं होता है के लिए रजिस्टर। ब्राउज़र यह शिकायत करना जारी रखता है कि कोई लिंक नहीं है जो मेरे लिंक को संसाधित करता है। उसी समय, मापदंडों के साथ xdg- खुले कंसोल से कॉल ठीक काम करता है।

"फ़ायरफ़ॉक्स में कस्टम प्रोटोकॉल हैंडलर सेट करें" - इस सवाल के साथ मैं ऑनलाइन चला गया। स्टैकओवरफ़्लो (और इसके बिना) पर कुछ चर्चाओं के बाद, ऐसा लगता है जैसे उत्तर मिला। आपको इसके बारे में एक विशेष पैरामीटर बनाने की आवश्यकता है : कॉन्फिग (निश्चित रूप से फ़ू को रिप्लेस करने के साथ):

 network.protocol-handler.expose.foo = false 

हम बनाएँ, लिंक खोलें और ... यह वहाँ नहीं था। ब्राउज़र, जैसे कि कुछ भी नहीं हुआ था, कहते हैं कि यह हमारे आवेदन को नहीं जानता है।

मैं मोज़िला के साथ प्रोटोकॉल को पंजीकृत करने के बारे में आधिकारिक दस्तावेज पढ़ता हूं, खुद को गनोम डेस्कटॉप में संघों को पंजीकृत करने का एक विकल्प है (निश्चित रूप से विश्वास के साथ फू की जगह):

 gconftool-2 -s /desktop/gnome/url-handlers/foo/command '/path/to/app %s' --type String gconftool-2 -s /desktop/gnome/url-handlers/foo/enabled --type Boolean true 

मैं पंजीकरण करता हूं, ब्राउज़र खोलें ... और फिर से दाढ़ी।

यहाँ दस्तावेज़ीकरण की एक पंक्ति आपकी नज़र को पकड़ती है:
अगली बार जब आप प्रोटोकॉल-प्रकार foo के लिंक पर क्लिक करेंगे, तो आपसे पूछा जाएगा कि इसे किस एप्लिकेशन के साथ खोलना है।

- वीर्य Semenych
- आह

हम लिंक पर क्लिक नहीं करते हैं, लेकिन बस वेब पेज जावास्क्रिप्ट के माध्यम से window.location परिवर्तन करता है। मैं conf प्रोटोकॉल के लिंक के साथ एक साधारण HTML फ़ाइल लिख रहा हूँ, इसे एक ब्राउज़र में खोलें, लिंक पर क्लिक करें - Yos! एक विंडो एक प्रश्न के साथ खुलती है जिसमें आपको हमारे लिंक को खोलने की आवश्यकता होती है और हमारे पास पहले से ही सूची में हमारे Lync अनुप्रयोग हैं - हमने इसे सभी संभावित तरीकों से ईमानदारी से पंजीकृत किया है। खिड़की में एक चेकमार्क है "पसंद को याद रखें और हमारे आवेदन में हमेशा लिंक खोलें", ध्यान दें, ठीक पर क्लिक करें। और यह दूसरी जीत है - सम्मेलन की खिड़की खुलती है। उसी समय, सम्मेलनों का उद्घाटन पहले से ही न केवल तब होता है जब आप लिंक पर क्लिक करते हैं, बल्कि सम्मेलन में शामिल होने के लिए वांछित पृष्ठ से स्विच करते समय भी।

तब मैंने जाँच की कि network.protocol-handler.expose.conf पैरामीटर को हटाना किसी भी तरह से लोमड़ी में प्रोटोकॉल ऑपरेशन को प्रभावित नहीं करता है। कड़ियाँ काम करती रहीं।

निष्कर्ष


मैंने अपनी सभी उपलब्धियां गिथब रिपॉजिटरी में अपलोड कर दीं, सभी संसाधनों के लिंक लेख के अंत में होंगे।
मेरे लिए उन लोगों से प्रतिक्रिया प्राप्त करना दिलचस्प होगा जो मेरी सर्वोत्तम प्रथाओं का उपयोग करना चाहते हैं। मुझे तुरंत यह कहना होगा कि मैंने अपने लिनक्स मिंट सिस्टम के लिए ही सब कुछ किया है, इसलिए कुछ अन्य वितरण या डेस्कटॉप उस संस्करण में काम नहीं कर सकते हैं। बल्कि, मैं इस बात से भी लगभग आश्वस्त हूं, क्योंकि मैंने xdg-open में केवल मेरे डे से संबंधित केवल 1 फ़ंक्शन को पैच किया है। यदि आप अन्य प्रणालियों या डेकोस्टोपोव के लिए समर्थन जोड़ना चाहते हैं, तो मुझे गितुब में एक पूल अनुरोध लिखें।

पूरी परियोजना के कार्यान्वयन में 1 शाम हुई।

संदर्भ:

Source: https://habr.com/ru/post/hi471434/


All Articles