Konekte otomatik nan konferans Lync sou Linux

Hey Habr!

Pou mwen, fraz sa a sanble ak bonjou mond, depi finalman mwen te rive nan premye piblikasyon mwen an. Mwen te sispann bèl moman sa a pou yon tan long, paske pa te gen anyen pou ekri sou, epi mwen tou pa t 'vle souse sou yon bagay ki te deja souse sou yon pakèt fwa. An jeneral, pou premye piblikasyon mwen an mwen te vle yon bagay orijinal, itil pou lòt moun epi ki gen kèk kalite defi ak rezoud pwoblèm. Epi kounye a mwen ka pataje sa a. Koulye a, ann pale sou tout bagay nan lòd.

Antre

Tout bagay te kòmanse lè kèk tan de sa mwen te telechaje Linux Mint sou òdinatè travay mwen an. Anpil moun pwobableman konnen ke Pidgin ak Plugin Sipe a se yon ranplasman konplètman apwopriye pou Microsoft Lync (kounye a yo rele Skype pou biznis) pou sistèm Linux. Akòz espesifik nan travay mwen an, mwen souvan oblije patisipe nan konferans SIP, epi lè mwen te yon travayè Windows, antre nan konferans yo te elemantè: nou resevwa yon envitasyon pa lapòs, klike sou lyen ki konekte, epi nou pare pou ale. .

Lè w chanje nan bò nwa Linux, tout bagay te vin yon ti jan pi konplike: nan kou, ou ka konekte tou nan konferans nan Pidgin, men pou w fè sa ou bezwen chwazi opsyon pou rantre nan konferans lan nan meni an nan pwopriyete kont SIP ou a ak nan fennèt la ki louvri, mete yon lyen ki mennen nan konferans lan oswa antre non òganizatè a ak konf id. Apre kèk tan, mwen te kòmanse panse: "Èske li posib senplifye sa a yon jan kanmenm?" Yeah, ou ta ka di, poukisa lanfè a ou bezwen sa a? Mwen ta pito chita sou Windows epi mwen pa soufle tèt mwen.

Etap 1: Rechèch

"Si ou gen kèk kapris nan tèt ou, ou pa ka frape li soti ak yon poto," Nekrasov te di nan travay li "Ki moun ki viv byen nan Ris '."

Se konsa, yon fwa panse a te antre nan tèt mwen, apre kèk tan premye lide pou aplikasyon an leve. Tout bagay te sanble senp - ou bezwen entèsepte aksè nan lyen meet.company.com/user/confid — enstale yon pwosesis aplikasyon entènèt lokal sou machin ou nan 127.0.0.1 ak nan /etc/hosts ajoute yon antre estatik pou domèn konpayi an kote ou antre nan konferans lan, lonje dwèt sou localhost. Apre sa, sèvè entènèt sa a dwe trete lyen ki te vin jwenn li epi yon jan kanmenm transfere li andedan Pidgin (mwen pral di touswit ke nan etap sa a mwen toujou pa te gen okenn lide ki jan yo bay li nan tout). Solisyon an, nan kou, odè tankou beki, men nou se pwogramasyon, beki pa fè nou pè (kaka).

Lè sa a, pa chans, mwen yon jan kanmenm louvri lyen envitasyon an nan Google Chrome (e anjeneral mwen toujou itilize Mozilla Firefox). Ak sipriz mwen, paj wèb la te sanble konplètman diferan - pa te gen okenn fòm pou antre done itilizatè yo epi imedyatman apre yo fin antre nan paj la te gen yon demann yo louvri yon bagay nan xdg-louvri. Jis pou amizan, mwen klike sou "wi" epi yon mesaj erè parèt - lyen lync15:confjoin?url=https://meet.company.com/user/confid pa ka louvri. Hmm. Ki kalite xdg-open sa a epi ki sa li bezwen pou lyen sa yo louvri? Yon lekti post-mortem nan dokiman an revele ke li se yon moun kap okipe GUI ki ede kouri aplikasyon ki asosye swa ak pwotokòl pou konplo a uri oswa ak kalite dosye espesifik. Asosyasyon yo konfigirasyon atravè kat mim-kalite. Se konsa, nou wè ke nou ap kouri yon rechèch pou yon aplikasyon matche pou yon konplo uri yo te rele lync15 epi lyen an pase nan xdg-open, ki Lè sa a,, nan teyori, ta dwe pase li nan kèk aplikasyon ki responsab pou kalite lyen sa a. Ki, nan kou, nou pa genyen nan sistèm nou an. Si ou pa, Lè sa a, ki sa yo fè nan mond lan sous louvri? Se vre, nou pral ekri li nou menm.

Pli lwen imèsyon nan mond lan nan Linux ak espesyalman nan etidye ki jan koki a grafik (anviwònman biwo, DE) travay, nan chemen an, mwen gen Xfce nan Linux Mint, te montre ke aplikasyon yo ak kalite mim ki asosye ak li yo anjeneral ekri dirèkteman nan dosye chemen kout ak ekstansyon .desktop. Oke, poukisa pa, mwen kreye yon rakoursi aplikasyon senp, ki ta dwe tou senpleman lanse yon script bash ak pwodiksyon agiman an pase nan li nan konsole a, mwen bay sèlman dosye rakoursi nan tèt li:

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

Mwen lanse xdg-open soti nan konsole a, pase menm lyen ki soti nan navigatè a ak ... bummer. Yon fwa ankò li di ke li pa ka trete lyen an.

Kòm li vire soti, mwen pa t 'mete ajou anyè a nan kalite mim ki asosye ak aplikasyon mwen an. Sa a se fè ak yon kòmandman senp:

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

ki tou senpleman edite fichye a ~/.config/mimeapps.list.

Eseye nimewo 2 ak apèl la xdg-open - epi ankò echèk. Pa gen anyen, difikilte pa fè nou pè, men sèlman alimenter enterè nou. Ak ame ak tout pouvwa a nan bash (sa vle di trase), nou plonje tèt premye nan debogaj. Li enpòtan sonje isit la ke xdg-open se jis yon script koki.

bash -x xdg-open $url

Analize pwodiksyon an apre trase li vin yon ti kras klè ke se kontwòl Lè sa a, transfere nan ekso-louvri. Ak sa a se deja yon dosye binè epi li pi difisil pou konprann poukisa li retounen yon kòd retounen san siksè lè yo pase yon lyen nan li nan yon agiman.

Èske w te gade nan entèn yo nan xdg-open, mwen te jwenn ke li analize divès paramèt anviwònman an ak pase kontwòl pi lwen swa nan kèk zouti pou louvri lyen dosye espesifik nan yon DE patikilye, oswa li gen yon fonksyon repli. ouvè_jenerik

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
}

Mwen pral byen vit entegre isit la yon ti Hack ak analiz de agiman ki te pase a epi si substring espesifik nou an sitiye la lync15:, Lè sa a, nou imedyatman transfere kontwòl nan fonksyon an ouvè_jenerik.

Eseye nimewo 3 epi ou panse li te travay? Wi, kounye a, nan kou. Men, mesaj erè a te deja chanje, sa a se deja pwogrè - kounye a li te di m 'ke dosye a pa te jwenn ak nan fòm nan yon dosye li te ekri m' menm lyen an pase kòm yon agiman.

Fwa sa a, li te tounen yon fonksyon is_file_url_or_path, ki analize lyen dosye a pase nan opinyon an: file:// oswa chemen an nan dosye a oswa yon lòt bagay. Ak chèk la pa t 'te travay kòrèkteman akòz lefèt ke prefiks nou an (konplo url) gen nimewo, ak ekspresyon regilye a sèlman tcheke seri a karaktè ki gen ladan: alfa: pwen ak tirè. Apre konsiltasyon estanda rfc3986 pou idantifyan resous inifòm Li te vin klè ke fwa sa a Microsoft pa vyole anyen (byenke mwen te gen tankou yon vèsyon). Jis klas karaktè :alpha: gen sèlman lèt alfabè Latin nan. Mwen byen vit chanje chèk regilye a nan alfanumerik. Fè, ou se etonan, tout bagay finalman kòmanse, kontwòl apre tout chèk yo bay aplikasyon script nou an, lyen nou an parèt sou konsole a, tout bagay se jan li ta dwe. Apre sa, mwen kòmanse sispèk ke tout pwoblèm yo ak exo-open yo tou akòz validation fòma lyen an akòz nimewo yo nan konplo a. Pou teste ipotèz la, mwen chanje enskripsyon kalite mim aplikasyon an pou jis yon konplo lync ak vwala - tout bagay ap travay san yo pa depase fonksyon open_xfce la. Men sa p ap ede nou nan okenn fason, paske paj wèb la pou antre nan konferans lan kreye yon lyen ak lync15.

Se konsa, premye pati nan vwayaj la te konplete. Nou konnen ki jan yo entèsepte yon apèl lyen ak Lè sa a, li bezwen yo dwe yon jan kanmenm trete ak pase andedan Pidgin. Yo nan lòd yo konprann ki jan li fonksyone andedan lè w ap antre done atravè yon lyen nan meni an "antre nan yon konferans", mwen klonaj depo Git nan pwojè Sipe a epi mwen te pare pou plonje nan kòd la ankò. Men, lè sa a, erezman, mwen te atire pa scripts yo nan katalòg la kontribisyon/dbus/:

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

Li sanble ke Plugin Sipe a disponib pou entèraksyon atravè dbus (otobis biwo) ak andedan scripts yo gen kèk egzanp sou rantre nan yon konferans atravè yon lyen, swa atravè non òganizatè a ak konf-id, oswa ou ka inisye yon apèl atravè sip. . Sa a se egzakteman sa nou te manke.

Etap 2. Aplike yon moun kap okipe autojoin

Depi gen egzanp ki pare nan Pearl, mwen deside jis itilize sipe-join-conference-with-uri.pl epi modifye li yon ti kras kostim tèt ou. Mwen ka ekri nan Pearl, kidonk li pa te lakòz okenn difikilte patikilye.

Apre tès script la separeman, mwen te ekri apèl li nan dosye a lync.desktop. Epi se te yon viktwa! Lè w ap antre nan paj rantre nan konferans lan epi pèmèt xdg-open kouri, fenèt popup konferans lan soti nan Pidgin ta louvri otomatikman. Ki jan mwen te kontan.
Ankouraje pa siksè a, mwen deside fè menm bagay la pou navigatè prensipal mwen an, Mozilla Firefox. Lè ou konekte nan rena a, yon paj pou otorizasyon ouvè ak anba a anpil gen yon bouton rantre nan lè l sèvi avèk kominikatè biwo. Se li menm ki te atire atansyon m. Lè ou klike sou li nan navigatè a, li ale nan adrès la:

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

ki jantiyès li di m ke li pa konnen ki jan yo louvri li e, petèt, mwen pa gen yon aplikasyon asosye pou yon pwotokòl konsa. Oke, nou te deja pase nan sa a.

Mwen byen vit anrejistre aplikasyon script mwen an tou pou konplo uri a konf epi... anyen pa rive. Navigatè a kontinye ap plenyen ke pa gen okenn aplikasyon ki okipe lyen mwen yo. Nan ka sa a, rele xdg-open soti nan konsole a ak paramèt travay parfe.

"Mete moun kap okipe pwotokòl koutim nan firefox" - Mwen te ale sou entènèt ak kesyon sa a. Apre yo fin pase plizyè diskisyon sou stackoverflow (ak ki kote nou ta ye san li), li sanble ke yo te jwenn repons lan. Ou bezwen kreye yon paramèt espesyal nan sou: config (nan kou ranplase foo ak conf):

network.protocol-handler.expose.foo = false

Nou kreye li, louvri lyen an epi... pa gen chans konsa. Navigatè a, kòm si pa gen anyen ki te rive, di ke li pa konnen aplikasyon nou an.

Mwen ap li dokiman ofisyèl sou anrejistreman yon pwotokòl soti nan Mozilla, gen yon opsyon pou anrejistre asosyasyon nan Desktop gnome tèt li (ranplase foo ak conf, nan kou):

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

Mwen anrejistre, louvri navigatè a... epi ankò bab la.

Isit la yon liy nan dokiman an kenbe je m ':

Pwochenn fwa ou klike sou yon lyen foo ki kalite pwotokòl y ap mande w ki aplikasyon pou w ouvri li.

— Semyon Semenych
- Ahh

Nou pa klike sou lyen an, men paj wèb la tou senpleman chanje window.location via javascript. Mwen ekri yon senp fichye html ak yon lyen nan pwotokòl la konf, ouvri li nan navigatè a, klike sou lyen an - Yos! Yon fenèt ouvè mande nan ki aplikasyon nou bezwen louvri lyen nou an, epi la nou deja gen aplikasyon Lync nou an nan lis la - nou onètman anrejistre li nan tout fason posib. Gen nan fenèt la yon kaz "sonje chwa a epi toujou louvri lyen nan aplikasyon nou an", make li, klike sou ok. Lè sa a se dezyèm viktwa a - fenèt la konferans ouvè. An menm tan an, ouvèti konferans travay pa sèlman lè ou klike sou yon lyen, men tou lè w ap deplase soti nan paj rantre nan nou bezwen nan konferans lan.

Lè sa a, mwen tcheke, efase paramèt network.protocol-handler.expose.conf pa t 'nan okenn fason afekte operasyon an nan pwotokòl la nan Fox. Lyen yo te kontinye travay.

Konklizyon

Mwen telechaje tout travay mwen an nan repozitwa GitHub la; lyen ki mennen nan tout resous yo pral nan fen atik la.
Mwen pral enterese nan resevwa fidbak nan men moun ki vle sèvi ak travay mwen an. Mwen ta dwe imedyatman sonje ke mwen te fè tout devlopman sèlman pou sistèm Linux Mint mwen an, kidonk kèk lòt distribisyon oswa Desktop pa ka travay nan vèsyon sa a. Oswa pito, mwen menm prèske sèten de sa a, paske mwen patched sèlman 1 fonksyon nan xdg-open ki gen rapò sèlman ak DE mwen an. Si ou vle ajoute sipò pou lòt sistèm oswa biwo, ekri m 'rale demann sou Github.

Tout pwojè a te pran 1 aswè pou konplete.

Lyen:

Sous: www.habr.com

Add nouvo kòmantè