Saioa automatikoki Linux-en Lync konferentziatan

Aupa Habr!

Niretzat, esaldi hau kaixo munduaren antzekoa da, azkenean nire lehen argitalpenera iritsi nintzen eta. Denbora luzez atzeratu nuen une zoragarri hau, ez baitzegoen ezer idazteko, eta, gainera, ez nuen zurrupatu nahi lehendik ere zurrupatua izan den zerbait. Orokorrean, nire lehen argitalpenerako zerbait originala nahi nuen, besteentzat erabilgarria eta nolabaiteko erronka eta arazoen ebazpena edukitzea. Eta orain hau parteka dezaket. Orain hitz egin dezagun dena ordenatuta.

Sarrera

Dena duela denbora pixka bat laneko ordenagailuan Linux Mint deskargatu nuenean hasi zen. Jende askok badaki Sipe pluginarekin Pidgin Microsoft Lync-en ordezko guztiz egokia dela (gaur egun Skype for business izenekoa) Linux sistemetarako. Nire lanaren berezitasunak direla eta, askotan SIP kongresuetan parte hartu behar izaten dut, eta Windows-eko langilea nintzenean, kongresuetan sartzea oinarrizkoa zen: postaz gonbidapena jasotzen dugu, saioa hasteko estekan klik egiten dugu eta prest gaude. .

Linux-en alde ilunera aldatzean, dena apur bat konplikatu zen: noski, Pidgin-en kongresuetan ere saioa dezakezu, baina horretarako zure SIP kontuaren propietateetako menuan sartu konferentzia aukera hautatu behar duzu eta irekitzen den leihoan, sartu hitzaldirako esteka edo idatzi antolatzailearen izena eta konf id. Eta denboraren buruan pentsatzen hasi nintzen: "posible al da hau nolabait sinplifikatzea?" Bai, esango zenuke zergatik demontre behar duzu hau? Nahiago dut Windows-en eseri eta burutik ez galtzea.

1. urratsa: Ikerketa

"Buruan kapritxoren bat sartzen bazaizu, ezin duzu kolpe batekin kolpatu", esan zuen Nekrasovek "Who Living Well in Rus' lanean".

Beraz, behin pentsamendua buruan sartu zitzaidanean, denboraren buruan gauzatzeko lehen ideia sortu zen. Dena erraza zirudien - esteketarako sarbidea atzeman behar duzu meet.company.com/user/confid β€” instalatu tokiko web-aplikazio-prozesu bat zure autoan 127.0.0.1-n eta /etc/hosts-en gehitu sarrera estatiko bat konferentzian sartzen zaren konpainiaren domeinurako, localhost-era seinalatzen. Ondoren, web zerbitzari honek bertara iritsi den esteka prozesatu eta nolabait Pidgin-en barruan transferitu behar du (berehala esango dut fase honetan oraindik ez nuela ideia bat nola eman). Soluzioak, noski, makulu usaina du, baina programatzaileak gara, makuluek ez gaituzte beldurrik ematen (kaka).

Orduan, kasualitatez, Google Chrome-n gonbidapen-esteka ireki nuen nolabait (eta normalean beti erabiltzen dut Mozilla Firefox). Eta nire harridurarako, web-orriak guztiz bestelako itxura zuen: ez zegoen erabiltzailearen datuak sartzeko inprimakirik eta orria sartu eta berehala zerbait irekitzeko eskaera egin zen. xdg-open. Dibertitzeko, "bai" klik egiten dut eta errore-mezu bat agertzen da - lync15:confjoin?url=https://meet.company.com/user/confid esteka ezin da ireki. Hmm. Nolako xdg-open da hau eta zer behar du estekak irekitzeko? Dokumentazioaren post-mortem irakurketak agerian utzi zuen GUI kudeatzailea dela, lotutako aplikazioak exekutatzen laguntzen duena, bai uri eskemaren protokoloekin, bai fitxategi mota jakin batzuekin. Elkarteak mime motako maparen bidez konfiguratzen dira. Beraz, ikusten dugu bat datorren aplikazio baten bilaketa exekutatzen ari garela izeneko uri eskema baterako lync15 eta esteka xdg-open-era pasatzen da, eta gero, teorian, esteka mota honen arduraduna den aplikazio batzuetara pasa beharko luke. Hori, noski, ez daukagu ​​gure sisteman. Hala ez bada, zer egiten dute kode irekiko munduan? Hori bai, guk geuk idatziko dugu.

Linux-en munduan gehiago murgiltzea eta batez ere shell grafikoa (mahaigaineko ingurunea, DE) nola funtzionatzen duen aztertzean, bide batez, Xfce daukat Linux Mint-en, aplikazioak eta harekin lotutako mime mota normalean zuzenean idatzita daudela erakutsi zuen. .desktop luzapena duten lasterbide fitxategiak. Beno, zergatik ez, aplikazioaren lasterbide soil bat sortzen dut, bash script bat abiarazi eta hari emandako argumentua kontsolara atera beharko lukeena, lasterbide-fitxategia bera bakarrik ematen dut:

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

xdg-open abiarazten dut kontsolatik, nabigatzailetik datorren esteka bera pasatuz eta... pena. Berriro dio ezin duela esteka prozesatu.

Bihurtzen denez, ez nuen nire aplikazioarekin lotutako mime-moten direktorioa eguneratu. Hau komando sinple batekin egiten da:

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

fitxategia editatzen duena besterik gabe ~/.config/mimeapps.list.

Saiatu 2. zenbakia xdg-open deiarekin - eta berriro porrota. Ezer ez, zailtasunek ez gaituzte beldurtzen, gure interesa pizten baizik. Eta bash-en (hau da, trazadura) botere guztiaz armatuta, buru-belarri murgiltzen gara arazketan. Garrantzitsua da hemen xdg-open shell script bat besterik ez dela.

bash -x xdg-open $url

Trazatu ondoren irteera aztertuz gero apur bat argi geratzen da kontrola transferitzen zaiola exo-irekia. Eta hori dagoeneko fitxategi bitar bat da eta zailagoa da ulertzea zergatik itzultzen duen arrakastarik gabeko kode bat itzultzeko kode bat argumentu batean esteka pasatzen denean.

xdg-open-en barnetik begiratuta, jakin nuen ingurumen-parametro ezberdinak aztertzen dituela eta kontrola gehiago pasatzen duela DE jakin baterako fitxategi-estekak irekitzeko tresna batzuetara, edo atzera-funtzio bat duela. ireki_generikoa

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
}

Azkar txertatuko dut hemen hack txiki bat gainditutako argumentuaren analisiarekin eta gure azpikate espezifikoa bertan kokatzen bada lync15:, orduan berehala transferituko dugu kontrola funtziora ireki_generikoa.

3. zenbakia saiatu eta funtzionatu duela uste duzu? Bai, orain, noski. Baina errore-mezua dagoeneko aldatu da, hau aurrerapena da - orain fitxategia ez zela aurkitu esaten ari zen eta fitxategi moduan esteka bera argumentu gisa pasa zen idatzi zidan.

Oraingoan funtzio bat izan da is_file_url_or_path, sarrerara pasatu den fitxategiaren esteka aztertzen duena: file:// edo fitxategirako bidea edo beste zerbait. Eta egiaztapenak ez zuen behar bezala funtzionatu, gure aurrizkiak (url-eskema) zenbakiak dituelako, eta adierazpen erregularrak :alpha: puntuz eta marraz osatutako karaktere-multzoa soilik egiaztatzen du. rfc3986 estandarra kontsultatu ondoren baliabideen identifikatzaile uniformea Argi geratu zen oraingoan Microsoft-ek ez duela ezer urratzen (halako bertsioa nuen arren). Karaktere klaseak :alpha: soilik latindar alfabetoko letrak ditu. Azkar aldatzen dut ohiko egiaztapena alfanumerikora. Bukatutakoa, harrigarria zara, azkenean dena hasten da, kontrol guztiak gure script aplikazioari eman ondoren kontrola, gure esteka kontsolan bistaratzen da, dena behar den bezala dago. Honen ostean, susmatzen hasten naiz exo-open-en arazo guztiak estekaren formatuaren baliozkotze-eskemako zenbakiengatik direla ere. Hipotesia probatzeko, aplikazioaren mimo motako erregistroa eskema bat besterik ez da aldatzen linkatzailea eta listo - dena funtzionatzen du open_xfce funtzioa gainidatzi gabe. Baina horrek ez digu inola ere lagunduko, hitzaldira sartzeko web orrialdeak lync15-ekin lotura sortzen duelako.

Beraz, bidaiaren lehen zatia amaitu da. Badakigu nola atzematen esteka dei bat eta, ondoren, nolabait prozesatu eta Pidgin-en barruan pasatu behar da. Barruan nola funtzionatzen duen ulertzeko, datuak sartzean "sartu konferentzia batean" menuko esteka baten bidez, Sipe proiektuko Git biltegia klonatu eta kodean berriro murgiltzeko prest egon nintzen. Baina gero, zorionez, katalogoko gidoiek erakarri ninduten ekarpen/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-join-konferentzia-antolatzailearekin-eta-id.pl
  • sipe-dei-telefono-zenbakia.pl
  • SipeHelper.pm

Ematen du Sipe plugin-a dbus bidez (mahaigaineko autobusa) interakziorako erabilgarri dagoela eta scripten barruan esteka baten bidez hitzaldi batean sartzeko adibideak daude, bai antolatzailearen izenaren eta konf-id-aren bidez, edo dei bat sip bidez hasi dezakezu. . Hauxe falta zitzaigun hain zuzen.

2. urratsa. Autojoin-kudeatzailea ezartzea

Pearl-en prest dauden adibideak daudenez, erabiltzea erabaki nuen sipe-join-conference-with-uri.pl eta aldatu pixka bat zeure buruari egokitzeko. Perlan idatz dezaket, beraz, ez zuen zailtasun berezirik sortu.

Scripta bereizita probatu ondoren, bere deia idatzi nuen fitxategian lync.desktop. Eta garaipena izan zen! Konferentziaren batzeko orrialdean sartzean eta xdg-open abiarazten uzten baduzu, Pidgin-en konferentziaren pop-up leihoa automatikoki irekiko litzateke. Nola poztu nintzen.
Arrakastak bultzatuta, gauza bera egitea erabaki nuen nire nabigatzaile nagusiarekin, Mozilla Firefox. Azeriaren bidez saioa hasten zarenean, baimena emateko orri bat irekitzen da eta behealdean botoi bat dago sartu bulegoko komunikatzailea erabiliz. Bera izan zen nire arreta deitu zuena. Arakatzailean gainean klik egiten duzunean, helbide honetara doa:

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

horri atsegin handiz esaten dit ez dakiela nola ireki eta, beharbada, ez daukat halako protokolo baterako aplikazio elkarturik. Beno, dagoeneko pasatu dugu hau.

Azkar erregistratzen dut nire script aplikazioa uri eskeman ere conf eta... ez da ezer gertatzen. Arakatzaileak kexatzen jarraitzen du nire estekak kudeatzen dituen aplikaziorik ez dagoelako. Kasu honetan, kontsolatik xdg-open deitzeak ezin hobeto funtzionatzen du parametroekin.

"Ezarri protokolo kudeatzaile pertsonalizatua Firefox-en" - Sarean sartu nintzen galdera honekin. Stackoverflow-i buruzko hainbat eztabaida igaro ondoren (eta non egongo ginateke hura gabe), badirudi erantzuna aurkitu dela. Parametro berezi bat sortu behar duzu about: config (noski foo konf-rekin ordezkatuz):

network.protocol-handler.expose.foo = false

Guk sortzen dugu, esteka ireki eta... halako zorterik ez. Nabigatzaileak, ezer gertatu ez balitz bezala, gure aplikazioa ez duela ezagutzen dio.

Mozillako protokolo bat erregistratzeko dokumentazio ofiziala irakurtzen ari naiz, gnome mahaigainean bertan elkarteak erregistratzeko aukera dago (foo konf-rekin ordezkatuz, noski):

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

Erregistratu, nabigatzailea ireki... eta berriro bizarra.

Hona hemen dokumentazioko lerro batek begia erakartzen dit:

Protokolo motako foo esteka batean klik egiten duzun hurrengoan zein aplikaziorekin ireki behar duzun galdetuko zaizu.

- Semyon Semenych
- Ahh

Ez dugu estekan klik egiten, baina web-orriak window.location aldatzen du javascript bidez. HTML fitxategi sinple bat idazten dut conf protokolorako esteka batekin, ireki arakatzailean, egin klik estekan - Yos! Leiho bat irekitzen da gure esteka zein aplikaziotan ireki behar dugun galdetzen duena, eta hor dugu dagoeneko gure Lync aplikazioa zerrendan - zintzotasunez erregistratu dugu modu guztietan. Bertan leihoan kontrol-lauki bat dago "gogoratu aukera eta ireki beti estekak gure aplikazioan", markatu, egin klik OK. Eta hau bigarren garaipena da: konferentziaren leihoa irekitzen da. Aldi berean, konferentziak irekitzeak esteka batean klik egiten duzunean ez ezik, behar dugun batzeko orrialdetik kongresura pasatzean ere funtzionatzen du.

Gero egiaztatu nuen, parametroak ezabatuz network.protocol-handler.expose.conf ez zuen inola ere eragin Fox-en protokoloaren funtzionamenduan. Loturak lanean jarraitu zuten.

Ondorioa

Nire lan guztiak GitHub biltegira kargatu ditut; baliabide guztietarako estekak artikuluaren amaieran egongo dira.
Nire lana erabili nahi dutenen iritzia jasotzea interesatuko zait. Berehala kontuan izan behar dut garapen guztia nire Linux Mint sistemarako bakarrik egin nuela, beraz, baliteke beste banaketa edo mahaigain batzuk bertsio horretan ez funtzionatzea. Edo hobeto esanda, ia ziur nago honetaz, nire DErekin soilik erlazionatzen den xdg-open-en funtzio bakarra adabaki nuelako. Beste sistema edo mahaigain batzuetarako laguntza gehitu nahi baduzu, idatzi tira eskaerak Github-en.

Proiektu osoa arratsalde bat behar izan zen burutzeko.

erreferentziak:

Iturria: www.habr.com

Gehitu iruzkin berria