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:

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

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:

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

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.

2. darbÄ«ba. Automātiskās pievienoÅ”anās apstrādātāja ievieÅ”ana

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:

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

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):

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

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.

Visa projekta pabeigŔana prasīja 1 vakaru.

Saites:

Avots: www.habr.com

Pievieno komentāru