Automatinis prisijungimas prie Lync konferencijų sistemoje Linux

Sveiki, Habr!

Man ši frazė yra panaši į sveiką pasaulį, nes pagaliau pasiekiau savo pirmąjį leidinį. Šią nuostabią akimirką atidėliojau ilgam, nes nebuvo apie ką rašyti, taip pat nenorėjau čiulpti to, kas jau buvo prisisiurbusi daugybę kartų. Apskritai pirmajai publikacijai norėjau kažko originalaus, naudingo kitiems ir turinčio kažkokių iššūkių bei problemų sprendimo. Ir dabar galiu tuo pasidalinti. Dabar pakalbėkime apie viską iš eilės.

Įrašas

Viskas prasidėjo, kai prieš kurį laiką į savo darbo kompiuterį atsisiunčiau Linux Mint. Daugelis tikriausiai žino, kad Pidgin su Sipe įskiepiu yra visiškai tinkamas Microsoft Lync (dabar vadinamas Skype for business) pakaitalas Linux sistemoms. Dėl darbo specifikos dažnai tenka dalyvauti SIP konferencijose, o kai buvau Windows darbuotoja, patekti į konferencijas buvo elementaru: gauname kvietimą paštu, paspaudžiame prisijungimo nuorodą ir jau ruošiamės. .

Perėjus į tamsiąją „Linux“ pusę, viskas tapo šiek tiek sudėtingesnė: žinoma, prie konferencijų galite prisijungti ir naudodami „Pidgin“, tačiau norėdami tai padaryti, savo SIP paskyros ypatybių meniu pasirinkite prisijungimo prie konferencijos parinktį ir atsidariusiame lange įterpkite nuorodą į konferenciją arba įveskite organizatoriaus pavadinimą ir konf id. Ir po kurio laiko pradėjau galvoti: „ar įmanoma tai kaip nors supaprastinti? Taip, galite sakyti, kam tau to reikia? Geriau sėdėsiu prie „Windows“ ir negalvoju.

1 žingsnis: tyrimas

„Jei tau į galvą šauna užgaida, tu negali jos išmušti kuolu“, – sakė Nekrasovas savo darbe „Kas gerai gyvena Rusijoje“.

Taigi, kai tik mintis į galvą šovė, po kurio laiko kilo pirmoji idėja įgyvendinti. Viskas atrodė paprasta – reikia perimti prieigą prie nuorodų meet.company.com/user/confid — įdiekite vietinės žiniatinklio programos procesą savo automobilyje 127.0.0.1 ir /etc/hosts pridėkite statinį įmonės domeno įrašą, per kurį įeinate į konferenciją, nurodantį localhost. Toliau šis žiniatinklio serveris turi apdoroti į jį atėjusią nuorodą ir kažkaip perkelti ją į Pidgin (iš karto pasakysiu, kad šiame etape dar neturėjau supratimo, kaip jam ją suteikti). Sprendimas, žinoma, kvepia ramentais, bet mes esame programuotojai, ramentai mūsų negąsdina (šūdas).

Tada atsitiktinai kažkaip atidariau kvietimo nuorodą „Google Chrome“ (ir dažniausiai visada naudoju „Mozilla Firefox“). Ir mano nuostabai, puslapis atrodė visiškai kitaip - nebuvo vartotojo duomenų įvedimo formos ir iškart įėjus į puslapį buvo prašymas ką nors atidaryti per xdg-open. Dėl malonumo paspaudžiu „taip“ ir pasirodo klaidos pranešimas – nuorodos lync15:confjoin?url=https://meet.company.com/user/confid atidaryti nepavyksta. Hmm. Kas tai per xdg-open ir ko jam reikia, kad tokios nuorodos atsidarytų? Pomirtinis dokumentų skaitymas atskleidė, kad tai yra GUI tvarkytuvas, padedantis paleisti susijusias programas su uri schemos protokolais arba su tam tikrais failų tipais. Asociacijos konfigūruojamos naudojant mime tipo atvaizdavimą. Taigi matome, kad ieškome atitinkamos programos, skirtos uri schemai, pavadintai lync15 ir nuoroda perduodama į xdg-open, kuri tada, teoriškai, turėtų perduoti ją kokiai nors programai, atsakingai už tokio tipo saitus. Ko, žinoma, neturime savo sistemoje. Jei ne, ką jie veikia atvirojo kodo pasaulyje? Teisingai, parašysime patys.

Tolesnis panardinimas į Linux pasaulį ir ypač tyrinėjant, kaip veikia grafinis apvalkalas (darbalaukio aplinka, DE), beje, turiu Xfce Linux Mint, parodė, kad programos ir su ja susijęs mime tipas dažniausiai rašomi tiesiogiai sparčiuosius failus su plėtiniu .desktop. Na, kodėl gi ne, aš sukuriu paprastą programos nuorodą, kuri turėtų tiesiog paleisti bash scenarijų ir išvesti jam perduotą argumentą į konsolę, pateikiu tik patį nuorodos failą:

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

Aš paleidžiu xdg-open iš konsolės, perduodu tą pačią nuorodą, kuri ateina iš naršyklės ir... bėda. Vėl sakoma, kad negali apdoroti nuorodos.

Kaip paaiškėjo, su savo programa neatnaujinau susijusių mime tipų katalogo. Tai atliekama naudojant paprastą komandą:

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

kuri tiesiog redaguoja failą ~/.config/mimeapps.list.

Bandymas numeris 2 su xdg-open skambučiu - ir vėl nesėkmė. Nieko, sunkumai mūsų negąsdina, o tik skatina mūsų susidomėjimą. Ir apsiginklavę visa bash (t. y. sekimo) galia, mes stačia galva nerime į derinimą. Čia svarbu pažymėti, kad xdg-open yra tik apvalkalo scenarijus.

bash -x xdg-open $url

Analizuojant išvestį po sekimo tampa aišku, kad tada valdymas perduodamas egzo-atviras. Ir tai jau yra dvejetainis failas ir sunkiau suprasti, kodėl jis grąžina nesėkmingą grąžinimo kodą, kai argumente perduoda nuorodą į jį.

Peržiūrėjęs xdg-open vidines dalis, sužinojau, kad jis analizuoja įvairius aplinkos parametrus ir toliau perduoda valdymą tam tikriems įrankiams, skirtiems atidaryti failų nuorodas, būdingas konkrečiam DE, arba turi atsarginę funkciją. 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
}

Greitai įterpsiu čia nedidelį įsilaužimą su priimto argumento analize ir ar ten yra mūsų konkreti poeilutė lync15:, tada iš karto perkeliame valdymą į funkciją open_generic.

3 bandymas ir, jūsų manymu, pavyko? Taip, dabar, žinoma. Bet klaidos pranešimas jau pasikeitė, tai jau progresas - dabar jis man pasakė, kad failas nerastas ir failo pavidalu parašė man ta pati nuoroda, perduota kaip argumentas.

Šį kartą tai pasirodė esanti funkcija is_file_url_or_path, kuri analizuoja į įvestį perduotą failo nuorodą: file:// arba kelią į failą ar dar ką nors. Ir patikrinimas neveikė tinkamai dėl to, kad mūsų priešdėlis (url schema) turi skaičius, o reguliarioji išraiška tikrina tik simbolių rinkinį, kurį sudaro :alpha: taškai ir brūkšniai. Pasikonsultavę su rfc3986 standartu vienodas išteklių identifikatorius Tapo aišku, kad šį kartą Microsoft nieko nepažeidžia (nors turėjau tokią versiją). Tik simbolių klasėje :alpha: yra tik lotyniškos abėcėlės raidės. Greitai pakeičiau įprastą čekį į raidinį ir skaičių. Padaryta, jūs nuostabūs, viskas pagaliau prasideda, kontrolė po visų patikrinimų mūsų scenarijaus programai, mūsų nuoroda rodoma konsolėje, viskas kaip turi būti. Po to pradedu įtarti, kad visos „exo-open“ problemos taip pat kyla dėl nuorodos formato patvirtinimo dėl skaičių schemoje. Norėdami patikrinti hipotezę, pakeičiau programos mime tipo registraciją į tik schemą "Lync ir voila – viskas veikia nepaisant open_xfce funkcijos. Bet tai mums niekaip nepadės, nes tinklalapis, skirtas patekti į konferenciją, sukuria nuorodą su lync15.

Taigi, pirmoji kelionės dalis baigta. Mes žinome, kaip perimti nuorodos skambutį, tada jį reikia kažkaip apdoroti ir perduoti Pidgin viduje. Kad suprasčiau, kaip tai veikia viduje, įvedant duomenis per nuorodą „prisijungti prie konferencijos“ meniu, klonavau Sipe projekto Git saugyklą ir vėl pasiruošiau pasinerti į kodą. Bet tada, laimei, mane patraukė kataloge esantys scenarijai contrib/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-join-conference-with-organizer-and-id.pl
  • sipe-skambinti-telefono numeris.pl
  • SipeHelper.pm

Pasirodo, Sipe įskiepis galimas sąveikai per dbus (darbalaukio magistralę), o scenarijų viduje yra pavyzdžiai, kaip prisijungti prie konferencijos per nuorodą, arba per organizatoriaus vardą ir konf-id, arba galite inicijuoti skambutį per sip. . Būtent to mums trūko.

2 veiksmas. Automatinio sujungimo tvarkyklės įdiegimas

Kadangi Pearl yra paruoštų pavyzdžių, nusprendžiau tiesiog naudoti sipe-join-conference-with-uri.pl ir šiek tiek pakeiskite, kad tiktų sau. Galiu rašyti Perlu, todėl ypatingų sunkumų tai nesukėlė.

Išbandęs scenarijų atskirai, jo iškvietimą įrašiau į failą lync.desktop. Ir tai buvo pergalė! Įeinant į prisijungimo prie konferencijos puslapį ir leidžiant paleisti xdg-open, konferencijos iššokantis langas iš Pidgin atsidarys automatiškai. Kaip aš apsidžiaugiau.
Sėkmės paskatintas nusprendžiau tą patį padaryti savo pagrindinėje naršyklėje „Mozilla Firefox“. Prisijungus per lapę, atsidaro autorizavimo puslapis ir pačiame apačioje yra mygtukas prisijunkite naudodami biuro komunikatorių. Ji buvo ta, kuri patraukė mano dėmesį. Kai spustelėsite jį naršyklėje, jis pateks į adresą:

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

į kurį jis man maloniai pasako, kad nemoka jo atidaryti ir, ko gero, neturiu susijusios programos tokiam protokolui. Na, mes jau tai išgyvenome.

Greitai užregistruoju savo scenarijaus programą ir uri schemai conf ir... nieko nevyksta. Naršyklė vis skundžiasi, kad nėra jokios programos, kuri tvarkytų mano nuorodas. Tokiu atveju xdg-open iškvietimas iš konsolės su parametrais veikia puikiai.

„Nustatyti tinkintą protokolo tvarkyklę „Firefox“ – prisijungiau prie šio klausimo. Išgyvenus keletą diskusijų apie stackoverflow (ir kur mes būtume be jo), panašu, kad atsakymas buvo rastas. Turite sukurti specialų parametrą about: config (žinoma, pakeičiant foo į conf):

network.protocol-handler.expose.foo = false

Sukuriame, atsidarome nuorodą ir... nesiseka. Naršyklė, lyg nieko nebūtų nutikę, sako, kad nežino mūsų programos.

Aš skaitau oficialią dokumentaciją dėl „Mozilla“ protokolo registravimo, yra galimybė užregistruoti asociacijas pačiame „gnome“ darbalaukyje (žinoma, pakeičiant „foo“ su conf):

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

Užsiregistruoju, atidarau naršyklę... ir vėl barzda.

Čia mano dėmesį patraukia eilutė iš dokumentacijos:

Kai kitą kartą spustelėsite protokolo tipo foo nuorodą, jūsų paklaus, su kuria programa ją atidaryti.

- Semjonas Semenychas
- Ak

Mes nespaudžiame nuorodos, bet tinklalapis tiesiog pakeičia window.location per javascript. Parašau paprastą html failą su nuoroda į conf protokolą, atidarau jį naršyklėje, paspaudžiu nuorodą - Yos! Atsidaro langas, kuriame klausiama, kurioje programoje turime atidaryti savo nuorodą, ir ten jau turime savo Lync programą sąraše – sąžiningai ją užregistravome visais įmanomais būdais. Ten lange yra žymimasis langelis „prisiminti pasirinkimą ir visada atidaryti nuorodas mūsų programoje“, pažymėkite jį, spustelėkite gerai. Ir tai jau antroji pergalė – atsidaro konferencijos langas. Tuo pačiu metu konferencijų atidarymas veikia ne tik paspaudus nuorodą, bet ir pereinant iš mums reikalingo prisijungimo puslapio į konferenciją.

Tada patikrinau, ištryniau parametrus network.protocol-handler.expose.conf neturėjo jokios įtakos protokolo veikimui Fox. Nuorodos veikė toliau.

išvada

Įkėliau visą savo darbą į „GitHub“ saugyklą; nuorodos į visus išteklius bus pateiktos straipsnio pabaigoje.
Man bus įdomu sulaukti atsiliepimų iš norinčių panaudoti mano darbus. Iš karto turėčiau pažymėti, kad visą kūrimą atlikau tik savo Linux Mint sistemai, todėl kai kurie kiti platinimai ar staliniai kompiuteriai gali neveikti šioje versijoje. Tiksliau sakant, esu tuo beveik tikras, nes pataisiau tik 1 xdg-open funkciją, kuri yra susijusi tik su mano DE. Jei norite pridėti palaikymą kitoms sistemoms ar staliniams kompiuteriams, parašykite man užklausas „Github“.

Viso projekto įgyvendinimas užtruko 1 vakarą.

Nuorodos:

Šaltinis: www.habr.com

Добавить комментарий