AutomÄtiska pieteikÅ”anÄs Lync konferencÄm operÄtÄjsistÄmÄ Linux
Äau Habr!
Man Ŕī frÄze ir lÄ«dzÄ«ga hello world, jo es beidzot tiku pie savas pirmÄs publikÄcijas. Å o brÄ«niŔķīgo mirkli es atliku uz ilgu laiku, jo nebija par ko rakstÄ«t, kÄ arÄ« negribÄjÄs smelties to, kas jau bija iesÅ«kts vairÄkas reizes. KopumÄ savai pirmajai publikÄcijai vÄlÄjos kaut ko oriÄ£inÄlu, citiem noderÄ«gu un kaut kÄdu izaicinÄjumu un problÄmu risinÄÅ”anu saturoÅ”u. Un tagad es varu dalÄ«ties ar Å”o. Tagad parunÄsim par visu kÄrtÄ«bÄ.
Ieraksts
Viss sÄkÄs, kad pirms kÄda laika savÄ darba datorÄ lejupielÄdÄju Linux Mint. Daudzi droÅ”i vien zina, ka Pidgin ar Sipe spraudni ir pilnÄ«bÄ piemÄrots Microsoft Lync (tagad saukts par Skype for business) aizstÄjÄjs Linux sistÄmÄm. Darba specifikas dÄļ man bieži nÄkas piedalÄ«ties SIP konferencÄs, un, kad biju Windows darbinieks, ieeja konferencÄs bija elementÄra: saÅemam ielÅ«gumu pa pastu, noklikŔķinÄm uz pieteikÅ”anÄs saites un esam gatavi doties .
PÄrejot uz Linux tumÅ”o pusi, viss kļuva nedaudz sarežģītÄk: protams, jÅ«s varat arÄ« pieteikties konferencÄs Pidgin, taÄu, lai to izdarÄ«tu, SIP konta rekvizÄ«tu izvÄlnÄ ir jÄizvÄlas opcija pievienoties konferencei un AtvÄrtajÄ logÄ ievietojiet saiti uz konferenci vai ievadiet organizatora nosaukumu un konf id. Un pÄc kÄda laika es sÄku domÄt: "vai to ir iespÄjams kaut kÄ vienkÄrÅ”ot?" JÄ, jÅ«s varÄtu teikt, kÄpÄc, pie velna, jums tas ir vajadzÄ«gs? Es labÄk sÄdÄÅ”u sistÄmÄ Windows un nedomÄju.
1. darbÄ«ba: izpÄte
āJa tev ieÅ”aujas galvÄ kaprÄ«ze, tu to nevari izsist ar mietu,ā savÄ darbÄ āKurÅ” labi dzÄ«vo KrievijÄā sacÄ«ja Å ekrasovs.
TÄtad, kad doma man ieÅ”ÄvÄs galvÄ, pÄc kÄda laika radÄs pirmÄ ideja Ä«stenoÅ”anai. Viss Ŕķita vienkÄrÅ”i - jums ir jÄpÄrtver piekļuve saitÄm meet.company.com/user/confid ā instalÄjiet vietÄjÄ tÄ«mekļa lietojumprogrammas procesu savÄ automaŔīnÄ 127.0.0.1 un mapÄ /etc/hosts pievienojiet statisku ierakstu uzÅÄmuma domÄnam, caur kuru ievadÄt konferenci, norÄdot uz localhost. TÄlÄk Å”im tÄ«mekļa serverim ir jÄapstrÄdÄ saite, kas uz to nÄca, un kaut kÄdÄ veidÄ jÄpÄrnes iekÅ”Ä Pidgin (es uzreiz teikÅ”u, ka Å”ajÄ posmÄ man vÄl nebija ne jausmas, kÄ to tam vispÄr pieŔķirt). RisinÄjums, protams, ož pÄc kruÄ·iem, bet mÄs esam programmÄtÄji, kruÄ·i mÅ«s nebiedÄ (sÅ«di).
Tad nejauÅ”i es kaut kÄ atvÄru Google Chrome ielÅ«guma saiti (un parasti es vienmÄr izmantoju Mozilla Firefox). Un man par pÄrsteigumu web lapa izskatÄ«jÄs pavisam savÄdÄk - nebija nevienas formas lietotÄja datu ievadÄ«Å”anai un uzreiz pÄc ieieÅ”anas lapÄ bija lÅ«gums kaut ko atvÄrt caur xdg-open. Prieka pÄc es noklikŔķinu uz ājÄā un tiek parÄdÄ«ts kļūdas ziÅojums ā saiti lync15:confjoin?url=https://meet.company.com/user/confid nevar atvÄrt. Hmm. Kas tas par xdg-open un kas tam vajadzÄ«gs, lai Å”Ädas saites atvÄrtos? PÄcnÄves dokumentÄcijas lasÄ«Å”ana atklÄja, ka tas ir GUI apdarinÄtÄjs, kas palÄ«dz palaist saistÄ«tÄs lietojumprogrammas vai nu ar protokoliem uri shÄmai, vai ar noteiktiem failu tipiem. AsociÄcijas tiek konfigurÄtas, izmantojot MIME tipa kartÄÅ”anu. TÄtad mÄs redzam, ka mÄs meklÄjam atbilstoÅ”u lietojumprogrammu uri shÄmai ar nosaukumu lync15 un saite tiek nodota xdg-open, kam pÄc tam teorÄtiski tÄ jÄnodod kÄdai lietojumprogrammai, kas ir atbildÄ«ga par Å”Äda veida saiti. Kas, protams, mÅ«su sistÄmÄ nav. Ja nÄ, ko viÅi dara atvÄrtÄ pirmkoda pasaulÄ? TieÅ”i tÄ, mÄs paÅ”i rakstÄ«sim.
TurpmÄka iedziļinÄÅ”anÄs Linux pasaulÄ un jo Ä«paÅ”i grafiskÄ apvalka (darbvirsmas vide, DE) darbÄ«bas izpÄte, starp citu, man ir Xfce programmÄ Linux Mint, parÄdÄ«ja, ka lietojumprogrammas un ar to saistÄ«tais mime tips parasti tiek rakstÄ«ts tieÅ”i saÄ«snes faili ar paplaÅ”inÄjumu .desktop. Nu, kÄpÄc gan ne, es izveidoju vienkÄrÅ”u lietojumprogrammas saÄ«sni, kurai vajadzÄtu vienkÄrÅ”i palaist bash skriptu un izvadÄ«t tam nodoto argumentu uz konsoli, es sniedzu tikai paÅ”u saÄ«snes failu:
Es palaižu xdg-open no konsoles, nododot to paÅ”u saiti, kas nÄk no pÄrlÅ«kprogrammas, un... bums. Atkal tiek teikts, ka tas nevar apstrÄdÄt saiti.
KÄ izrÄdÄs, es ar savu lietojumprogrammu neatjauninÄju saistÄ«to mime tipu direktoriju. Tas tiek darÄ«ts ar vienkÄrÅ”u komandu:
kas vienkÄrÅ”i rediÄ£Ä failu ~/.config/mimeapps.list.
MÄÄ£inÄjums numurs 2 ar xdg-open zvanu - un atkal neveiksme. Nekas, grÅ«tÄ«bas mÅ«s nebiedÄ, bet tikai veicina mÅ«su interesi. ApbruÅojuÅ”ies ar visu bash (t.i., izsekoÅ”anas) jaudu, mÄs ar galvu iegrimsim atkļūdoÅ”anÄ. Å eit ir svarÄ«gi atzÄ«mÄt, ka xdg-open ir tikai Äaulas skripts.
bash -x xdg-open $url
AnalizÄjot produkciju pÄc izsekoÅ”anas, kļūst skaidrs, ka vadÄ«ba tiek pÄrsÅ«tÄ«ta uz ekso-atvÄrts. Un tas jau ir binÄrs fails, un ir grÅ«tÄk saprast, kÄpÄc tas atgriež neveiksmÄ«gu atgrieÅ”anas kodu, argumentÄ nododot saiti uz to.
IzpÄtot xdg-open iekÅ”Äjos elementus, es atklÄju, ka tas analizÄ dažÄdus vides parametrus un nodod kontroli tÄlÄk vai nu dažiem rÄ«kiem, lai atvÄrtu konkrÄtai DE specifiskas failu saites, vai arÄ« tam ir rezerves funkcija. 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
}
Es Å”eit Ätri ievietoÅ”u nelielu uzlauÅ”anu ar nodotÄ āāargumenta analÄ«zi un to, vai tur atrodas mÅ«su konkrÄtÄ apakÅ”virkne lync15:, tad mÄs nekavÄjoties nododam vadÄ«bu funkcijai open_generic.
MÄÄ£inÄjums numur 3 un, jÅ«suprÄt, tas izdevÄs? JÄ, tagad, protams. Bet kļūdas ziÅojums jau ir mainÄ«jies, tas jau ir progress - tagad viÅÅ” man teica, ka fails nav atrasts, un faila veidÄ viÅÅ” man ierakstÄ«ja to paÅ”u saiti, kas tika nodota kÄ arguments.
Å oreiz tÄ izrÄdÄ«jÄs funkcija ir_faila_url_vai_ceļŔ, kas analizÄ faila saiti, kas nodota ievadei: file:// vai ceļu uz failu vai kaut ko citu. Un pÄrbaude nedarbojÄs pareizi, jo mÅ«su prefiksÄ (url shÄmÄ) ir skaitļi, un regulÄrÄ izteiksme pÄrbauda tikai rakstzÄ«mju kopu, kas sastÄv no :alpha: punktiem un domuzÄ«mÄm. PÄc apsprieÅ”anÄs ar standartu rfc3986 par vienots resursa identifikators Kļuva skaidrs, ka Å”oreiz Microsoft neko nepÄrkÄpj (lai gan man bija tÄda versija). Tikai rakstzÄ«mju klasÄ :alpha: ir tikai latÄ«Åu alfabÄta burti. Es Ätri mainu parasto Äeku uz burtciparu. Gatavs, jÅ«s esat pÄrsteidzoÅ”s, viss beidzot sÄkas, kontrole pÄc visu pÄrbaužu dota mÅ«su skripta lietojumprogrammai, mÅ«su saite tiek parÄdÄ«ta konsolÄ, viss ir tÄ, kÄ vajadzÄtu. PÄc tam man sÄk rasties aizdomas, ka visas problÄmas ar exo-open ir saistÄ«tas arÄ« ar saites formÄta validÄciju shÄmÄ esoÅ”o skaitļu dÄļ. Lai pÄrbaudÄ«tu hipotÄzi, es mainu lietojumprogrammas mÄ«mika tipa reÄ£istrÄciju uz tikai shÄmu lync un voila - viss darbojas, neievÄrojot open_xfce funkciju. Bet tas mums nekÄdi nepalÄ«dzÄs, jo tÄ«mekļa lapa dalÄ«bai konferencÄ izveido saiti ar lync15.
TÄtad pirmÄ brauciena daļa ir pabeigta. MÄs zinÄm, kÄ pÄrtvert saites zvanu, un tad tas ir kaut kÄ jÄapstrÄdÄ un jÄnodod iekÅ”Ä Pidgin. Lai saprastu, kÄ tas darbojas iekÅ”Äji, ievadot datus, izmantojot saiti izvÄlnÄ āpievienoties konferenceiā, es klonÄju Sipe projekta Git repozitoriju un atkal gatavojos ienirt kodÄ. Bet tad, par laimi, mani piesaistÄ«ja skripti katalogÄ contrib/dbus/:
sipe-join-conference-with-uri.pl
sipe-join-conference-ar-organizer-and-id.pl
sipe-call-phone-number.pl
SipeHelper.pm
IzrÄdÄs, ka Sipe spraudnis ir pieejams mijiedarbÄ«bai, izmantojot dbus (darbvirsmas kopni), un skriptu iekÅ”pusÄ ir piemÄri, kÄ pievienoties konferencei, izmantojot saiti, vai nu izmantojot organizatora vÄrdu un konf-id, vai arÄ« varat uzsÄkt zvanu, izmantojot sip. . Tas ir tieÅ”i tas, kas mums pietrÅ«ka.
TÄ kÄ Pearl ir gatavi piemÄri, es nolÄmu vienkÄrÅ”i izmantot sipe-join-conference-with-uri.pl un nedaudz pÄrveidojiet to, lai tas atbilstu sev. Es varu rakstÄ«t PÄrlÄ, tÄpÄc tas nesagÄdÄja Ä«paÅ”as grÅ«tÄ«bas.
PÄc skripta pÄrbaudes atseviŔķi, es ierakstÄ«ju tÄ izsaukumu failÄ lync.desktop. Un tÄ bija uzvara! Ieejot konferences pievienoÅ”anÄs lapÄ un ļaujot darboties xdg-open, automÄtiski tiks atvÄrts konferences uznirstoÅ”ais logs no Pidgin. KÄ es priecÄjos.
PanÄkumu mudinÄts, es nolÄmu darÄ«t to paÅ”u ar savu galveno pÄrlÅ«kprogrammu Mozilla Firefox. Piesakoties caur lapsu, atveras lapa autorizÄcijai un paÅ”Ä apakÅ”Ä ir poga pievienojieties, izmantojot biroja komunikatoru. ViÅa bija tÄ, kas pievÄrsa manu uzmanÄ«bu. PÄrlÅ«kprogrammÄ noklikŔķinot uz tÄ, tas pÄriet uz adresi:
uz ko viÅÅ” man laipni saka, ka nezina, kÄ to atvÄrt, un, iespÄjams, man nav saistÄ«tas lietojumprogrammas Å”Ädam protokolam. Nu mÄs tam jau esam gÄjuÅ”i cauri.
Es Ätri reÄ£istrÄju savu skripta pieteikumu arÄ« uri shÄmai conf un... nekas nenotiek. PÄrlÅ«kprogramma turpina sÅ«dzÄties, ka nav nevienas lietojumprogrammas, kas apstrÄdÄtu manas saites. Å ajÄ gadÄ«jumÄ xdg-open izsaukÅ”ana no konsoles ar parametriem darbojas lieliski.
āIestatÄ«t pielÄgotu protokolu apdarinÄtÄju Firefoxā ā es devos tieÅ”saistÄ ar Å”o jautÄjumu. PÄc vairÄkÄm diskusijÄm par stackoverflow (un kur mÄs bÅ«tu bez tÄ), Ŕķiet, ka atbilde tika atrasta. Jums ir jÄizveido Ä«paÅ”s parametrs about: config (protams, aizstÄjot foo ar conf):
network.protocol-handler.expose.foo = false
MÄs to izveidojam, atveram saiti un... nav tÄdas veiksmes. PÄrlÅ«ks, it kÄ nekas nebÅ«tu noticis, saka, ka nezina mÅ«su aplikÄciju.
Es lasu oficiÄlo dokumentÄciju par Mozilla protokola reÄ£istrÄÅ”anu, ir iespÄja reÄ£istrÄt asociÄcijas paÅ”Ä gnome darbvirsmÄ (protams, aizstÄjot foo ar conf):
ReÄ£istrÄjos, atveru pÄrlÅ«ku... un atkal bÄrda.
Å eit manu uzmanÄ«bu piesaista rindiÅa no dokumentÄcijas:
NÄkamreiz, kad noklikŔķinÄsit uz protokola tipa foo saites, jums tiks jautÄts, ar kuru lietojumprogrammu to atvÄrt.
- Semjons SemeniÄs
- Ahh
MÄs neklikŔķinÄm uz saites, bet tÄ«mekļa lapa vienkÄrÅ”i maina window.location, izmantojot JavaScript. Es uzrakstu vienkÄrÅ”u html failu ar saiti uz conf protokolu, atveru to pÄrlÅ«kprogrammÄ, noklikŔķiniet uz saites - Yos! Tiek atvÄrts logs, kurÄ tiek jautÄts, kurÄ lietojumprogrammÄ mums ir jÄatver saite, un tur jau ir mÅ«su Lync lietojumprogramma sarakstÄ ā mÄs to godÄ«gi reÄ£istrÄjÄm visos iespÄjamos veidos. Tur logÄ ir izvÄles rÅ«tiÅa āatcerÄties izvÄli un vienmÄr atvÄrt saites mÅ«su lietojumprogrammÄā, atzÄ«mÄjiet to, noklikŔķiniet uz Labi. Un Ŕī ir otrÄ uzvara ā atveras konferences logs. TajÄ paÅ”Ä laikÄ konferenÄu atvÄrÅ”ana darbojas ne tikai tad, kad noklikŔķinÄt uz saites, bet arÄ« pÄrejot no mums nepiecieÅ”amÄs pievienoÅ”anÄs lapas uz konferenci.
Tad es pÄrbaudÄ«ju, dzÄÅ”ot parametrus network.protocol-handler.expose.conf nekÄdÄ veidÄ neietekmÄja protokola darbÄ«bu Fox. Saites turpinÄja darboties.
SecinÄjums
Esmu augÅ”upielÄdÄjis visu savu darbu GitHub repozitorijÄ; saites uz visiem resursiem bÅ«s raksta beigÄs.
BÅ«Å”u ieinteresÄts saÅemt atsauksmes no tiem, kas vÄlas izmantot manu darbu. Uzreiz jÄatzÄ«mÄ, ka visu izstrÄdi veicu tikai savai Linux Mint sistÄmai, tÄpÄc daži citi izplatÄ«jumi vai galddatori var nedarboties Å”ajÄ versijÄ. PareizÄk sakot, esmu pat gandrÄ«z pÄrliecinÄts par to, jo es ielÄpu tikai 1 xdg-open funkciju, kas attiecas tikai uz manu DE. Ja vÄlaties pievienot atbalstu citÄm sistÄmÄm vai galddatoriem, rakstiet man pieprasÄ«jumus Github.