Sjálfvirk innskráning á Lync ráðstefnur á Linux

Hæ Habr!

Fyrir mér er þessi setning í ætt við halló heimur, þar sem ég komst loksins að fyrstu útgáfunni minni. Ég frestaði þessu frábæra augnabliki í langan tíma, þar sem það var ekkert að skrifa um, og ég vildi heldur ekki sjúga á eitthvað sem hafði þegar verið sogað á fullt af sinnum. Almennt séð, fyrir fyrstu útgáfu mína, vildi ég eitthvað frumlegt, gagnlegt fyrir aðra og inniheldur einhvers konar áskorun og lausn vandamála. Og nú get ég deilt þessu. Nú skulum við tala um allt í röð.

Færslu

Þetta byrjaði allt með því að fyrir nokkru síðan sótti ég Linux Mint á vinnutölvuna mína. Margir vita líklega að Pidgin með Sipe viðbótinni er fullkomlega hentugur staðgengill fyrir Microsoft Lync (nú kallað Skype fyrir fyrirtæki) fyrir Linux kerfi. Vegna sérstakra vinnu minnar þarf ég oft að taka þátt í SIP ráðstefnum, og þegar ég var Windows starfsmaður var aðgangur að ráðstefnum grunnatriði: við fáum boð í pósti, smellum á innskráningartengilinn og við erum tilbúin að fara .

Þegar skipt var yfir í myrku hliðina á Linux varð allt eitthvað flóknara: auðvitað geturðu líka skráð þig inn á ráðstefnur í Pidgin, en til að gera þetta þarftu að velja þátt í ráðstefnumöguleika í valmyndinni í eiginleikum SIP reikningsins þíns og í glugganum sem opnast skaltu setja inn tengil á ráðstefnuna eða slá inn nafn skipuleggjanda og trúnaðarnúmer. Og eftir nokkurn tíma fór ég að hugsa: "er hægt að einfalda þetta einhvern veginn?" Já, þú gætir sagt, hvers vegna í fjandanum þarftu þetta?

Skref 1: Rannsóknir

„Ef þú færð einhverja duttlunga í hausnum geturðu ekki slegið það út með stiku,“ sagði Nekrasov í verki sínu „Who Lives Well in Rus“.

Svo þegar hugsunin kom upp í hausinn á mér, eftir nokkurn tíma kom upp fyrsta hugmyndin að útfærslu. Allt virtist einfalt - þú þarft að stöðva aðgang að tenglum meet.company.com/user/confid — settu upp staðbundið vefforritsferli á bílinn þinn á 127.0.0.1 og í /etc/hosts bættu við kyrrstæðum færslu fyrir fyrirtækislénið sem þú ferð inn á ráðstefnuna í gegnum og bendir á localhost. Næst verður þessi vefþjónn að vinna úr hlekknum sem kom á hann og einhvern veginn flytja hann inn í Pidgin (ég segi strax að á þessu stigi hafði ég ekki hugmynd um hvernig ég ætti að gefa honum hann). Lausnin lyktar auðvitað eins og hækjur, en við erum forritarar, hækjur hræða okkur ekki (shit).

Svo, fyrir tilviljun, opnaði ég einhvern veginn boðstengilinn í Google Chrome (og venjulega nota ég alltaf Mozilla Firefox). Og mér til undrunar leit vefsíðan allt öðruvísi út - það var ekkert form til að slá inn notendagögn og strax eftir að farið var inn á síðuna kom beiðni um að opna eitthvað í gegnum xdg-opinn. Til gamans smella ég á „já“ og villuboð birtast - ekki er hægt að opna hlekkinn lync15:confjoin?url=https://meet.company.com/user/confid. Hmm. Hvers konar xdg-open er þetta og hvað þarf það til að svona tenglar opnast? Lestur eftir mortem á skjölunum leiddi í ljós að það er GUI meðhöndlun sem hjálpar til við að keyra tengd forrit annað hvort með samskiptareglum fyrir uri kerfið eða með ákveðnum skráargerðum. Tengsl eru stillt í gegnum mime-gerð kortlagningu. Þannig að við sjáum að við erum að keyra leit að samsvarandi forriti fyrir uri kerfi sem heitir lync15 og hlekkurinn er sendur til xdg-open, sem þá, fræðilega séð, ætti að senda hann til einhvers forrits sem ber ábyrgð á þessari tegund af hlekkjum. Sem við erum auðvitað ekki með í kerfinu okkar. Ef ekki, hvað gera þeir þá í opnum uppspretta heimi? Það er rétt, við skrifum það sjálf.

Frekari niðurdýfing í heimi Linux og sérstaklega í því að læra hvernig grafíska skelin (skrifborðsumhverfi, DE) virkar, við the vegur, ég er með Xfce í Linux Mint, sýndi að forrit og mime-gerðin sem tengist því eru venjulega skrifuð beint í flýtivísaskrár með endingunni .desktop. Jæja, hvers vegna ekki, ég bý til einfalda forritsflýtileið, sem ætti einfaldlega að ræsa bash skriftu og gefa út rökin sem send eru til stjórnborðsins, ég útvega aðeins flýtileiðaskrána sjálfa:

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

Ég ræsi xdg-open frá stjórnborðinu, sendi sama tengil og kemur úr vafranum og... bömmer. Aftur segir það að það geti ekki unnið úr hlekknum.

Eins og það kemur í ljós, uppfærði ég ekki skrána yfir tengdar mime-gerðir með forritinu mínu. Þetta er gert með einfaldri skipun:

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

sem einfaldlega breytir skránni ~/.config/mimeapps.list.

Tilraun númer 2 með xdg-open kallinu - og aftur bilun. Ekkert, erfiðleikar hræða okkur ekki, heldur ýta aðeins undir áhuga okkar. Og vopnuð öllum krafti bash (þ.e.a.s. að rekja) kafum við á hausinn í villuleit. Það er mikilvægt að hafa í huga hér að xdg-open er bara skeljaforskrift.

bash -x xdg-open $url

Að greina úttakið eftir rakningu verður dálítið ljóst að stjórn er síðan flutt til exo-opið. Og þetta er nú þegar tvíundarskrá og það er erfiðara að skilja hvers vegna hún skilar misheppnuðum skilakóða þegar tengill á hana er send í rifrildi.

Eftir að hafa skoðað innra hluta xdg-open, komst ég að því að það greinir ýmsar umhverfisbreytur og sendir stjórnina frekar annaðhvort til einhverra verkfæra til að opna skráartengla sem eru sérstakir fyrir tiltekið DE, eða það hefur varaaðgerð 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
}

Ég mun fljótt setja hér inn lítið hakk með greiningu á samþykktum rökum og hvort sérstakur undirstrengur okkar er staðsettur þar lync15:, þá flytjum við stjórn strax yfir á aðgerðina open_generic.

Tilraun númer 3 og heldurðu að það hafi tekist? Já, nú auðvitað. En villuskilaboðin hafa þegar breyst, þetta er nú þegar framfarir - núna var hann að segja mér að skráin fyndist ekki og í formi skráar skrifaði hann mér sama tengil framhjá sem rök.

Að þessu sinni reyndist það vera fall is_file_url_or_path, sem greinir skráartengilinn sem er send í inntakið: file:// eða slóðina að skránni eða eitthvað annað. Og ávísunin virkaði ekki rétt vegna þess að forskeytið okkar (url skema) hefur tölur, og regluleg tjáning athugar aðeins stafasettið sem samanstendur af :alfa: punktum og strikum. Eftir að hafa ráðfært sig við rfc3986 staðalinn fyrir samræmdu auðkenni auðlinda Það varð ljóst að í þetta skiptið brýtur Microsoft ekki gegn neinu (þó ég hafi verið með slíka útgáfu). Bara stafaflokkurinn :alpha: inniheldur aðeins stafi í latneska stafrófinu. Ég breyti fljótt venjulegu ávísuninni í alfanumerískt. Búið, þú ert ótrúleg, allt byrjar loksins, stjórn eftir allar athuganir er gefin á handritaforritið okkar, hlekkurinn okkar birtist á stjórnborðinu, allt er eins og það á að vera. Eftir þetta fer mig að gruna að öll vandamálin með exo-open séu líka vegna staðfestingar á hlekkjasniðinu vegna númeranna í kerfinu. Til að prófa tilgátuna breyti ég mímu-gerð forritsins í bara kerfi lynx og voila - allt virkar án þess að hnekkja open_xfce aðgerðinni. En þetta mun ekki hjálpa okkur á nokkurn hátt, því vefsíðan til að komast inn á ráðstefnuna skapar tengil með lync15.

Þannig að fyrsta hluta ferðarinnar er lokið. Við vitum hvernig á að stöðva hlekksímtal og þá þarf að vinna úr því á einhvern hátt og senda það inni í Pidgin. Til þess að skilja hvernig það virkar innbyrðis þegar gögn eru slegin inn með hlekk í valmyndinni „Join a conference“, klónaði ég Git geymsluna í Sipe verkefninu og gerði mig tilbúinn til að kafa inn í kóðann aftur. En svo, sem betur fer, heillaðist ég af handritunum í vörulistanum framlag/dbus/:

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

Það kemur í ljós að Sipe viðbótin er fáanleg til samskipta í gegnum dbus (skrifborðsrútu) og inni í skriftunum eru dæmi um að ganga á ráðstefnu í gegnum tengil, annað hvort í gegnum nafn skipuleggjanda og conf-id, eða þú getur hringt í gegnum sip . Þetta er einmitt það sem okkur vantaði.

Skref 2. Innleiðing á sjálfvirka samþjöppun

Þar sem það eru tilbúin dæmi í Pearl ákvað ég að nota bara sipe-join-conference-with-uri.pl og breyttu því aðeins til að henta þér. Ég get skrifað í Pearl, svo það olli engum sérstökum erfiðleikum.

Eftir að hafa prófað handritið sérstaklega skrifaði ég kall þess inn í skrána lync.skrifborð. Og þetta var sigur! Þegar farið er inn á ráðstefnuþáttasíðuna og xdg-open er leyft að keyra, opnast sprettigluggi ráðstefnunnar frá Pidgin sjálfkrafa. Hvað ég gladdist.
Hvattur af velgengninni ákvað ég að gera slíkt hið sama fyrir aðalvafrann minn, Mozilla Firefox. Þegar þú skráir þig inn í gegnum refinn opnast síða fyrir heimild og neðst er hnappur taktu þátt með því að nota Office communicator. Það var hún sem vakti athygli mína. Þegar þú smellir á það í vafranum fer það á heimilisfangið:

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

sem hann segir mér vinsamlega að hann viti ekki hvernig á að opna hana og ef til vill er ég ekki með tengda umsókn um slíka siðareglur. Jæja, við höfum þegar gengið í gegnum þetta.

Ég skrái fljótt handritaforritið mitt líka fyrir uri kerfið conf og... ekkert gerist. Vafrinn heldur áfram að kvarta yfir því að það sé ekkert forrit sem sér um tenglana mína. Í þessu tilfelli virkar fullkomlega að hringja í xdg-open frá stjórnborðinu með breytum.

„Setja sérsniðna samskiptareglur í firefox“ - Ég fór á netið með þessa spurningu. Eftir að hafa farið í gegnum nokkrar umræður um stackoverflow (og hvar værum við án þess), virðist sem svarið hafi fundist. Þú þarft að búa til sérstaka breytu í um: config (að sjálfsögðu skipta foo út fyrir conf):

network.protocol-handler.expose.foo = false

Við búum til það, opnum hlekkinn og... engin slík heppni. Vafrinn, eins og ekkert hafi í skorist, segir að hann þekki ekki forritið okkar.

Ég er að lesa opinberu skjölin um að skrá samskiptareglur frá Mozilla, það er möguleiki á að skrá tengsl á gnome skjáborðið sjálft (sem skipta um foo fyrir conf, auðvitað):

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

Ég skrái mig, opna vafrann... og aftur skeggið.

Hér vekur athygli mína lína úr skjalinu:

Næst þegar þú smellir á tengil á samskiptareglugerð foo verðurðu beðinn um hvaða forrit á að opna það með.

— Semyon Semenych
- Ahh

Við smellum ekki á hlekkinn, heldur breytir vefsíðan einfaldlega window.location með javascript. Ég skrifa einfalda html skrá með tengli á conf protocol, opna hana í vafranum, smella á hlekkinn - Yos! Gluggi opnast þar sem spurt er í hvaða forriti við þurfum til að opna hlekkinn okkar og þar erum við þegar með Lync forritið okkar á listanum - við skráðum það heiðarlega á alla mögulega vegu. Þar í glugganum er gátreitur „mundu valið og opnaðu alltaf tengla í forritinu okkar“, merktu við hann, smelltu á OK. Og þetta er annar sigurinn - ráðstefnuglugginn opnast. Á sama tíma virkar opnun ráðstefnur ekki aðeins þegar þú smellir á hlekk, heldur einnig þegar þú færir þig af þátttökusíðunni sem við þurfum á ráðstefnunni.

Síðan athugaði ég, eyddi breytum network.protocol-handler.expose.conf hafði ekki á nokkurn hátt áhrif á virkni samskiptareglunnar í Fox. Tenglarnir héldu áfram að virka.

Ályktun

Ég hef hlaðið upp öllu verki mínu á GitHub geymsluna; tenglar á allar heimildir verða í lok greinarinnar.
Ég mun hafa áhuga á að fá viðbrögð frá þeim sem vilja nota vinnuna mína. Ég ætti strax að hafa í huga að ég gerði alla þróun aðeins fyrir Linux Mint kerfið mitt, þannig að sumar aðrar dreifingar eða skjáborð virka ekki í þeirri útgáfu. Eða réttara sagt, ég er jafnvel næstum viss um þetta, vegna þess að ég lagaði aðeins 1 fall í xdg-open sem tengist aðeins DE mínu. Ef þú vilt bæta við stuðningi fyrir önnur kerfi eða skjáborð, skrifaðu mér pull beiðnir á Github.

Allt verkefnið tók 1 kvöld að klára.

Tilvísanir:

Heimild: www.habr.com

Bæta við athugasemd