Login awtomatiku għal konferenzi Lync fuq Linux

Ħej Habr!

Għalija, din il-frażi hija simili għal hello world, peress li fl-aħħar wasalt għall-ewwel pubblikazzjoni tiegħi. Poġġejt dan il-mument mill-isbaħ għal żmien twil, peress li ma kien hemm xejn x'tikteb, u jien ukoll ma ridtx nirda 'xi ħaġa li kienet diġà ġiet miġbuda fuq mazz ta' drabi. B’mod ġenerali, għall-ewwel pubblikazzjoni tiegħi ridt xi ħaġa oriġinali, utli għal ħaddieħor u li jkun fiha xi tip ta’ sfida u soluzzjoni ta’ problemi. U issa nista' naqsam dan. Issa ejja nitkellmu dwar kollox fl-ordni.

Dħul

Kollox beda meta xi żmien ilu niżżilt Linux Mint fuq il-kompjuter tax-xogħol tiegħi. Ħafna nies probabbilment jafu li Pidgin bil-plugin Sipe huwa sostitut kompletament adattat għal Microsoft Lync (issa msejjaħ Skype għan-negozju) għal sistemi Linux. Minħabba l-ispeċifiċitajiet tax-xogħol tiegħi, spiss ikolli nipparteċipa f'konferenzi SIP, u meta kont ħaddiem tal-Windows, id-dħul f'konferenzi kien elementari: nirċievu stedina bil-posta, ikklikkja fuq il-link tal-login, u lesti biex immorru .

Meta taqleb għan-naħa skura tal-Linux, kollox sar kemmxejn aktar ikkumplikat: ovvjament, tista 'wkoll tidħol f'konferenzi f'Pidgin, iżda biex tagħmel dan għandek bżonn tagħżel l-għażla tal-konferenzi li tingħaqad fil-menu fil-proprjetajiet tal-kont SIP tiegħek u fit-tieqa li tiftaħ, daħħal link għall-konferenza jew daħħal l-isem tal-organizzatur u kunf id. U wara xi żmien bdejt naħseb: "huwa possibbli li b'xi mod tissimplifika dan?" Iva, inti tista 'tgħid, għaliex l-infern għandek bżonn dan? Nippreferi noqgħod fuq Windows u ma jonfoħli moħħi.

Pass 1: Riċerka

"Jekk ikollok xi kapriċċ f'rasek, ma tistax taqbadha b'zokk," qal Nekrasov fix-xogħol tiegħu "Who Living Well in Rus'."

Allura, ladarba l-ħsieb daħal f'rasi, wara xi żmien qamet l-ewwel idea għall-implimentazzjoni. Kollox deher sempliċi - għandek bżonn tinterċetta aċċess għal links meet.company.com/user/confid — installa proċess ta' applikazzjoni tal-web lokali fuq il-karozza tiegħek f'127.0.0.1 u f'/etc/hosts żid entrata statika għad-dominju tal-kumpanija li minnu tidħol fil-konferenza, billi tipponta lejn localhost. Sussegwentement, dan is-server tal-web irid jipproċessa l-link li wasal għalih u b'xi mod jittrasferih ġewwa Pidgin (ngħid mill-ewwel li f'dan l-istadju għadni ma kelli l-ebda idea kif nagħtih xejn). Is-soluzzjoni, ovvjament, tinxtamm qisha krozzi, imma aħna programmaturi, krozzi ma jibżgħux (shit).

Imbagħad, b'kumbinazzjoni, b'xi mod ftaħt il-link tal-istedina f'Google Chrome (u ġeneralment dejjem nuża Mozilla Firefox). U għas-sorpriża tiegħi, il-paġna web dehret kompletament differenti - ma kien hemm l-ebda formola biex tiddaħħal id-dejta tal-utent u immedjatament wara li daħlet fil-paġna kien hemm talba biex tiftaħ xi ħaġa permezz xdg-miftuħ. Biss għall-gost, nikklikkja "iva" u jidher messaġġ ta 'żball - il-link lync15:confjoin?url=https://meet.company.com/user/confid ma tistax tinfetaħ. Hmm. X'tip ta' xdg-open huwa dan u x'għandu bżonn biex jinfetħu links bħal dawn? Qari post-mortem tad-dokumentazzjoni żvela li huwa handler GUI li jgħin biex iħaddem applikazzjonijiet assoċjati jew bi protokolli għall-iskema uri jew b'tipi ta 'fajls speċifiċi. L-assoċjazzjonijiet huma kkonfigurati permezz ta 'mapping tat-tip mime. Allura naraw li qed inmexxu tfittxija għal applikazzjoni mqabbla għal skema uri msemmija lync15 u l-link tgħaddi lil xdg-open, li mbagħad, fit-teorija, għandu jgħaddiha lil xi applikazzjoni li hija responsabbli għal dan it-tip ta 'link. Li, ovvjament, m'għandniex fis-sistema tagħna. Jekk le, allura x'jagħmlu fid-dinja open source? Dak hu, aħna ser niktbuha aħna.

Immersjoni ulterjuri fid-dinja tal-Linux u speċjalment fl-istudju ta 'kif taħdem il-qoxra grafika (ambjent tad-desktop, DE), mill-mod, għandi Xfce fil-Linux Mint, uriet li l-applikazzjonijiet u t-tip mime assoċjat miegħu huma ġeneralment miktuba direttament f' fajls shortcut bl-estensjoni .desktop. Ukoll, għaliex le, noħloq shortcut sempliċi ta 'applikazzjoni, li għandha sempliċement tniedi script bash u toħroġ l-argument mgħoddi lilha lill-console, nipprovdi biss il-fajl shortcut innifsu:

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

Inniedi xdg-open mill-console, ngħaddi l-istess link li ġej mill-browser u... bummer. Għal darb'oħra tgħid li ma tistax tipproċessa l-link.

Kif jirriżulta, ma aġġornajtx id-direttorju tat-tipi mime assoċjati mal-applikazzjoni tiegħi. Dan isir bi kmand sempliċi:

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

li sempliċiment teditja l-fajl ~/.config/mimeapps.list.

Attentat numru 2 bis-sejħa xdg-open - u għal darb'oħra falliment. Xejn, id-diffikultajiet ma jbeżżgħuna, imma biss iqanqlu l-interess tagħna. U armati bil-qawwa kollha tal-bash (jiġifieri t-traċċar), aħna noqogħdu l-ewwel lejn id-debugging. Huwa importanti li wieħed jinnota hawnhekk li xdg-open huwa biss script shell.

bash -x xdg-open $url

L-analiżi tal-output wara t-traċċar isir ftit ċar li l-kontroll imbagħad jiġi trasferit exo-miftuħ. U dan huwa diġà fajl binarju u huwa aktar diffiċli li wieħed jifhem għaliex jirritorna kodiċi ta 'ritorn bla suċċess meta jgħaddi link għalih f'argument.

Wara li ħarist fl-intern ta 'xdg-open, sibt li janalizza diversi parametri ambjentali u jgħaddi l-kontroll aktar jew lil xi għodod għall-ftuħ ta' links ta 'fajls speċifiċi għal DE partikolari, jew għandu funzjoni ta' riżerva 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
}

Se ndaħħal malajr hawn hack żgħir b'analiżi tal-argument li għadda u jekk is-substring speċifiku tagħna jinsab hemm lync15:, allura aħna immedjatament tittrasferixxi l-kontroll għall-funzjoni open_generic.

Ipprova numru 3 u taħseb li ħadem? Iva, issa, ovvjament. Imma l-messaġġ ta' żball diġà nbidel, dan diġà huwa progress - issa kien qed jgħidli li l-fajl ma nstabx u f'forma ta' file kitebli l-istess link għadda bħala argument.

Din id-darba rriżulta li kien funzjoni is_file_url_or_path, li janalizza l-link tal-fajl mgħoddi lill-input: file:// jew il-mogħdija għall-fajl jew xi ħaġa oħra. U l-kontroll ma ħadimx b'mod korrett minħabba l-fatt li l-prefiss tagħna (skema url) għandu numri, u l-espressjoni regolari tiċċekkja biss is-sett ta 'karattri li jikkonsisti minn :alpha: tikek u sing. Wara li tikkonsulta l-istandard rfc3986 għal identifikatur tar-riżorsi uniformi Deher ċar li din id-darba Microsoft mhu qed tikser xejn (għalkemm kelli verżjoni bħal din). Il-klassi tal-karattri biss :alpha: fiha biss ittri tal-alfabett Latin. Malajr nibdel il-kontroll regolari għal alfanumeriku. Magħmul, int tal-għaġeb, kollox fl-aħħar jibda, il-kontroll wara li l-kontrolli kollha jingħataw lill-applikazzjoni tal-iskript tagħna, il-link tagħna tintwera fuq il-console, kollox huwa kif għandu jkun. Wara dan, nibda nissuspetta li l-problemi kollha b'exo-open huma wkoll minħabba l-validazzjoni tal-format tal-link minħabba n-numri fl-iskema. Biex nittestja l-ipoteżi, nibdel ir-reġistrazzjoni tat-tip mime tal-applikazzjoni għal skema biss lync u voila - kollox jaħdem mingħajr ma jingħeleb il-funzjoni open_xfce. Iżda dan mhu se jgħinna bl-ebda mod, għax il-paġna tal-web biex tidħol fil-konferenza toħloq link ma’ lync15.

Għalhekk, l-ewwel parti tal-vjaġġ tlestiet. Nafu kif ninterċettaw sejħa link u mbagħad jeħtieġ li b'xi mod tiġi pproċessata u mgħoddija ġewwa Pidgin. Sabiex nifhem kif taħdem internament meta ddaħħal dejta permezz ta 'link fil-menu "ingħaqad ma' konferenza", ikklonajt ir-repożitorju Git tal-proġett Sipe u rġajt lest biex nidħol fil-kodiċi. Imma mbagħad, fortunatament, ġejt attirat mill-iskripts fil-katalgu tikkontribwixxi/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-join-konferenza-ma-organizzatur-u-id.pl
  • sipe-call-phone-number.pl
  • SipeHelper.pm

Jirriżulta li l-plugin Sipe huwa disponibbli għall-interazzjoni permezz dbus (desktop bus) u ġewwa l-iskripts hemm eżempji ta 'tingħaqad ma' konferenza permezz ta 'link, jew permezz tal-isem tal-organizzatur u conf-id, jew tista' tibda sejħa permezz tas-sip . Dan huwa eżattament dak li konna neqsin.

Pass 2. L-implimentazzjoni ta' handler tal-autojoin

Peress li hemm eżempji lesti f'Pearl, iddeċidejt li nuża biss sipe-join-conference-with-uri.pl u timmodifikaha ftit biex taqbel lilek innifsek. Kapaċi nikteb bil-Pearl, għalhekk ma kkawża l-ebda diffikultajiet partikolari.

Wara li ttestja l-iskrittura separatament, ktibt is-sejħa tagħha fil-fajl lync.desktop. U kienet rebħa! Meta tidħol fil-paġna ta' tingħaqad tal-konferenza u tħalli xdg-open jaħdem, it-tieqa popup tal-konferenza minn Pidgin tinfetaħ awtomatikament. Kemm kont ferħan.
Imħeġġeġ mis-suċċess, iddeċidejt li nagħmel l-istess għall-browser prinċipali tiegħi, Mozilla Firefox. Meta tidħol permezz tal-volpi, tinfetaħ paġna għall-awtorizzazzjoni u fil-qiegħ nett hemm buttuna jissieħbu billi tuża komunikatur tal-uffiċċju. Kienet hi li ġibditli l-attenzjoni. Meta tikklikkja fuqha fil-browser, tmur fl-indirizz:

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

lilu ġentilment jgħidli li ma jafx jiftaħ u, forsi, m’għandix applikazzjoni assoċjata għal protokoll bħal dan. Ukoll, aħna diġà għaddejna minn dan.

Malajr nirreġistra l-applikazzjoni tal-iskript tiegħi wkoll għall-iskema uri Conf u... ma jiġri xejn. Il-browser ikompli jilmenta li m'hemm l-ebda applikazzjoni li tieħu ħsieb il-links tiegħi. F'dan il-każ, is-sejħa xdg-open mill-console b'parametri taħdem perfettament.

"Issettja custom protocol handler f'firefox" - Jien mort online b'din il-mistoqsija. Wara li għaddejt minn diversi diskussjonijiet dwar stackoverflow (u fejn inkunu mingħajru), jidher li nstabet it-tweġiba. Għandek bżonn toħloq parametru speċjali fil dwar: konfigurazzjoni (naturalment tissostitwixxi foo b'conf):

network.protocol-handler.expose.foo = false

Noħolquha, niftħu l-link u... l-ebda xortih bħal din. Il-browser, bħallikieku ma ġara xejn, jgħid li ma jafx l-applikazzjoni tagħna.

Qed naqra d-dokumentazzjoni uffiċjali dwar ir-reġistrazzjoni ta' protokoll minn Mozilla, hemm għażla li tirreġistra assoċjazzjonijiet fid-desktop gnome innifsu (li tissostitwixxi foo b'conf, ovvjament):

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

Nirreġistra, niftaħ il-browser... u għal darb'oħra d-daqna.

Hawn linja mid-dokumentazzjoni taqbadni l-għajn:

Id-darba li jmiss tikklikkja link ta' foo tat-tip ta' protokoll se tintalab b'liema applikazzjoni tiftaħha.

— Semyon Semenych
- Ahh

Aħna ma nikklikkjawx fuq il-link, iżda l-paġna tal-web sempliċement tbiddel window.location permezz ta' javascript. Nikteb fajl html sempliċi b'link għall-protokoll conf, iftaħ fil-browser, ikklikkja fuq il-link - Yos! Tinfetaħ tieqa li tistaqsi f'liema applikazzjoni għandna bżonn niftħu l-link tagħna, u hemm diġà għandna l-applikazzjoni tagħna Lync fil-lista - irreġistrajnaha onestament fil-modi kollha possibbli. Hemm fit-tieqa hemm checkbox "ftakar l-għażla u dejjem tiftaħ links fl-applikazzjoni tagħna", immarkaha, ikklikkja ok. U din hija t-tieni rebħa - tinfetaħ it-tieqa tal-konferenza. Fl-istess ħin, il-ftuħ tal-konferenzi jaħdem mhux biss meta tikklikkja fuq link, iżda wkoll meta tiċċaqlaq mill-paġna li tissieħeb li għandna bżonn għall-konferenza.

Imbagħad ikkontrollajt, tħassar il-parametri network.protocol-handler.expose.conf ma affettwa bl-ebda mod l-operat tal-protokoll f'Fox. Ir-rabtiet komplew jaħdmu.

Konklużjoni

I tellajt ix-xogħol kollu tiegħi fir-repożitorju GitHub; links għar-riżorsi kollha se jkunu fl-aħħar tal-artiklu.
Inkun interessat li nirċievi feedback minn dawk li jridu jużaw ix-xogħol tiegħi. Għandi immedjatament ninnota li għamilt l-iżvilupp kollu biss għas-sistema tiegħi Linux Mint, għalhekk xi distribuzzjonijiet jew desktops oħra jistgħu ma jaħdmux f'dik il-verżjoni. Jew aħjar, jien saħansitra kważi ċert minn dan, għax ippajjt funzjoni 1 biss f'xdg-open li tirrelata biss mad-DE tiegħi. Jekk trid iżżid appoġġ għal sistemi jew desktops oħra, iktebni pull requests fuq Github.

Il-proġett kollu ħa lejla biex jitlesta.

Referenzi:

Sors: www.habr.com

Żid kumment