Linux-da Lync konfranslarına avtomatik daxil olun

Hey Habr!

Mənim üçün bu ifadə salam dünyasına bənzəyir, çünki nəhayət ilk nəşrimə çatdım. Bu gözəl anı uzun müddət təxirə saldım, çünki yazmağa heç bir şey yox idi və mən də artıq bir neçə dəfə əmilmiş bir şeyi əmmək istəmirdim. Ümumiyyətlə, ilk nəşrim üçün orijinal, başqaları üçün faydalı və bir növ problem və problem həllini ehtiva edən bir şey istədim. İndi bunu paylaşa bilərəm. İndi hər şeyi qaydasında danışaq.

Giriş

Hər şey bir müddət əvvəl Linux Mint-i iş kompüterimə yükləyəndə başladı. Yəqin ki, bir çox insanlar bilir ki, Sipe plaginli Pidgin Linux sistemləri üçün Microsoft Lync (indi biznes üçün Skype adlanır) üçün tamamilə uyğun bir əvəzdir. İşimin xüsusiyyətlərinə görə mən tez-tez SIP konfranslarında iştirak etməli oluram və mən Windows işçisi olanda konfranslara daxil olmaq elementar idi: poçtla dəvət alırıq, giriş linkinə klikləyirik və biz getməyə hazırıq. .

Linux-un qaranlıq tərəfinə keçərkən hər şey bir qədər mürəkkəbləşdi: əlbəttə ki, siz Pidgin-də konfranslara da daxil ola bilərsiniz, lakin bunun üçün SIP hesabınızın xüsusiyyətlərində menyudan konfransa qoşulma seçimini seçməlisiniz. açılan pəncərədə konfransa keçid daxil edin və ya təşkilatçının adını və conf id-ni daxil edin. Və bir müddət sonra düşünməyə başladım: "bunu bir şəkildə sadələşdirmək mümkündürmü?" Bəli, deyə bilərsiniz ki, cəhənnəmə niyə lazımdır?

Addım 1: Araşdırma

Nekrasov "Rusda kim yaxşı yaşayır" əsərində deyirdi: "Əgər başınızda bir şıltaqlıq varsa, onu payla vura bilməzsiniz".

Beləliklə, bir dəfə ağlıma bir fikir gəldi, bir müddət sonra həyata keçirmək üçün ilk fikir yarandı. Hər şey sadə görünürdü - bağlantılara girişi dayandırmaq lazımdır meet.company.com/user/confid — 127.0.0.1-də avtomobilinizdə yerli veb tətbiqetmə prosesini quraşdırın və /etc/hosts-da localhost-a işarə edərək konfransa daxil olduğunuz şirkət domeni üçün statik giriş əlavə edin. Bundan sonra, bu veb server ona gələn linki emal etməli və birtəhər onu Pidgin içərisinə köçürməlidir (dərhal deyəcəyəm ki, bu mərhələdə onu necə vermək barədə hələ heç bir fikrim yox idi). Həll yolu, əlbəttə ki, qoltuqağası kimi iyi gəlir, amma biz proqramçıyıq, qoltuqaltılar bizi qorxutmur (bok).

Sonra təsadüfən mən birtəhər Google Chrome-da dəvət linkini açdım (və adətən mən həmişə Mozilla Firefox-dan istifadə edirəm). Və məni təəccübləndirdi ki, veb səhifə tamamilə fərqli görünürdü - istifadəçi məlumatlarını daxil etmək üçün heç bir forma yox idi və səhifəyə daxil olduqdan dərhal sonra bir şey açmaq üçün bir sorğu gəldi. xdg-açıq. Sadəcə əylənmək üçün “bəli” düyməsini klikləyirəm və xəta mesajı görünür – lync15:confjoin?url=https://meet.company.com/user/confid linki açıla bilməz. Hmm. Bu hansı xdg-opendir və bu cür keçidlərin açılması üçün nə lazımdır? Sənədlərin ölümdən sonra oxunması müəyyən etdi ki, bu, ya uri sxemi üçün protokollar və ya xüsusi fayl növləri ilə əlaqəli tətbiqləri işə salmağa kömək edən GUI işləyicisidir. Assosiasiyalar mim tipli xəritələşdirmə vasitəsilə konfiqurasiya edilir. Beləliklə, biz adlanan bir uri sxemi üçün uyğun proqram üçün axtarış apardığımızı görürük lync15 və keçid xdg-open-ə ötürülür ki, bu da nəzəri olaraq onu bu tip keçid üçün cavabdeh olan hansısa proqrama ötürməlidir. Hansı ki, bizim sistemimizdə bu yoxdur. Yoxdursa, açıq mənbə dünyasında nə edirlər? Düzdü, özümüz yazacağıq.

Linux dünyasına daha çox dalmaq və xüsusən qrafik qabığın (masa üstü mühiti, DE) necə işlədiyini öyrənmək, yeri gəlmişkən, Linux Mint-də Xfce var, göstərdi ki, tətbiqlər və onunla əlaqəli mim tipləri adətən birbaşa olaraq yazılır. .desktop uzantılı qısa yol faylları. Yaxşı, niyə də olmasın, mən sadə proqram qısayolunu yaradıram, o, sadəcə olaraq bash skriptini işə salmalı və ona ötürülən arqumenti konsola çıxarmalıdır, mən yalnız qısayol faylının özünü təqdim edirəm:

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

Konsoldan xdg-open-i işə salıram, brauzerdən gələn eyni keçidi keçərək və... bummer. Yenə deyir ki, o, linki emal edə bilmir.

Göründüyü kimi, mən tətbiqimlə əlaqəli mime tiplərinin kataloqunu yeniləməmişəm. Bu sadə bir əmrlə edilir:

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

bu sadəcə faylı redaktə edir ~/.config/mimeapps.list.

Xdg-açıq zənglə 2 nömrəli cəhd - və yenə uğursuzluq. Heç nə, çətinliklər bizi qorxutmur, ancaq marağımızı artırır. Və bütün bash gücü ilə (yəni izləmə) silahlanmış olaraq, ilk növbədə sazlamaya başlayırıq. Burada qeyd etmək vacibdir ki, xdg-open sadəcə bir qabıq skriptidir.

bash -x xdg-open $url

İzləmədən sonra çıxışı təhlil etdikdən sonra nəzarətin ona ötürüldüyü bir az aydın olur exo-açıq. Və bu artıq ikili fayldır və arqumentdə ona keçid ötürərkən uğursuz qaytarma kodunu niyə qaytardığını başa düşmək daha çətindir.

Xdg-open-in daxili hissələrini nəzərdən keçirərək, onun müxtəlif ekoloji parametrləri təhlil etdiyini və nəzarəti müəyyən bir DE-yə xas fayl bağlantılarını açmaq üçün bəzi alətlərə ötürdüyünü və ya geri qaytarma funksiyası olduğunu öyrəndim. 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
}

Mən tez bir zamanda burada ötürülən arqumentin təhlili ilə kiçik bir hack yerləşdirəcəyəm və əgər bizim xüsusi alt sətirimiz orada yerləşirsə lync15:, onda biz dərhal nəzarəti funksiyaya köçürürük open_generic.

3 nömrəli cəhd və bunun işlədiyini düşünürsünüz? Bəli, indi, əlbəttə. Amma xəta mesajı artıq dəyişib, bu artıq irəliləyişdir - indi o mənə deyirdi ki, fayl tapılmayıb və fayl şəklində mənə eyni linki arqument kimi ötürüb yazıb.

Bu dəfə bir funksiya olduğu ortaya çıxdı is_file_url_or_path, girişə ötürülən fayl bağlantısını təhlil edən: file:// və ya faylın yolunu və ya başqa bir şey. Və bizim prefiksimizdə (url sxemi) nömrələr olduğundan və müntəzəm ifadə yalnız :alpha: nöqtə və tirelərdən ibarət simvol dəstini yoxlayır, çünki yoxlama düzgün işləmədi. üçün rfc3986 standartı ilə məsləhətləşdikdən sonra vahid resurs identifikatoru Aydın oldu ki, bu dəfə Microsoft heç nəyi pozmur (baxmayaraq ki, məndə belə bir versiya var idi). Sadəcə simvol sinfi :alpha: yalnız Latın əlifbasının hərflərini ehtiva edir. Mən tez adi çeki alfasayısal olaraq dəyişirəm. Bitdi, heyrətamizsən, nəhayət hər şey başlayır, bütün yoxlamalardan sonra nəzarət skript tətbiqimizə verilir, linkimiz konsolda göstərilir, hər şey olması lazım olduğu kimidir. Bundan sonra mən şübhələnməyə başlayıram ki, exo-open ilə bağlı bütün problemlər də sxemdəki nömrələrə görə link formatının təsdiqlənməsi ilə bağlıdır. Fərziyyəni yoxlamaq üçün tətbiqin mim tipli qeydiyyatını sadəcə sxemə dəyişirəm linç və voila - hər şey open_xfce funksiyasını ləğv etmədən işləyir. Ancaq bu, bizə heç bir şəkildə kömək etməyəcək, çünki konfransa daxil olmaq üçün veb səhifə lync15 ilə əlaqə yaradır.

Beləliklə, səyahətin birinci hissəsi başa çatdı. Biz bir keçid çağırışını necə kəsəcəyimizi bilirik və sonra onu birtəhər emal edib Pidgin daxilində ötürmək lazımdır. “Konfransa qoşulun” menyusuna keçid vasitəsilə məlumat daxil edərkən onun daxili necə işlədiyini başa düşmək üçün Sipe layihəsinin Git repozitoriyasını klonladım və yenidən koda daxil olmağa hazırlaşdım. Amma sonra, xoşbəxtlikdən, kataloqdakı ssenarilər məni cəlb etdi töhfə/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-organizer-and-id.pl ilə konfransa qoşulun
  • sipe-call-phone-number.pl
  • SipeHelper.pm

Məlum oldu ki, Sipe plagini dbus (masaüstü avtobus) vasitəsilə qarşılıqlı əlaqə üçün mövcuddur və skriptlərin içərisində təşkilatçının adı və conf-id vasitəsilə bir keçid vasitəsilə konfransa qoşulma nümunələri var və ya sip vasitəsilə zəngə başlaya bilərsiniz. . Bu, bizim çatışmayan cəhətimiz idi.

Addım 2. Avtomatik qoşulma işləyicisinin tətbiqi

Pearl-da hazır nümunələr olduğu üçün sadəcə istifadə etmək qərarına gəldim sipe-join-conference-with-uri.pl və özünüzə uyğunlaşdırmaq üçün bir az dəyişdirin. Mən Pearl-da yaza bilərəm, ona görə də heç bir xüsusi çətinlik yaratmadı.

Skripti ayrıca sınaqdan keçirdikdən sonra onun çağırışını fayla yazdım lync.desktop. Və bu qələbə idi! Konfransa qoşulma səhifəsinə daxil olduqda və xdg-open-in işə salınmasına icazə verdikdə, Pidgin-dən konfransın pop-up pəncərəsi avtomatik olaraq açılır. Nece sevindim.
Müvəffəqiyyətdən ruhlanaraq, eyni şeyi əsas brauzerim Mozilla Firefox üçün etmək qərarına gəldim. Tülkü vasitəsilə daxil olduqda, avtorizasiya üçün bir səhifə açılır və ən altında bir düymə var ofis kommunikatorundan istifadə edərək qoşulun. Diqqətimi çəkən o idi. Brauzerdə üzərinə kliklədiyiniz zaman o ünvana keçir:

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

ona mehribanlıqla deyir ki, onu necə açacağını bilmir və bəlkə də mənim belə bir protokol üçün əlaqəli ərizəm yoxdur. Yaxşı, biz artıq bu yolu keçmişik.

Skript proqramımı uri sxemi üçün də tez qeydiyyatdan keçirirəm conf və... heç nə olmur. Brauzer mənim bağlantılarımı idarə edən heç bir proqram olmadığından şikayət edir. Bu halda, parametrlərlə konsoldan xdg-open çağırmaq mükəmməl işləyir.

"Firefox-da xüsusi protokol işləyicisini təyin edin" - Bu sualla onlayn oldum. Stackoverflow ilə bağlı bir neçə müzakirədən keçdikdən sonra (və onsuz biz harada olardıq), deyəsən, cavab tapıldı. Xüsusi bir parametr yaratmalısınız Haqqında: config (əlbəttə foo-nu conf ilə əvəz etmək):

network.protocol-handler.expose.foo = false

Biz onu yaradırıq, linki açırıq və... belə bir şans yoxdur. Brauzer heç nə olmamış kimi bizim tətbiqimizi tanımadığını deyir.

Mozilla-dan protokolun qeydiyyatı ilə bağlı rəsmi sənədləri oxuyuram, gnome iş masasının özündə birləşmələri qeyd etmək imkanı var (əlbəttə ki, foo-nu conf ilə əvəz etmək):

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

Qeydiyyatdan keçirəm, brauzeri açıram... və yenə saqqal.

Sənədlərdən bir sətir diqqətimi çəkir:

Növbəti dəfə foo protokol tipli keçidə kliklədiyiniz zaman onu hansı proqramla açmağınız soruşulacaq.

- Semyon Semeniç
- Ahh

Biz linkə klikləmirik, lakin veb səhifə sadəcə olaraq javascript vasitəsilə pəncərənin yerini dəyişir. Mən conf protokoluna keçidi olan sadə bir html faylı yazıram, onu brauzerdə açın, linkə klikləyin - Yos! Linkimizi hansı proqramda açmalı olduğumuzu soruşan bir pəncərə açılır və orada artıq siyahıda Lync tətbiqimiz var - biz onu bütün mümkün yollarla vicdanla qeydiyyatdan keçirdik. Pəncərədə "seçimi yadda saxla və həmişə tətbiqimizdə bağlantıları aç" qutusu var, onu qeyd edin, ok düyməsini basın. Bu da ikinci qələbədir - konfrans pəncərəsi açılır. Eyni zamanda, konfransların açılması yalnız linkə tıkladığınız zaman deyil, həm də qoşulma səhifəsindən konfransa keçərkən də işləyir.

Sonra parametrləri silərək yoxladım network.protocol-handler.expose.conf Foxdakı protokolun işinə heç bir şəkildə təsir etmədi. Bağlantılar işləməyə davam etdi.

Nəticə

Mən bütün işlərimi GitHub repozitoriyasına yükləmişəm, bütün resurslara keçidlər məqalənin sonunda olacaq.
İşimdən istifadə etmək istəyənlərdən rəy almaqda maraqlı olacağam. Dərhal qeyd etməliyəm ki, mən bütün inkişafı yalnız Linux Mint sistemim üçün etmişəm, ona görə də bəzi digər paylanmalar və ya masaüstləri həmin versiyada işləməyə bilər. Daha doğrusu, buna demək olar ki, əminəm, çünki xdg-open-də yalnız DE-yə aid olan yalnız 1 funksiyanı yamaqladım. Digər sistemlər və ya masaüstləri üçün dəstək əlavə etmək istəyirsinizsə, mənə Github-da pull sorğuları yazın.

Bütün layihənin tamamlanması 1 axşam çəkdi.

Referanslar:

Mənbə: www.habr.com

Добавить комментарий