Kuingia kiotomatiki kwa mikutano ya Lync kwenye Linux

Habari Habr!

Kwangu mimi, kifungu hiki ni sawa na ulimwengu wa hello, kwani hatimaye nilipata uchapishaji wangu wa kwanza. Niliacha wakati huu mzuri kwa muda mrefu, kwani hakuna kitu cha kuandika, na pia sikutaka kunyonya kitu ambacho tayari kilikuwa kimenyonywa mara kadhaa. Kwa ujumla, kwa chapisho langu la kwanza nilitaka kitu asilia, chenye manufaa kwa wengine na kilicho na aina fulani ya changamoto na utatuzi wa matatizo. Na sasa naweza kushiriki hili. Sasa hebu tuzungumze juu ya kila kitu kwa utaratibu.

Entry

Yote ilianza wakati fulani uliopita nilipakua Linux Mint kwenye kompyuta yangu ya kazi. Watu wengi labda wanajua kuwa Pidgin iliyo na programu-jalizi ya Sipe ni mbadala inayofaa kabisa ya Microsoft Lync (sasa inaitwa Skype kwa biashara) kwa mifumo ya Linux. Kwa sababu ya maalum ya kazi yangu, mara nyingi hunilazimu kushiriki katika mikutano ya SIP, na nilipokuwa mfanyakazi wa Windows, kuingia kwenye mikutano ilikuwa ya msingi: tunapokea mwaliko kwa barua, bonyeza kwenye kiungo cha kuingia, na tuko tayari kwenda. .

Wakati wa kubadili upande wa giza wa Linux, kila kitu kilikuwa ngumu zaidi: kwa kweli, unaweza pia kuingia kwenye mikutano katika Pidgin, lakini ili kufanya hivyo unahitaji kuchagua chaguo la mkutano wa kujiunga kwenye menyu katika mali ya akaunti yako ya SIP na. katika dirisha linalofungua, ingiza kiungo cha mkutano au ingiza jina la mratibu na conf id. Na baada ya muda nilianza kufikiria: "inawezekana kwa njia fulani kurahisisha hii?" Ndio, unaweza kusema, kwa nini unahitaji hii? Ningependelea kukaa kwenye Windows na nisipige akili yangu.

Hatua ya 1: Utafiti

"Ikiwa utapata hisia katika kichwa chako, huwezi kuigonga kwa hisa," Nekrasov alisema katika kazi yake "Nani Anaishi Vizuri nchini Urusi".

Kwa hivyo, mara wazo likaingia kichwani mwangu, baada ya muda wazo la kwanza la utekelezaji likaibuka. Kila kitu kilionekana kuwa rahisi - unahitaji kukatiza ufikiaji wa viungo meet.company.com/user/confid β€” sakinisha mchakato wa maombi ya tovuti ya ndani kwenye gari lako kwa 127.0.0.1 na ndani /etc/hosts ongeza ingizo tuli la kikoa cha kampuni ambacho unaingiza kwenye mkutano, ukielekeza kwa mwenyeji wa ndani. Ifuatayo, seva hii ya wavuti lazima ishughulikie kiunga kilichoijia na kwa namna fulani ihamishe ndani ya Pidgin (Nitasema mara moja kwamba katika hatua hii bado sikuwa na wazo la kuipatia hata kidogo). Suluhisho, bila shaka, harufu ya mikongojo, lakini sisi ni waandaaji wa programu, magongo hayatutishi (shit).

Kisha, kwa bahati, kwa namna fulani nilifungua kiungo cha mwaliko kwenye Google Chrome (na kwa kawaida mimi hutumia Mozilla Firefox kila wakati). Na kwa mshangao wangu, ukurasa wa wavuti ulionekana tofauti kabisa - hakukuwa na fomu ya kuingiza data ya mtumiaji na mara baada ya kuingia kwenye ukurasa kulikuwa na ombi la kufungua kitu kupitia. xdg-wazi. Kwa kujifurahisha tu, ninabofya β€œndiyo” na ujumbe wa hitilafu unatokea - kiungo lync15:confjoin?url=https://meet.company.com/user/confid hakiwezi kufunguliwa. Hmm. Ni aina gani ya xdg-open hii na inahitaji nini ili viungo kama hivyo vifunguke? Usomaji wa hati baada ya maiti ulifunua kuwa ni kidhibiti cha GUI ambacho husaidia kuendesha programu zinazohusiana ama na itifaki za mpango wa uri au na aina maalum za faili. Mashirika yanasanidiwa kupitia ramani ya aina ya mime. Kwa hivyo tunaona kuwa tunatafuta programu inayolingana ya mpango wa uri unaoitwa lync15 na kiunga hupitishwa kwa xdg-wazi, ambayo basi, kwa nadharia, inapaswa kuipitisha kwa programu fulani ambayo inawajibika kwa aina hii ya kiunga. Ambayo, bila shaka, hatuna katika mfumo wetu. Ikiwa sivyo, basi wanafanya nini katika ulimwengu wa chanzo wazi? Hiyo ni kweli, tutaiandika wenyewe.

Kuzamishwa zaidi katika ulimwengu wa Linux na haswa katika kusoma jinsi ganda la picha (mazingira ya mezani, DE) hufanya kazi, kwa njia, nina Xfce kwenye Linux Mint, ilionyesha kuwa programu na aina ya mime inayohusishwa nayo kawaida huandikwa moja kwa moja ndani. faili za njia ya mkato zilizo na kiendelezi cha .desktop. Kweli, kwa nini sivyo, ninaunda njia ya mkato rahisi ya programu, ambayo inapaswa kuzindua tu hati ya bash na kutoa hoja iliyopitishwa kwake kwa koni, mimi hutoa faili ya njia ya mkato tu yenyewe:

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

Ninazindua xdg-open kutoka kwa koni, nikipitisha kiunga sawa kinachotoka kwa kivinjari na... bummer. Tena inasema kwamba haiwezi kusindika kiunga.

Kama ilivyotokea, sikusasisha saraka ya aina za mime zinazohusiana na programu yangu. Hii inafanywa kwa amri rahisi:

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

ambayo huhariri faili tu ~/.config/mimeapps.list.

Jaribio la nambari 2 na simu ya xdg-wazi - na tena kutofaulu. Hakuna chochote, ugumu haututishi, lakini huongeza tu maslahi yetu. Na tukiwa na uwezo wote wa bash (yaani kufuatilia), tunaingia kwenye utatuzi. Ni muhimu kutambua hapa kuwa xdg-open ni hati ya ganda tu.

bash -x xdg-open $url

Kuchambua pato baada ya kufuatilia inakuwa wazi kidogo kuwa udhibiti huhamishiwa exo-wazi. Na hii tayari ni faili ya binary na ni vigumu zaidi kuelewa ni kwa nini inarudi msimbo wa kurejesha ambao haukufanikiwa wakati wa kupitisha kiungo kwa hoja.

Baada ya kutazama mambo ya ndani ya xdg-open, niligundua kuwa inachambua vigezo anuwai vya mazingira na kupitisha udhibiti zaidi kwa zana zingine za kufungua viungo vya faili maalum kwa DE fulani, au ina kazi ya kurudi nyuma. open_generic

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
}

Nitapachika hapa haraka udukuzi mdogo na uchanganuzi wa hoja iliyopitishwa na ikiwa safu yetu maalum iko hapo lync15:, basi mara moja tunahamisha udhibiti kwenye kazi open_generic.

Jaribio namba 3 na unafikiri lilifanya kazi? Ndiyo, sasa, bila shaka. Lakini ujumbe wa makosa tayari umebadilika, hii tayari ni maendeleo - sasa alikuwa akiniambia kuwa faili haikupatikana na kwa namna ya faili aliniandikia kiungo sawa kilichopitishwa kama hoja.

Wakati huu iligeuka kuwa kazi ni_faili_url_au_njia, ambayo inachambua kiungo cha faili kilichopitishwa kwa ingizo: file:// au njia ya faili au kitu kingine. Na hundi haikufanya kazi ipasavyo kutokana na ukweli kwamba kiambishi awali chetu (mpango wa url) kina nambari, na usemi wa kawaida hukagua tu seti ya herufi inayojumuisha :alpha: nukta na vistari. Baada ya kushauriana na kiwango cha rfc3986 cha kitambulisho cha rasilimali sare Ilibainika kuwa wakati huu Microsoft haikiuki chochote (ingawa nilikuwa na toleo kama hilo). Darasa la wahusika tu :alpha: lina herufi za alfabeti ya Kilatini pekee. Mimi hubadilisha haraka hundi ya kawaida kuwa alphanumeric. Umemaliza, unashangaza, kila kitu kinaanza, udhibiti baada ya ukaguzi wote kutolewa kwa programu yetu ya hati, kiunga chetu kinaonyeshwa kwenye koni, kila kitu ni kama inavyopaswa kuwa. Baada ya hayo, ninaanza kushuku kuwa shida zote na exo-wazi pia ni kwa sababu ya uthibitisho wa muundo wa kiunga kwa sababu ya nambari kwenye mpango. Ili kujaribu nadharia, ninabadilisha usajili wa aina ya mime wa programu kuwa mpango tu lync na voila - kila kitu hufanya kazi bila kupindua kazi ya open_xfce. Lakini hii haitatusaidia kwa njia yoyote, kwa sababu ukurasa wa wavuti wa kuingia kwenye mkutano huunda kiunga na lync15.

Kwa hivyo, sehemu ya kwanza ya safari imekamilika. Tunajua jinsi ya kukatiza simu ya kiungo na kisha inahitaji kuchakatwa na kupitishwa ndani ya Pidgin. Ili kuelewa jinsi inavyofanya kazi ndani wakati wa kuingiza data kupitia kiungo kwenye menyu ya "jiunge na mkutano", nilitengeneza hazina ya Git ya mradi wa Sipe na nikawa tayari kupiga mbizi kwenye msimbo tena. Lakini basi, kwa bahati nzuri, nilivutiwa na maandishi kwenye orodha mchango/dbus/:

  • sipe-jiunge-mkutano-na-uri.pl
  • sipe-jiunge-mkutano-na-mratibu-na-id.pl
  • sipe-call-phone-number.pl
  • SipeHelper.pm

Inabadilika kuwa programu-jalizi ya Sipe inapatikana kwa mwingiliano kupitia dbus (basi ya mezani) na ndani ya hati kuna mifano ya kujiunga na mkutano kupitia kiunga, ama kupitia jina la mratibu na conf-id, au unaweza kuanzisha simu kupitia sip. . Hivi ndivyo tulivyokuwa tunakosa.

Hatua ya 2. Utekelezaji wa kidhibiti cha kujiunga kiotomatiki

Kwa kuwa kuna mifano iliyopangwa tayari katika Pearl, niliamua kutumia tu sipe-jiunge-mkutano-na-uri.pl na urekebishe kidogo ili kukufaa. Ninaweza kuandika kwa Lulu, kwa hivyo haikusababisha ugumu wowote.

Baada ya kujaribu maandishi kando, niliandika simu yake kwenye faili lync.desktop. Na ilikuwa ushindi! Wakati wa kuingiza ukurasa wa mkutano wa jiunge na kuruhusu xdg-open kuendesha, dirisha ibukizi la mkutano kutoka kwa Pidgin litafunguka kiotomatiki. Jinsi nilivyofurahi.
Nilitiwa moyo na mafanikio hayo, niliamua kufanya vivyo hivyo kwa kivinjari changu kikuu, Mozilla Firefox. Unapoingia kupitia mbweha, ukurasa wa idhini unafungua na chini kabisa kuna kifungo jiunge kwa kutumia mawasiliano ya ofisi. Yeye ndiye aliyenivutia. Unapobofya kwenye kivinjari, huenda kwa anwani:

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

ambayo ananiambia kwa fadhili kuwa hajui jinsi ya kuifungua na, labda, sina maombi yanayohusiana na itifaki kama hiyo. Kweli, tayari tumepitia haya.

Ninasajili haraka maombi yangu ya hati pia kwa mpango wa uri conf na ... hakuna kinachotokea. Kivinjari kinaendelea kulalamika kuwa hakuna programu inayoshughulikia viungo vyangu. Katika kesi hii, kupiga simu xdg-wazi kutoka kwa koni na vigezo hufanya kazi kikamilifu.

"Weka kidhibiti maalum cha itifaki kwenye firefox" - nilienda mtandaoni na swali hili. Baada ya kupitia majadiliano kadhaa juu ya stackoverflow (na tungekuwa wapi bila hiyo), inaonekana kama jibu lilipatikana. Unahitaji kuunda parameter maalum ndani kuhusu: config (kwa kweli kuchukua nafasi ya foo na conf):

network.protocol-handler.expose.foo = false

Tunaunda, fungua kiungo na ... hakuna bahati hiyo. Kivinjari, kana kwamba hakuna kilichotokea, kinasema kwamba haijui programu yetu.

Ninasoma hati rasmi juu ya kusajili itifaki kutoka Mozilla, kuna chaguo la kusajili vyama kwenye desktop ya gnome yenyewe (ikibadilisha foo na conf, kwa kweli):

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

Ninajiandikisha, fungua kivinjari ... na tena ndevu.

Hapa mstari kutoka kwa nyaraka unashika macho yangu:

Wakati mwingine unapobofya kiungo cha itifaki-aina ya foo utaulizwa ni programu gani ya kufungua nayo.

- Semyon Semenych
- Ah

Hatubofsi kiungo, lakini ukurasa wa wavuti hubadilisha tu window.location kupitia javascript. Ninaandika faili rahisi ya html na kiunga cha itifaki ya conf, fungua kwenye kivinjari, bonyeza kwenye kiungo - Yos! Dirisha linafungua kuuliza ni programu gani tunahitaji kufungua kiunga chetu, na hapo tayari tunayo ombi letu la Lync kwenye orodha - tuliisajili kwa uaminifu kwa njia zote zinazowezekana. Huko kwenye dirisha kuna kisanduku cha "kumbuka chaguo na ufungue viungo kila wakati kwenye programu yetu", weka alama, bonyeza sawa. Na huu ni ushindi wa pili - dirisha la mkutano linafungua. Wakati huo huo, mikutano ya ufunguzi haifanyi kazi tu unapobofya kiungo, lakini pia wakati wa kusonga kutoka kwa ukurasa wa kujiunga tunahitaji kwenye mkutano.

Kisha nikaangalia, nikifuta vigezo network.protocol-handler.expose.conf haikuathiri kwa njia yoyote uendeshaji wa itifaki katika Fox. Viungo viliendelea kufanya kazi.

Hitimisho

Nimepakia kazi yangu yote kwenye hazina ya GitHub; viungo vya rasilimali zote vitakuwa mwisho wa kifungu.
Nitapendezwa kupokea maoni kutoka kwa wale wanaotaka kutumia kazi yangu. Ninapaswa kutambua mara moja kuwa nilifanya maendeleo yote kwa mfumo wangu wa Linux Mint tu, kwa hivyo usambazaji au dawati zingine zinaweza kufanya kazi katika toleo hilo. Au tuseme, nina uhakika wa hili, kwa sababu nilibandika kitendakazi 1 tu kwenye xdg-open ambacho kinahusiana na DE yangu pekee. Ikiwa unataka kuongeza msaada kwa mifumo mingine au dawati, niandikie ombi la kuvuta kwenye Github.

Mradi mzima ulichukua saa 1 jioni kukamilika.

Marejeo:

Chanzo: mapenzi.com

Kuongeza maoni