Awtomatikong pag-log in sa mga komperensya sa Lync sa Linux

Hoy Habr!

Alang kanako, kini nga hugpong sa mga pulong susama sa hello world, tungod kay sa katapusan nakaabot na ako sa akong unang publikasyon. Gibiyaan nako kini nga katingad-an nga higayon sa dugay nga panahon, tungod kay wala’y masulat bahin sa, ug dili usab ako gusto nga mosuyop sa usa ka butang nga nasuyop na sa daghang mga higayon. Sa kinatibuk-an, alang sa una nakong publikasyon gusto nako ang usa ka butang nga orihinal, mapuslanon sa uban ug adunay usa ka matang sa hagit ug pagsulbad sa problema. Ug karon mahimo nakong ipaambit kini. Karon atong hisgutan ang tanan sa pagkahan-ay.

entry

Nagsugod ang tanan sa dihang gi-download nako ang Linux Mint sa akong computer sa trabahoan. Daghang mga tawo tingali nahibal-an nga ang Pidgin nga adunay Sipe plugin usa ka hingpit nga angay nga kapuli sa Microsoft Lync (karon gitawag nga Skype alang sa negosyo) alang sa mga sistema sa Linux. Tungod sa mga detalye sa akong trabaho, kanunay kong kinahanglan nga moapil sa mga komperensya sa SIP, ug sa usa pa ako ka trabahante sa Windows, ang pagsulod sa mga komperensya elementarya: nakadawat kami usa ka imbitasyon pinaagi sa koreo, pag-klik sa link sa pag-login, ug andam na kami nga moadto .

Kung ang pagbalhin sa ngitngit nga bahin sa Linux, ang tanan nahimong labi ka komplikado: siyempre, mahimo ka usab mag-log in sa mga komperensya sa Pidgin, apan aron mahimo kini kinahanglan nimo nga pilion ang kapilian sa pag-apil sa komperensya sa menu sa mga kabtangan sa imong SIP account ug sa bintana nga moabli, isulod ang link sa conference o isulod ang ngalan sa organizer ug conf id. Ug pagkahuman sa pila ka panahon nagsugod ako sa paghunahuna: "Posible ba nga pasimplehon kini?" Oo, tingali moingon ka, nganong kinahanglan nimo kini? Mas gusto nako nga molingkod sa Windows ug dili maghuot sa akong hunahuna.

Lakang 1: Pagpanukiduki

"Kung adunay ka kapritso sa imong ulo, dili nimo kini matumba sa usa ka stake," ingon ni Nekrasov sa iyang trabaho nga "Who Lives Well in Rus'."

Busa, sa dihang ang hunahuna nasulod sa akong ulo, human sa pipila ka panahon ang unang ideya alang sa pagpatuman mitungha. Ang tanan ingon og yano - kinahanglan nimo nga mapugngan ang pag-access sa mga link meet.company.com/user/confid β€” pag-instalar ug lokal nga proseso sa aplikasyon sa web sa imong sakyanan sa 127.0.0.1 ug sa /etc/hosts makadugang ug static nga entry para sa domain sa kompanya diin ikaw mosulod sa komperensya, nga magtudlo sa localhost. Sunod, kinahanglan nga iproseso sa kini nga web server ang link nga moabut niini ug sa usa ka paagi ibalhin kini sa sulod sa Pidgin (Isulti ko dayon nga sa kini nga yugto wala pa ako nahibal-an kung giunsa kini ihatag). Ang solusyon, siyempre, baho sama sa crutches, apan kami mga programmer, ang crutches dili makahadlok kanamo (shit).

Unya, sa higayon, giablihan nako ang link sa imbitasyon sa Google Chrome (ug kasagaran kanunay nakong gigamit ang Mozilla Firefox). Ug sa akong katingala, ang panid sa web hingpit nga lahi - wala’y porma sa pagsulod sa datos sa tiggamit ug pagkahuman sa pagsulod sa panid adunay usa ka hangyo nga magbukas sa usa ka butang pinaagi sa xdg-open. Para lang sa kalingawan, gi-klik nako ang "oo" ug usa ka mensahe sa sayup ang makita - ang link lync15:confjoin?url=https://meet.company.com/user/confid dili maablihan. Hmm. Unsa kini nga klase sa xdg-open ug unsa ang kinahanglan niini aron maablihan ang ingon nga mga link? Usa ka post-mortem nga pagbasa sa dokumentasyon nagpadayag nga kini usa ka GUI handler nga makatabang sa pagpadagan sa mga kaubang aplikasyon bisan sa mga protocol alang sa uri scheme o uban sa piho nga mga tipo sa file. Ang mga asosasyon gi-configure pinaagi sa mime-type mapping. Mao nga nakita namon nga nagpadagan kami usa ka pagpangita alang sa usa ka gipares nga aplikasyon alang sa usa ka laraw sa uri nga ginganlag lync15 ug ang link gipasa sa xdg-open, nga unya, sa teorya, kinahanglan nga ipasa kini sa pipila ka aplikasyon nga responsable sa kini nga klase sa link. Nga, siyempre, wala sa atong sistema. Kung dili, nan unsa ang ilang gibuhat sa bukas nga gigikanan nga kalibutan? Husto, kita mismo ang magsulat niini.

Ang dugang nga pagpaunlod sa kalibutan sa Linux ug ilabi na sa pagtuon kung giunsa ang graphical shell (desktop environment, DE) nagtrabaho, sa paagi, ako adunay Xfce sa Linux Mint, nagpakita nga ang mga aplikasyon ug ang mime-type nga nalangkit niini kasagarang gisulat direkta sa shortcut nga mga file nga adunay extension nga .desktop. Aw, ngano nga dili, naghimo ako usa ka yano nga shortcut sa aplikasyon, nga kinahanglan nga maglansad lang usa ka script sa bash ug i-output ang argumento nga gipasa niini sa console, naghatag ra ako sa shortcut file mismo:

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

Gilunsad nako ang xdg-open gikan sa console, nga gipasa ang parehas nga link nga gikan sa browser ug ... bummer. Usab kini nag-ingon nga dili kini maproseso ang link.

Ingon nga kini nahimo, wala nako gi-update ang direktoryo sa kauban nga mga tipo sa mime sa akong aplikasyon. Gihimo kini sa usa ka yano nga sugo:

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

nga nag-edit lang sa file ~/.config/mimeapps.list.

Pagsulay sa numero 2 uban ang xdg-open nga tawag - ug usab kapakyasan. Wala, ang mga kalisud dili makapahadlok kanato, apan makapadasig lamang sa atong interes. Ug armado sa tanan nga gahum sa bash (ie pagsubay), kami nag-una sa pag-debug. Importante nga timan-an dinhi nga ang xdg-open kay shell script lang.

bash -x xdg-open $url

Ang pag-analisar sa output pagkahuman sa pagsubay kini mahimong usa ka gamay nga klaro nga ang kontrol gibalhin dayon sa exo-open. Ug kini usa na ka binary file ug mas lisud sabton kung ngano nga nagbalik kini usa ka dili malampuson nga code sa pagbalik kung gipasa ang usa ka link niini sa usa ka argumento.

Sa pagtan-aw sa mga internal nga xdg-open, akong nahibal-an nga kini nag-analisar sa nagkalain-laing mga parameter sa kalikopan ug gipasa ang kontrol sa dugang bisan sa pipila ka mga himan alang sa pag-abli sa mga link sa file nga espesipiko sa usa ka partikular nga DE, o kini adunay fallback function. 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
}

Dali nakong i-embed dinhi ang usa ka gamay nga hack nga adunay pag-analisar sa gipasa nga argumento ug kung ang among piho nga substring nahimutang didto lync15:, unya gibalhin dayon namo ang kontrol sa function open_generic.

Sulayi ang numero 3 ug sa imong hunahuna kini nagtrabaho? Oo, karon, siyempre. Apan ang mensahe sa sayup nausab na, kini nag-uswag na - karon gisultihan niya ako nga ang file wala makit-an ug sa porma sa usa ka file iyang gisulat kanako ang parehas nga link nga gipasa ingon usa ka argumento.

Niining higayona nahimo kini nga function is_file_url_or_path, nga nag-analisar sa link sa file nga gipasa sa input: file:// o ang agianan sa file o uban pa. Ug ang tseke wala molihok sa husto tungod sa kamatuoran nga ang among prefix (url scheme) adunay mga numero, ug ang regular nga ekspresyon nagsusi lamang sa set sa karakter nga gilangkuban sa : alpha: tuldok ug dashes. Human sa pagkonsulta sa rfc3986 nga sumbanan alang sa uniporme nga resource identifier Nahimong tin-aw nga niining higayona ang Microsoft wala’y paglapas sa bisan unsang butang (bisan kung ako adunay ingon nga bersyon). Ang klase lang sa karakter :alpha: adunay mga letra lang sa Latin nga alpabeto. Dali nakong giusab ang regular nga tseke sa alphanumeric. Nahuman, katingad-an ka, ang tanan sa katapusan nagsugod, kontrol pagkahuman gihatag ang tanan nga mga tseke sa among aplikasyon sa script, ang among link gipakita sa console, ang tanan ingon nga kini kinahanglan. Pagkahuman niini, nagsugod ako sa pagduda nga ang tanan nga mga problema sa exo-open tungod usab sa pag-validate sa format sa link tungod sa mga numero sa laraw. Aron sulayan ang pangagpas, akong giusab ang mime-type nga pagrehistro sa aplikasyon ngadto sa usa lamang ka laraw lync ug voila - ang tanan molihok nga wala’y pag-override sa open_xfce function. Apan dili kini makatabang kanamo sa bisan unsang paagi, tungod kay ang web page alang sa pagsulod sa komperensya nagmugna usa ka link sa lync15.

Busa, ang unang bahin sa panaw nahuman na. Nahibal-an namon kung giunsa ang pag-intercept sa usa ka link nga tawag ug unya kinahanglan kini nga maproseso ug ipasa sa sulod sa Pidgin. Aron masabtan kung giunsa kini paglihok sa sulod sa pagsulod sa datos pinaagi sa usa ka link sa menu nga "pag-apil sa usa ka komperensya", akong gi-clone ang Git repository sa proyekto sa Sipe ug nangandam sa pag-dive sa code pag-usab. Apan unya, maayo na lang, nadani ako sa mga script sa katalogo kontribusyon/dbus/:

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

Kini nahimo nga ang Sipe plugin magamit alang sa interaksyon pinaagi sa dbus (desktop bus) ug sa sulod sa mga script adunay mga pananglitan sa pag-apil sa usa ka komperensya pinaagi sa usa ka link, bisan pinaagi sa ngalan sa tig-organisar ug conf-id, o mahimo nimong sugdan ang usa ka tawag pinaagi sa sip . Mao gyud ni ang kulang namo.

Lakang 2. Pagpatuman ug autojoin handler

Tungod kay adunay andam nga mga pananglitan sa Pearl, nakahukom ko nga gamiton na lang sipe-join-conference-with-uri.pl ug usba kini gamay aron mohaum sa imong kaugalingon. Makasulat ako sa Pearl, mao nga wala kini hinungdan sa bisan unsang partikular nga mga kalisdanan.

Pagkahuman sa pagsulay sa script nga gilain, gisulat nako ang tawag niini sa file lync.desktop. Ug kini usa ka kadaugan! Kung mosulod sa panid sa pag-apil sa komperensya ug gitugotan ang xdg-open nga modagan, ang window sa popup sa komperensya gikan sa Pidgin awtomatiko nga maablihan. Nalipay ko.
Nadasig sa kalampusan, nakahukom ko nga buhaton ang parehas alang sa akong nag-unang browser, Mozilla Firefox. Kung nag-log in ka pinaagi sa fox, usa ka panid alang sa pagtugot maablihan ug sa pinakaubos nga bahin adunay usa ka buton pag-apil gamit ang office communicator. Siya ang nakakuha sa akong atensyon. Kung imong i-klik kini sa browser, moadto kini sa adres:

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

diin siya maluloton nga nagsulti kanako nga wala siya mahibal-an kung giunsa kini pag-abli ug, tingali, wala ako kauban nga aplikasyon alang sa ingon nga protocol. Aw, nakaagi na ta ani.

Girehistro dayon nako ang akong aplikasyon sa script alang usab sa laraw sa uri conf ug... walay mahitabo. Ang browser nagpadayon sa pagreklamo nga walay aplikasyon nga nagdumala sa akong mga link. Sa kini nga kaso, ang pagtawag sa xdg-open gikan sa console nga adunay mga parameter molihok nga hingpit.

"Ibutang ang kostumbre nga tigdumala sa protocol sa firefox" - Nag-online ako sa kini nga pangutana. Pagkahuman sa daghang mga diskusyon bahin sa stackoverflow (ug asa man kita kung wala kini), ingon og nakit-an ang tubag. Kinahanglan nimo nga maghimo usa ka espesyal nga parameter sa mahitungod sa: config (siyempre gipulihan ang foo sa conf):

network.protocol-handler.expose.foo = false

Gihimo namo kini, ablihan ang link ug ... walay ingon nga suwerte. Ang browser, ingon nga wala’y nahitabo, nag-ingon nga wala kini nahibal-an sa among aplikasyon.

Gibasa nako ang opisyal nga dokumentasyon sa pagrehistro sa usa ka protocol gikan sa Mozilla, adunay kapilian nga magparehistro sa mga asosasyon sa gnome desktop mismo (gipuli ang foo sa conf, siyempre):

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

Nagparehistro ako, giablihan ang browser ... ug pag-usab ang bungot.

Ania ang usa ka linya gikan sa dokumentasyon nga nakakuha sa akong mata:

Sa sunod higayon nga imong i-klik ang usa ka link sa protocol-type foo pangutan-on ka kung unsang aplikasyon ang ablihan niini.

β€” Semyon Semenych
- Ahh

Wala kami nag-klik sa link, apan ang web page nagbag-o lang sa window.location pinaagi sa javascript. Nagsulat ako usa ka yano nga html file nga adunay usa ka link sa conf protocol, ablihan kini sa browser, i-klik ang link - Yos! Nagbukas ang usa ka bintana nga nagpangutana kung asa nga aplikasyon kinahanglan namon ablihan ang among link, ug didto naa na kami sa among aplikasyon sa Lync sa lista - matinud-anon namon nga narehistro kini sa tanan nga posible nga mga paagi. Didto sa bintana adunay usa ka checkbox "hinumdomi ang kapilian ug kanunay nga ablihan ang mga link sa among aplikasyon", markahan kini, i-klik ang ok. Ug kini ang ikaduha nga kadaugan - gibuksan ang bintana sa komperensya. Sa parehas nga oras, ang pag-abli sa mga komperensya molihok dili lamang kung mag-klik ka sa usa ka link, apan usab kung mobalhin gikan sa panid sa pag-apil nga kinahanglan namon sa komperensya.

Dayon akong gisusi, gitangtang ang mga parameter network.protocol-handler.expose.conf wala sa bisan unsang paagi makaapekto sa operasyon sa protocol sa Fox. Ang mga link nagpadayon sa pagtrabaho.

konklusyon

Gi-upload nako ang tanan nakong trabaho sa GitHub repository; ang mga link sa tanan nga mga kapanguhaan anaa sa katapusan sa artikulo.
Interesado ko nga makadawat og feedback gikan niadtong gustong mogamit sa akong trabaho. Kinahanglan nakong timan-an dayon nga gibuhat nako ang tanan nga pag-uswag alang lamang sa akong Linux Mint nga sistema, aron ang ubang mga distribusyon o mga desktop mahimong dili molihok sa kana nga bersyon. O hinoon, halos sigurado ako niini, tungod kay akong gi-patch ang 1 nga function sa xdg-open nga may kalabutan lamang sa akong DE. Kung gusto nimong idugang ang suporta alang sa ubang mga sistema o desktop, isulat kanako ang mga hangyo sa pagbitad sa Github.

Ang tibuok proyekto niabot ug 1 ka gabii aron makompleto.

Mga reperensiya:

Source: www.habr.com

Idugang sa usa ka comment