Login otomatis kana konperénsi Lync dina Linux

Héy Habr!

Pikeun kuring, frasa ieu sami sareng halo dunya, sabab tungtungna kuring dugi ka publikasi munggaran kuring. Kuring ditunda momen éndah ieu pikeun lila, saprak aya nanaon nulis ngeunaan, sarta kuring ogé teu hayang ngabandungan hal anu geus kungsi sedot dina kebat kali. Sacara umum, pikeun publikasi munggaran abdi hoyong anu asli, mangpaat pikeun batur sareng ngandung sababaraha jenis tantangan sareng ngarengsekeun masalah. Tur ayeuna abdi tiasa babagi ieu. Ayeuna hayu urang ngobrol ngeunaan sagalana dina urutan.

asup

Sadayana dimimitian nalika sababaraha waktos kapengker kuring ngaunduh Linux Mint dina komputer padamelan kuring. Seueur jalma terang yén Pidgin sareng plugin Sipe mangrupikeun gaganti anu cocog pikeun Microsoft Lync (ayeuna disebut Skype for Business) pikeun sistem Linux. Kusabab spésifik padamelan kuring, kuring sering kedah ilubiung dina konperénsi SIP, sareng nalika kuring janten pagawé Windows, asup kana konperénsi éta dasar: kami nampi uleman ku surat, klik tautan login, sareng kami siap angkat. .

Nalika ngalih ka sisi poék Linux, sadayana janten langkung rumit: tangtosna, anjeun ogé tiasa lebet kana konperénsi di Pidgin, tapi pikeun ngalakukeun ieu anjeun kedah milih pilihan konperénsi gabung dina ménu dina sipat akun SIP anjeun sareng dina jandela anu muka, selapkeun tautan kana konperénsi atanapi lebetkeun nami pangatur sareng conf id. Sareng saatos sababaraha waktos kuring mimiti mikir: "Naha kumaha waé tiasa nyederhanakeun ieu?" Leres, anjeun tiasa nyarios, naha anjeun peryogi ieu? Abdi langkung resep calik dina Windows sareng henteu niup pikiran kuring.

Lengkah 1: Panalungtikan

"Upami anjeun ngagaduhan jinis karep dina sirah anjeun, anjeun moal tiasa ngetok ku patok" - ieu anu diomongkeun Nekrasov dina karyana "Saha Anu Hirup di Rusia".

Ku kituna, sakali pamikiran asup kana sirah kuring, sanggeus sababaraha waktu timbul gagasan munggaran pikeun palaksanaan. Sagalana sigana saderhana - anjeun kedah ngahalangan aksés kana tautan meet.company.com/user/confid — masang prosés aplikasi wéb lokal dina mobil anjeun dina 127.0.0.1 sareng dina /etc/hosts nambihan éntri statik pikeun domain perusahaan dimana anjeun lebet kana konperénsi, nunjuk ka localhost. Salajengna, server wéb ieu kedah ngolah tautan anu sumping ka éta sareng kumaha waé nransferkeunana ka jero Pidgin (Kuring bakal langsung nyarios yén dina tahap ieu kuring masih henteu terang kumaha masihan éta). Leyuran, tangtosna, bau kawas crutches, tapi kami programmer, crutches teu nyingsieunan urang (shit).

Lajeng, ku kasempetan, kuring kumaha bae muka link uleman dina Google Chrome (jeung biasana sok ngagunakeun Mozilla Firefox). Sareng reuwas kuring, halaman wéb katingalina béda-béda - henteu aya bentuk pikeun ngalebetkeun data pangguna sareng langsung saatos ngalebetkeun halaman éta aya pamundut pikeun muka hiji hal ngaliwatan xdg-muka. Ngan pikeun senang-senang, kuring klik "enya" sareng pesen kasalahan muncul - tautan lync15:confjoin?url=https://meet.company.com/user/confid teu tiasa dibuka. Hmm. Jenis xdg-open ieu sareng naon anu diperyogikeun supados tautan sapertos dibuka? Bacaan pos-mortem dokuméntasi ngungkabkeun yén éta mangrupikeun panangan GUI anu ngabantosan ngajalankeun aplikasi anu aya hubunganana boh sareng protokol pikeun skéma uri atanapi sareng jinis file anu tangtu. Asosiasi dikonpigurasi via pemetaan tipe mime. Janten urang ningali yén urang nuju milarian aplikasi anu cocog pikeun skéma uri anu namina lync15 sarta link disalurkeun ka xdg-open, nu lajeng, dina tiori, kedah ngalirkeun ka sababaraha aplikasi nu jawab tipe ieu link. Nu, tangtosna, urang teu boga dina sistem urang. Upami henteu, teras naon anu aranjeunna lakukeun di dunya open source? Leres, urang nyerat nyalira.

Immersion salajengna di dunya Linux Ubuntu jeung utamana dina diajar kumaha cangkang grafis (lingkungan desktop, DE) jalan, ku jalan kitu, kuring boga Xfce dina Linux Ubuntu mint, némbongkeun yén aplikasi jeung tipe mime pakait sareng eta biasana ditulis langsung dina. file potong kompas jeung extension .desktop. Nya, naha henteu, kuring nyiptakeun potong kompas aplikasi anu saderhana, anu ngan saukur ngaluncurkeun skrip bash sareng kaluaran argumen anu disalurkeun ka konsol, kuring ngan ukur nyayogikeun file potong kompas sorangan:

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

Kuring ngajalankeun xdg-buka ti konsol nu, ngalirkeun link sarua nu asalna tina browser jeung ... bummer. Deui nyebutkeun yen eta teu bisa ngolah link.

Tétéla, kuring henteu ngamutahirkeun diréktori tina jinis mime anu aya hubunganana sareng aplikasi kuring. Hal ieu dilakukeun ku paréntah basajan:

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

nu saukur ngédit file ~/.config/mimeapps.list.

Usaha nomer 2 kalayan telepon xdg-open - sareng gagal deui. Henteu aya nanaon, kasusah henteu nyingsieunan urang, tapi ngan ukur ngabakar minat urang. Jeung angkatan kalayan sagala kakuatan bash (ie tracing), urang teuleum headfirst kana debugging. Penting pikeun dicatet yén xdg-open ngan ukur skrip cangkang.

bash -x xdg-open $url

Nganalisis kaluaran sanggeus tracing janten saeutik jelas yén kontrol lajeng dibikeun ka exo-muka. Sareng ieu mangrupikeun file binér sareng langkung hese ngartos naha éta ngabalikeun kodeu balik anu henteu suksés nalika ngirimkeun tautan ka éta dina argumen.

Saatos ningali kana internal xdg-open, kuring mendakan yén éta nganalisa rupa-rupa parameter lingkungan sareng ngalangkungan kontrol langkung jauh boh kana sababaraha alat pikeun muka tautan file khusus pikeun DE tinangtu, atanapi éta ngagaduhan fungsi fallback. 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
}

Kuring gé gancang Lebetkeun dieu hack leutik kalawan analisis argumen kaliwat tur lamun substring husus urang aya di dinya Lync15:, teras urang langsung mindahkeun kontrol ka fungsi open_generic.

Usaha nomer 3 sareng saur anjeun éta hasil? Hehehehe, ayeuna, tangtu. Tapi pesen kasalahan parantos robih, ieu parantos kamajuan - ayeuna anjeunna nyarioskeun ka kuring yén file éta henteu kapendak sareng dina bentuk file anjeunna nyerat kuring link anu sami sareng argumen.

Waktos ieu tétéla janten fungsi is_file_url_or_path, anu nganalisa tautan file anu dikirimkeun ka input: file: // atanapi jalur kana file atanapi anu sanés. Jeung cék nu teu jalan neuleu alatan kanyataan yén awalan urang (skéma url) boga angka, sarta éksprési biasa ukur mariksa susunan karakter diwangun ku: alpha: titik jeung dashes. Saatos konsultasi standar rfc3986 pikeun identifier sumberdaya seragam Janten jelas yén waktos ieu Microsoft henteu ngalanggar nanaon (sanaos kuring ngagaduhan versi sapertos kitu). Ngan kelas karakter: alpha: ngan ngandung hurup tina alfabét Latin. Kuring gancang ngarobah cek biasa ka alfanumerik. Rengse, anjeun endah, sagalana tungtungna dimimitian, kontrol sanggeus sagala cék dibikeun ka aplikasi Aksara urang, link urang dipintonkeun dina konsol nu, sagalana geus sakumaha kuduna. Saatos ieu, kuring mimiti nyangka yén sadaya masalah sareng exo-open ogé kusabab validasi format tautan kusabab nomer dina skéma. Pikeun nguji hipotésis, kuring ngarobah pendaptaran tipe mime tina aplikasi pikeun ngan skéma a lync sarta voila - sagalana jalan tanpa overriding fungsi open_xfce. Tapi ieu moal ngabantosan urang ku cara naon waé, sabab halaman wéb pikeun ngalebetkeun konperénsi nyiptakeun tautan sareng lync15.

Janten, bagian mimiti perjalanan parantos réngsé. Urang terang kumaha nyegat sauran tautan teras kedah kumaha waé diolah sareng dilebetkeun ka jero Pidgin. Dina raraga ngartos kumaha gawéna internal nalika ngasupkeun data ngaliwatan tumbu dina menu "gabung konferensi", abdi dikloning Repository Git proyék Sipe sarta siap teuleum deui kana kode. Tapi harita, untungna, kuring kataji ku naskah dina katalog kontribusi/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-join-conference-with-organizer-and-id.pl
  • sipe-panggero-telepon-number.pl
  • SipeHelper.pm

Tétéla yén plugin Sipe sadia pikeun interaksi via dbus (desktop beus) jeung di jero naskah aya conto gabung konferensi via link, boh ngaliwatan ngaran panitia jeung conf-id, atawa anjeun bisa initiate telepon via sip. . Ieu persis naon urang leungit.

Lengkah 2. Ngalaksanakeun panangan autojoin

Kusabab aya conto anu siap-siap di Mutiara, kuring mutuskeun ngan ukur nganggo sipe-join-conference-with-uri.pl sarta ngaropéa saeutik pikeun nyocogkeun diri. Abdi tiasa nyerat dina Mutiara, janten henteu nyababkeun kasusah khusus.

Saatos nguji naskah nyalira, kuring nyerat sauran na kana file lync.desktop. Tur éta meunangna a! Nalika asup kana halaman gabung konperénsi sareng ngamungkinkeun xdg-open dijalankeun, jandela popup konperénsi ti Pidgin bakal muka otomatis. Kumaha kuring bungah.
Didorong ku kasuksésan, kuring mutuskeun pikeun ngalakukeun hal anu sami pikeun browser utama kuring, Mozilla Firefox. Nalika anjeun log in liwat rubah, halaman pikeun otorisasina dibuka sareng di handapeun pisan aya tombol gabung ngagunakeun komunikator kantor. Manéhna nu narik perhatian kuring. Nalika anjeun ngaklik dina browser, éta angkat ka alamat:

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

nu anjeunna bageur nawaran reureuh di ngabejaan kuring yen manehna teu nyaho kumaha carana muka eta na, meureun, kuring teu boga hiji aplikasi pakait pikeun protokol misalna. Nya, urang parantos ngalangkungan ieu.

Kuring gancang ngadaptarkeun aplikasi skrip kuring ogé pikeun skéma uri conf jeung... euweuh kajadian. browser nu terus complaining yén euweuh aplikasi nu handles Tumbu abdi. Dina hal ieu, nelepon xdg-open tina konsol jeung parameter jalan sampurna.

"Setel panangan protokol khusus dina firefox" - Kuring indit online sareng patarosan ieu. Sanggeus ngaliwatan sababaraha diskusi on stackoverflow (jeung dimana urang bakal tanpa eta), sigana jawaban nu kapanggih. Anjeun kudu nyieun parameter husus dina ngeunaan: config (tangtu ngagentos foo sareng conf):

network.protocol-handler.expose.foo = false

Urang nyieun eta, buka link na ... euweuh tuah sapertos. Browser, saolah-olah teu aya anu kajantenan, nyarios yén éta henteu terang aplikasi urang.

Kuring maca dokuméntasi resmi pikeun ngadaptarkeun protokol ti Mozilla, aya pilihan pikeun ngadaptar asosiasi dina desktop gnome sorangan (ngaganti foo sareng conf, tangtosna):

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

Kuring ngadaptar, muka browser ... jeung deui janggot.

Di dieu hiji garis tina dokuméntasi nyekel panon kuring:

Dina waktos salajengna basa Anjeun klik link tina protokol-tipe foo anjeun bakal dipenta aplikasi mana pikeun muka éta.

- Semyon Semenych
- Ah

Kami henteu ngaklik tautan, tapi halaman wéb ngan saukur ngarobih window.location via javascript. Kuring nulis file html basajan kalawan tumbu ka protokol conf, buka dina browser, klik dina link - Yos! Jandéla dibuka pikeun naroskeun aplikasi mana anu urang kedah buka tautan, sareng di dinya kami parantos ngagaduhan aplikasi Lync dina daptar - kami leres-leres ngadaptarkeunana dina sagala cara anu mungkin. Aya dina jandela aya kotak centang "inget pilihan jeung salawasna buka tumbu dina aplikasi urang", cirian eta, klik ok. Sareng ieu mangrupikeun kameunangan kadua - jandela konperénsi dibuka. Dina waktos anu sami, muka konperénsi tiasa dianggo henteu ngan ukur nalika anjeun ngaklik tautan, tapi ogé nalika ngalih tina halaman gabung anu urang peryogikeun kana konperénsi éta.

Saterusna kuring dipariksa, mupus parameter network.protocol-handler.expose.conf teu sagala cara mangaruhan operasi protokol di Fox. Tumbu terus jalan.

kacindekan

Kuring parantos unggah sadaya padamelan abdi ka Repositori GitHub; Tumbu ka sadaya sumber bakal aya dina tungtung tulisan.
Kuring bakal kabetot dina narima eupan balik ti maranéhanana anu rék ngagunakeun karya kuring. Kuring kedah langsung perhatikeun yén kuring ngalakukeun sagala pamekaran ngan ukur pikeun sistem Linux Mint kuring, janten sababaraha distribusi atanapi desktop sanés tiasa dianggo dina versi éta. Atawa rada, Abdi malah ampir yakin kana ieu, sabab kuring patched wungkul 1 fungsi dina xdg-muka nu relates mung ka DE kuring. Upami anjeun hoyong nambihan dukungan pikeun sistem atanapi desktop anu sanés, nyerat kuring narik pamundut dina Github.

Sakabéh proyék nyandak 1 malem pikeun réngsé.

Rujukan:

sumber: www.habr.com

Tambahkeun komentar