Mlebet otomatis menyang konferensi Lync ing Linux

Hey Habr!

Kanggo kula, tembung iki mirip karo hello world, amarga pungkasane entuk publikasi pisanan. Aku sijine mati wayahe apik iki kanggo dangu, wiwit ana apa-apa kanggo nulis bab, lan aku uga ora pengin nyedhot soko sing wis di sedot ing Bunch saka kaping. Umumé, kanggo publikasi pisanan, aku pengin sing asli, migunani kanggo wong liya lan ngemot sawetara tantangan lan pemecahan masalah. Lan saiki aku bisa nuduhake iki. Saiki ayo ngomong babagan kabeh kanthi urutan.

entri

Iku kabeh diwiwiti nalika sawetara wektu kepungkur aku ngundhuh Linux Mint ing komputer kerjaku. Akeh wong sing ngerti manawa Pidgin karo plugin Sipe minangka panggantos sing cocog kanggo Microsoft Lync (saiki diarani Skype for Business) kanggo sistem Linux. Amarga spesifik karyaku, aku kerep kudu melu ing konferensi SIP, lan nalika aku dadi buruh Windows, mlebu konferensi ana dhasar: kita nampa undhangan liwat mail, klik ing link login, lan kita wis siyap kanggo pindhah. .

Nalika ngalih menyang sisih peteng Linux, kabeh dadi luwih rumit: mesthi, sampeyan uga bisa mlebu konferensi ing Pidgin, nanging kanggo nindakake iki, sampeyan kudu milih opsi gabung konferensi ing menu ing properti akun SIP lan ing jendhela sing mbukak, lebokake link menyang konferensi utawa ketik jeneng organizer lan conf id. Lan sawise sawetara wektu, aku wiwit mikir: "Apa ora bisa nyederhanakake iki?" Ya, sampeyan bisa uga ujar, kenapa sampeyan butuh iki? Aku luwih seneng lungguh ing Windows lan ora mikir.

Langkah 1: Riset

Nekrasov ngandika ing karyane "Who Lives Well in Rus." "Yen sampeyan duwe kepinginan, sampeyan ora bisa ngalahake kanthi stake."

Dadi, yen pikirane mlebu ing sirahku, sawise sawetara wektu muncul ide pisanan kanggo implementasine. Kabeh katon prasaja - sampeyan kudu nyegat akses menyang tautan meet.company.com/user/confid — instal proses aplikasi web lokal ing mobil sampeyan ing 127.0.0.1 lan ing /etc/hosts nambahake entri statis kanggo domain perusahaan sing sampeyan mlebu ing konferensi, nuding menyang localhost. Sabanjure, server web iki kudu ngolah link sing teka lan piye wae nransfer ing Pidgin (Aku bakal langsung ngomong yen ing tahap iki aku isih ora ngerti carane menehi kabeh). Solusi, mesthi, ambune kaya crutches, nanging kita programer, crutches ora wedi kita (telek).

Banjur, kanthi kasempatan, aku mbukak link undhangan ing Google Chrome (lan biasane aku nggunakake Mozilla Firefox). Lan kagetku, kaca web kasebut katon beda banget - ora ana formulir kanggo ngetik data pangguna lan langsung sawise mlebu ing kaca kasebut ana panjaluk kanggo mbukak apa wae. xdg-open. Mung kanggo seneng-seneng, aku klik "ya" lan pesen kesalahan katon - link lync15:confjoin?url=https://meet.company.com/user/confid ora bisa dibukak. Hmm. Apa jenis xdg-open iki lan apa sing dibutuhake supaya tautan kasebut bisa mbukak? A maca post-mortem saka dokumentasi dicethakaké ana ing GUI handler sing mbantu mbukak aplikasi sing gegandhengan karo protokol kanggo skema uri utawa karo jinis file tartamtu. Asosiasi dikonfigurasi liwat pemetaan jinis mime. Dadi kita ndeleng manawa kita lagi nggoleki aplikasi sing cocog kanggo skema uri sing jenenge lync15 lan link wis liwati kanggo xdg-mbukak, kang banjur, ing teori, ngirim pass menyang sawetara aplikasi sing tanggung jawab kanggo jinis link iki. Sing, mesthi, ora ana ing sistem kita. Yen ora, banjur apa sing ditindakake ing jagad sumber terbuka? Bener, kita bakal nulis dhewe.

Luwih kecemplung ing jagad Linux lan utamane sinau babagan cara kerja cangkang grafis (lingkungan desktop, DE), kanthi cara, aku duwe Xfce ing Linux Mint, nuduhake manawa aplikasi lan jinis mime sing ana gandhengane biasane ditulis langsung ing file trabasan nganggo ekstensi .desktop. Ya, kenapa ora, aku nggawe trabasan aplikasi sing gampang, sing mung kudu mbukak skrip bash lan ngasilake argumen sing diterusake menyang konsol, aku mung nyedhiyakake file trabasan kasebut:

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

Aku miwiti xdg-mbukak saka console, maringaken link padha teka saka browser lan ... bummer. Maneh ujar manawa ora bisa ngolah link kasebut.

Ternyata, aku ora nganyari direktori jinis mime sing gegandhengan karo aplikasiku. Iki rampung kanthi printah prasaja:

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

sing mung nyunting file ~/.config/mimeapps.list.

Nyoba nomer 2 karo telpon xdg-mbukak - lan maneh gagal. Ora ana apa-apa, kangelan ora nggegirisi, nanging mung narik minat kita. Lan bersenjata kabeh kekuwatan bash (yaiku tracing), kita nyilem dhisik menyang debugging. Penting kanggo dicathet yen xdg-open mung skrip cangkang.

bash -x xdg-open $url

Nganalisa output sawise nelusuri dadi sethitik cetha sing kontrol banjur ditransfer kanggo exo-mbukak. Lan iki wis dadi file binar lan luwih angel dimangerteni kenapa ngasilake kode bali sing ora kasil nalika ngirim link menyang argumentasi.

Sawise ndeleng internal xdg-open, aku ngerteni manawa nganalisa macem-macem paramèter lingkungan lan ngontrol luwih lanjut menyang sawetara alat kanggo mbukak tautan file khusus kanggo DE tartamtu, utawa duwe fungsi mundur. 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
}

Aku bakal cepet nampilake hack cilik ing kene kanthi analisa argumen sing dilewati lan yen substring tartamtu ana ing kana lync15:, banjur kita langsung nransfer kontrol menyang fungsi open_generic.

Nyoba nomer 3 lan sampeyan mikir iku bisa? Ya, saiki, mesthi. Nanging pesen kesalahan wis diganti, iki wis kemajuan - saiki dheweke ngandhani yen file kasebut ora ditemokake lan ing wangun file, dheweke nulis link sing padha karo argumen.

Wektu iki dadi fungsi is_file_url_or_path, sing nganalisa link file sing dikirim menyang input: file: // utawa path menyang file utawa liyane. Lan mriksa ora bisa digunakake kanthi bener amarga prefiks (skema url) kita duwe nomer, lan ekspresi reguler mung mriksa set karakter sing kalebu: alpha: titik lan garis. Sawise konsultasi standar rfc3986 kanggo pengenal sumber daya seragam Dadi cetha yen wektu iki Microsoft ora nglanggar apa-apa (sanajan aku duwe versi kasebut). Mung kelas karakter: alpha: mung ngemot huruf saka alfabet Latin. Aku cepet ngganti mriksa biasa kanggo alfanumerik. Rampung, sampeyan pancen nggumunake, kabeh pungkasane diwiwiti, kontrol sawise kabeh mriksa diwenehake menyang aplikasi skrip kita, link kita ditampilake ing konsol, kabeh kaya sing dikarepake. Sawise iki, aku wiwit curiga yen kabeh masalah karo exo-open uga amarga validasi format link amarga nomer ing skema. Kanggo nguji hipotesis, aku ngganti registrasi jinis mime saka aplikasi kasebut dadi skema lync lan voila - kabeh bisa tanpa overriding fungsi open_xfce. Nanging iki ora bakal mbantu kita kanthi cara apa wae, amarga kaca web kanggo mlebu konferensi nggawe link karo lync15.

Dadi, bagian pertama perjalanan wis rampung. Kita ngerti carane nyegat panggilan link banjur kudu diproses lan diterusake ing Pidgin. Kanggo ngerti cara kerjane internal nalika ngetik data liwat link ing menu "gabung karo konferensi", aku kloning repositori Git proyek Sipe lan siap kanggo nyilem menyang kode maneh. Nanging banjur, untunge, aku kepincut karo skrip ing katalog kontribusi/dbus/:

  • sipe-gabung-konferensi-karo-uri.pl
  • sipe-join-conference-with-organizer-and-id.pl
  • sipe-telpon-nomer-telpon.pl
  • SipeHelper.pm

Pranyata plugin Sipe kasedhiya kanggo interaksi liwat dbus (desktop bus) lan ing skrip kasebut ana conto gabung ing konferensi liwat link, liwat jeneng penganjur lan conf-id, utawa sampeyan bisa miwiti telpon liwat sip. . Iki persis apa kita padha ilang.

Langkah 2. Ngleksanakake pawang autojoin

Wiwit ana conto siap-digawe ing Pearl, Aku mutusaké kanggo mung nggunakake sipe-gabung-konferensi-karo-uri.pl lan ngowahi sethithik supaya cocog karo sampeyan. Aku bisa nulis ing Pearl, supaya ora nimbulaké kangelan tartamtu.

Sawise nyoba skrip kanthi kapisah, aku nulis telpon menyang file kasebut lync.desktop. Lan iku kamenangan ! Nalika ngetik kaca gabung konferensi lan ngidini xdg-mbukak mbukak, jendhela popup konferensi saka Pidgin bakal mbukak kanthi otomatis. Carane aku bungah.
Disaranake kanthi sukses, aku mutusake nindakake perkara sing padha kanggo browser utamaku, Mozilla Firefox. Nalika sampeyan mlebu liwat rubah, kaca kanggo wewenang mbukak lan ing sisih ngisor ana tombol gabung nggunakake komunikator kantor. Dheweke sing narik kawigatenku. Nalika sampeyan ngeklik ing browser, bakal menyang alamat:

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

kanggo kang kindly marang kula sing ora ngerti carane mbukak lan, mbok menawa, aku ora duwe aplikasi gadhah kanggo protokol kuwi. Inggih, kita wis ngalami iki.

Aku cepet ndhaptar aplikasi skrip uga kanggo skema uri conf lan ... boten mengkono. Browser terus sambat yen ora ana aplikasi sing nangani pranalaku. Ing kasus iki, nelpon xdg-mbukak saka console karo paramèter dianggo sampurna.

"Setel panangan protokol khusus ing firefox" - Aku online karo pitakonan iki. Sawise liwat sawetara diskusi ing stackoverflow (lan ing ngendi kita bakal tanpa iku), misale jek jawaban ketemu. Sampeyan kudu nggawe parameter khusus ing babagan: config (mesthi ngganti foo karo conf):

network.protocol-handler.expose.foo = false

Kita nggawe, mbukak link lan ... ora luck kuwi. Browser, kaya ora ana sing kedadeyan, ujar manawa ora ngerti aplikasi kita.

Aku maca dokumentasi resmi babagan ndhaptar protokol saka Mozilla, ana pilihan kanggo ndhaptar asosiasi ing desktop gnome dhewe (ngganti foo karo conf, mesthi):

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

Aku ndhaftar, mbukak browser ... lan maneh jenggot.

Ing ngisor iki baris saka dokumentasi narik kawigatenku:

Sabanjure sampeyan ngeklik link saka protokol-jinis foo sampeyan bakal dijaluk kanggo mbukak aplikasi apa.

- Semyon Semenych
- Ah

Kita ora ngeklik link, nanging kaca web mung ngganti window.location liwat javascript. Aku nulis file html prasaja kanthi link menyang protokol conf, mbukak ing browser, klik ing link - Yos! Jendhela mbukak takon ing aplikasi endi sing kudu dibukak link, lan ing kana kita wis duwe aplikasi Lync ing dhaptar - kanthi jujur, kita ndhaptar kanthi cara sing bisa ditindakake. Ing jendhela ana kothak centhang "elinga pilihan lan tansah mbukak pranala ing aplikasi kita", tandhani, klik ok. Lan iki kamenangan kapindho - jendhela konferensi mbukak. Ing wektu sing padha, mbukak konferensi bisa digunakake ora mung nalika sampeyan ngeklik link, nanging uga nalika pindhah saka kaca gabung kita kudu konferensi.

Banjur aku mriksa, mbusak paramèter network.protocol-handler.expose.conf ora ing sembarang cara mengaruhi operasi saka protokol ing Fox. Link terus bisa.

kesimpulan

Aku wis upload kabeh karya menyang repositori GitHub pranala menyang kabeh sumber bakal ing mburi artikel.
Aku bakal kasengsem nampa umpan balik saka wong-wong sing pengin nggunakake karyaku. Aku kudu langsung nyathet yen aku nindakake kabeh pembangunan mung kanggo sistem Linux Mint, supaya sawetara distribusi utawa desktop liyane ora bisa digunakake ing versi kasebut. Utawa luwih, Aku malah meh manawa iki, amarga aku patched mung 1 fungsi ing xdg-mbukak sing hubungane mung kanggo DE sandi. Yen sampeyan pengin nambah dhukungan kanggo sistem utawa desktop liyane, tulisake panjaluk tarik ing Github.

Kabeh proyek njupuk 1 sore kanggo rampung.

Cathetan:

Source: www.habr.com

Add a comment