Linux'ta Lync konferanslarına otomatik oturum açma

Ey Habr!

Benim için bu cümle merhaba dünyaya benziyor, çünkü sonunda ilk yayınıma ulaştım. Yazacak hiçbir şey olmadığı için bu harika anı uzun süre erteledim ve zaten birçok kez emilen bir şeyi emmek de istemedim. Genel olarak, ilk yayınım için orijinal, başkaları için yararlı ve bir tür meydan okuma ve problem çözme içeren bir şey istedim. Ve artık bunu paylaşabilirim. Şimdi her şeyi sırayla konuşalım.

Giriş

Her şey bir süre önce iş bilgisayarıma Linux Mint'i indirdiğimde başladı. Pek çok kişi muhtemelen Sipe eklentisine sahip Pidgin'in Linux sistemleri için Microsoft Lync'in (şu anda iş için Skype olarak adlandırılıyor) tamamen uygun bir alternatifi olduğunu biliyor. İşimin özellikleri nedeniyle sık sık SIP konferanslarına katılmak zorunda kalıyorum ve Windows çalışanı olduğumda konferanslara katılmak basit bir işlemdi: Posta yoluyla bir davetiye alıyoruz, oturum açma bağlantısına tıklıyoruz ve gitmeye hazırız .

Linux'un karanlık tarafına geçtiğinizde her şey biraz daha karmaşık hale geldi: Elbette Pidgin'deki konferanslara da giriş yapabilirsiniz, ancak bunu yapmak için SIP hesabınızın özelliklerindeki menüden konferansa katıl seçeneğini seçmeniz ve Açılan pencerede konferansın bağlantısını ekleyin veya organizatörün adını ve gizli kimliğini girin. Ve bir süre sonra şunu düşünmeye başladım: "Bunu bir şekilde basitleştirmek mümkün mü?" Evet, buna neden ihtiyacın var diyebilirsiniz, Windows'ta oturup aklımı kaçırmamayı tercih ederim.

1. Adım: Araştırma

Nekrasov, "Rusya'da Kim İyi Yaşıyor" adlı çalışmasında "Kafanızda bir heves varsa, onu kazıkla vuramazsınız" dedi.

Böylece, bu fikir aklıma geldikten sonra, bir süre sonra ilk uygulama fikri ortaya çıktı. Her şey basit görünüyordu; bağlantılara erişimi engellemeniz gerekiyor meet.company.com/user/confid - arabanıza 127.0.0.1 adresinde yerel bir web uygulaması işlemi yükleyin ve /etc/hosts dizinine, konferansa girdiğiniz şirket etki alanı için localhost'u işaret eden statik bir giriş ekleyin. Daha sonra, bu web sunucusunun kendisine gelen bağlantıyı işlemesi ve bir şekilde Pidgin'in içine aktarması gerekiyor (hemen şunu söyleyeceğim ki, bu aşamada ona nasıl vereceğime dair hiçbir fikrim yoktu). Çözüm elbette koltuk değneği gibi kokuyor ama biz programcıyız, koltuk değnekleri bizi korkutmaz (bok).

Daha sonra şans eseri Google Chrome'da davetiye bağlantısını bir şekilde açtım (ve genellikle her zaman Mozilla Firefox kullanırım). Ve beni şaşırtan şekilde, web sayfası tamamen farklı görünüyordu - kullanıcı verilerini girmek için bir form yoktu ve sayfaya girdikten hemen sonra bir şeyin açılması için bir istek geldi xdg açık. Sırf eğlence olsun diye "evet"e tıklıyorum ve bir hata mesajı beliriyor - lync15:confjoin?url=https://meet.company.com/user/confid bağlantısı açılamıyor. Hmm. Bu ne tür bir xdg-open'dir ve bu tür bağlantıların açılabilmesi için neye ihtiyacı vardır? Belgelerin ölüm sonrası okunması, bunun, uri şemasına yönelik protokollerle veya belirli dosya türleriyle ilişkili uygulamaların çalıştırılmasına yardımcı olan bir GUI işleyicisi olduğunu ortaya çıkardı. İlişkiler mime tipi eşleme yoluyla yapılandırılır. Adlı bir uri şeması için eşleşen bir uygulama için arama yaptığımızı görüyoruz. Lync15 ve bağlantı xdg-open'a iletilir, o zaman teorik olarak onu bu tür bağlantılardan sorumlu bazı uygulamalara iletmesi gerekir. Tabii ki sistemimizde yok. Değilse, açık kaynak dünyasında ne yapıyorlar? Doğru, kendimiz yazacağız.

Linux dünyasına daha fazla dalmak ve özellikle grafik kabuğunun (masaüstü ortamı, DE) nasıl çalıştığını incelemek, bu arada, Linux Mint'te Xfce'im var, uygulamaların ve onunla ilişkili mime türünün genellikle doğrudan yazıldığını gösterdi. .desktop uzantılı kısayol dosyaları. Peki, neden olmasın, basit bir uygulama kısayolu oluşturuyorum, bu kısayol basitçe bir bash betiğini başlatacak ve ona iletilen argümanı konsola gönderecek, yalnızca kısayol dosyasının kendisini sağlıyorum:

[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 başlatıyorum, tarayıcıdan gelen aynı bağlantıyı geçiyorum ve... serseri. Yine bağlantıyı işleyemediğini söylüyor.

Görünen o ki, ilgili mime türlerinin dizinini uygulamamla güncellemedim. Bu basit bir komutla yapılır:

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

bu sadece dosyayı düzenler ~/.config/mimeapps.list.

2 numarayı xdg-open çağrısıyla deneyin - ve yine başarısızlık. Hiçbir şey, zorluklar bizi korkutmuyor, sadece ilgimizi artırıyor. Ve bash'ın (yani izlemenin) tüm gücüyle donanmış olarak, balıklama atlayarak hata ayıklamaya dalıyoruz. Burada xdg-open'ın yalnızca bir kabuk betiği olduğuna dikkat etmek önemlidir.

bash -x xdg-open $url

İzlemeden sonra çıktıyı analiz ettiğimizde kontrolün daha sonra aktarıldığı biraz açık hale gelir. exo-açık. Ve bu zaten bir ikili dosyadır ve bir argümanda ona bir bağlantı iletildiğinde neden başarısız bir dönüş kodu döndürdüğünü anlamak daha zordur.

xdg-open'in iç kısımlarını inceledikten sonra, çeşitli çevresel parametreleri analiz ettiğini ve kontrolü belirli bir DE'ye özel dosya bağlantılarını açmak için bazı araçlara aktardığını veya bir geri dönüş işlevine sahip olduğunu öğrendim. 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
}

Buraya hızlı bir şekilde iletilen argümanın analizini ve özel alt dizimizin orada bulunup bulunmadığını içeren küçük bir hack ekleyeceğim lync15:, ardından kontrolü hemen fonksiyona aktarırız open_generic.

3 numarayı deneyin ve işe yaradığını mı düşünüyorsunuz? Evet, şimdi elbette. Ancak hata mesajı zaten değişti, bu zaten bir ilerleme - şimdi bana dosyanın bulunamadığını ve bir dosya biçiminde bana yazdığı aynı bağlantıyı argüman olarak ilettiğini söylüyordu.

Bu sefer bir fonksiyon olduğu ortaya çıktı is_file_url_or_path, girişe iletilen dosya bağlantısını analiz eder: file:// veya dosyanın yolu veya başka bir şey. Ve ön ekimizin (url şeması) sayılara sahip olması ve normal ifadenin yalnızca :alpha: nokta ve çizgilerden oluşan karakter kümesini kontrol etmesi nedeniyle kontrol düzgün çalışmadı. rfc3986 standardına danıştıktan sonra Tekdüzen Kaynak Tanımlayıcı Bu sefer Microsoft'un hiçbir şeyi ihlal etmediği ortaya çıktı (böyle bir sürümüm olmasına rağmen). Yalnızca :alpha: karakter sınıfı yalnızca Latin alfabesindeki harfleri içerir. Normal kontrolü hızla alfanümerik olarak değiştiriyorum. Bitti, harikasınız, sonunda her şey başlıyor, tüm kontroller yapıldıktan sonra kontroller script uygulamamıza veriliyor, bağlantımız konsolda görünüyor, her şey olması gerektiği gibi. Bundan sonra exo-open ile ilgili tüm sorunların, şemadaki sayılardan dolayı bağlantı formatının doğrulanmasından da kaynaklandığından şüphelenmeye başladım. Hipotezi test etmek için uygulamanın mime tipi kaydını sadece bir şemaya dönüştürüyorum Lync ve işte - her şey open_xfce işlevini geçersiz kılmadan çalışıyor. Ancak bunun bize hiçbir faydası olmayacak çünkü konferansa giriş için kullanılan web sayfası lync15 ile bağlantı oluşturuyor.

Böylece yolculuğun ilk kısmı tamamlandı. Bir bağlantı çağrısının nasıl ele geçirileceğini biliyoruz ve daha sonra bunun bir şekilde işlenip Pidgin'e aktarılması gerekiyor. “Konferansa katıl” menüsündeki bağlantı üzerinden veri girerken dahili olarak nasıl çalıştığını anlamak için Sipe projesinin Git deposunu klonladım ve tekrar koda dalmaya hazırlandım. Ama sonra şans eseri katalogdaki senaryolar ilgimi çekti. katkı/dbus/:

  • uri.pl ile sipe-katılma-konferansı
  • sipe-join-konferansı-organizatör-ve-id.pl ile
  • sipe-call-telefon-numarası.pl
  • SipeHelper.pm

Sipe eklentisinin dbus (masaüstü veri yolu) aracılığıyla etkileşim için uygun olduğu ve komut dosyalarının içinde, organizatörün adı ve conf-id aracılığıyla bir bağlantı aracılığıyla bir konferansa katılma örnekleri olduğu veya sip yoluyla bir çağrı başlatabileceğiniz ortaya çıktı. . Eksikliğimiz tam olarak buydu.

Adım 2. Otomatik birleştirme işleyicisinin uygulanması

Pearl'de hazır örnekler olduğu için sadece kullanmaya karar verdim. uri.pl ile sipe-katılma-konferansı ve kendinize uyacak şekilde biraz değiştirin. Pearl'de yazabiliyorum, dolayısıyla herhangi bir zorluğa neden olmadı.

Betiği ayrı ayrı test ettikten sonra çağrısını dosyaya yazdım. lync.masaüstü. Ve bu bir zaferdi! Konferansa katılma sayfasına girildiğinde ve xdg-open'ın çalışmasına izin verildiğinde, Pidgin'in konferans açılır penceresi otomatik olarak açılıyordu. Nasıl sevindim.
Başarının verdiği cesaretle, aynısını ana tarayıcım Mozilla Firefox için yapmaya karar verdim. Fox üzerinden giriş yaptığınızda yetkilendirme için bir sayfa açılıyor ve en altta buton var ofis iletişimcisini kullanarak katılma. Dikkatimi çeken o oldu. Tarayıcıda tıkladığınızda şu adrese gider:

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

bana nazikçe onu nasıl açacağını bilmediğini ve belki de böyle bir protokol için ilişkili bir uygulamamın olmadığını söyledi. Neyse, bunu zaten yaşadık.

Komut dosyası uygulamamı uri şeması için de hızlı bir şekilde kaydediyorum conf ve... hiçbir şey olmuyor. Tarayıcı, bağlantılarımı işleyen bir uygulama olmadığından şikayet etmeye devam ediyor. Bu durumda xdg-open'ı konsoldan parametrelerle çağırmak mükemmel çalışır.

“Firefox'ta özel protokol işleyicisini ayarla” - Bu soruyla çevrimiçi oldum. Yığın akışıyla ilgili çeşitli tartışmalardan geçtikten sonra (ve onsuz nerede olurduk), yanıt bulunmuş gibi görünüyor. Özel bir parametre oluşturmanız gerekir about: config (tabii ki foo'yu conf ile değiştirerek):

network.protocol-handler.expose.foo = false

Oluşturuyoruz, bağlantıyı açıyoruz ve... böyle bir şans yok. Tarayıcı sanki hiçbir şey olmamış gibi uygulamamızı bilmediğini söylüyor.

Mozilla'dan bir protokol kaydetmeye ilişkin resmi belgeleri okuyorum, gnome masaüstünün kendisinde ilişkileri kaydetme seçeneği var (tabii ki foo'yu conf ile değiştirmek):

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

Kaydoluyorum, tarayıcıyı açıyorum... ve yine sakalı.

Burada belgelerden bir satır gözüme çarpıyor:

Bir dahaki sefere foo protokol tipindeki bir bağlantıya tıkladığınızda, onu hangi uygulamayla açacağınız sorulacaktır.

— Semyon Semenıç
- Ahh

Bağlantıya tıklamıyoruz, ancak web sayfası javascript aracılığıyla window.location'ı değiştiriyor. Conf protokolüne bağlantı içeren basit bir html dosyası yazıyorum, tarayıcıda açıyorum, bağlantıya tıklıyorum - Evet! Bağlantımızı hangi uygulamada açmamız gerektiğini soran bir pencere açılıyor ve orada Lync uygulamamız zaten listede var - onu mümkün olan tüm yollarla dürüstçe kaydettik. Pencerede "seçimi hatırla ve bağlantıları her zaman uygulamamızda aç" onay kutusu vardır, işaretleyin ve tamam'a tıklayın. Ve bu ikinci zafer; konferans penceresi açılıyor. Aynı zamanda konferans açma işlemi yalnızca bir bağlantıya tıkladığınızda değil, aynı zamanda ihtiyacımız olan katılım sayfasından konferansa geçtiğinizde de çalışır.

Sonra kontrol ettim, parametreleri sildim network.protocol-handler.expose.conf Fox'taki protokolün işleyişini hiçbir şekilde etkilemedi. Bağlantılar çalışmaya devam etti.

Sonuç

Tüm çalışmalarımı GitHub deposuna yükledim; tüm kaynaklara bağlantılar makalenin sonunda olacak.
Çalışmalarımı kullanmak isteyenlerden geri bildirim almakla ilgileneceğim. Tüm geliştirmeyi sadece Linux Mint sistemim için yaptığımı hemen belirtmeliyim, dolayısıyla diğer bazı dağıtımlar veya masaüstü bilgisayarlar bu sürümde çalışmayabilir. Daha doğrusu, bundan neredeyse eminim çünkü xdg-open'da yalnızca DE'mle ilgili olan yalnızca 1 işlevi yamaladım. Diğer sistemler veya masaüstü bilgisayarlar için destek eklemek istiyorsanız bana Github'dan çekme istekleri yazın.

Tüm projenin tamamlanması 1 akşam sürdü.

Bağlantılar:

Kaynak: habr.com

Yorum ekle