Linuxda Lync konferentsiyalariga avtomatik kirish

Hey Xabr!

Men uchun bu ibora salom dunyoga o'xshaydi, chunki men nihoyat birinchi nashrimga erishdim. Men bu ajoyib lahzani uzoq vaqtga qoldirdim, chunki yozadigan hech narsa yo'q edi va men allaqachon bir necha marta so'rilgan narsani so'rib olishni xohlamadim. Umuman olganda, birinchi nashrim uchun men boshqalar uchun foydali bo'lgan va qandaydir muammo va muammolarni hal qilishni o'z ichiga olgan o'ziga xos narsani xohlardim. Va endi men buni baham ko'rishim mumkin. Endi hamma narsa haqida tartibda gaplashaylik.

kirish

Hammasi bir muncha vaqt oldin ish kompyuterimga Linux Mint-ni yuklab olganimdan boshlandi. Ko'p odamlar, ehtimol, Sipe plaginiga ega Pidgin Linux tizimlari uchun Microsoft Lync (hozirda biznes uchun Skype deb ataladi) o'rniga to'liq mos kelishini bilishadi. Ishimning o'ziga xos xususiyatlaridan kelib chiqqan holda, men tez-tez SIP konferentsiyalarida qatnashishga majburman va men Windows ishchisi bo'lganimda konferentsiyalarga kirish oddiy edi: biz pochta orqali taklifnoma olamiz, kirish havolasini bosing va biz borishga tayyormiz. .

Linux-ning qorong'u tomoniga o'tishda hamma narsa biroz murakkablashdi: albatta, siz Pidgin-dagi konferentsiyalarga ham kirishingiz mumkin, ammo buning uchun siz SIP hisob qaydnomangiz xususiyatlaridagi menyuda konferentsiyaga qo'shilish opsiyasini tanlashingiz kerak va ochilgan oynada konferentsiyaga havolani kiriting yoki tashkilotchi nomini va conf id-ni kiriting. Va bir muncha vaqt o'tgach, men o'ylay boshladim: "Buni qandaydir soddalashtirish mumkinmi?" Ha, bu sizga nima uchun kerak, deb ayta olasizmi?

1-qadam: Tadqiqot

Nekrasov o'zining "Rossiyada kim yaxshi yashaydi" asarida: "Agar sizning boshingizda injiqlik paydo bo'lsa, uni qoziq bilan yo'q qila olmaysiz."

Shunday qilib, bir marta mening boshimga bir fikr kelgan, bir muncha vaqt o'tgach, amalga oshirish uchun birinchi g'oya paydo bo'ldi. Hammasi oddiy bo'lib tuyuldi - siz havolalarga kirishni to'xtatishingiz kerak meet.company.com/user/confid β€” 127.0.0.1-da avtomobilingizga mahalliy veb-ilova jarayonini o'rnating va /etc/hosts-da localhost-ga ishora qilib, konferentsiyaga kiradigan kompaniya domeni uchun statik yozuvni qo'shing. Keyinchalik, ushbu veb-server unga kelgan havolani qayta ishlashi va uni qandaydir tarzda Pidgin ichiga o'tkazishi kerak (darhol aytaman, bu bosqichda men uni qanday berishni hali ham bilmasdim). Yechim, albatta, qo'ltiq tayoq kabi hidlaydi, lekin biz dasturchilarmiz, tayoqchalar bizni qo'rqitmaydi (bo'r).

Keyin, tasodifan, men qandaydir tarzda Google Chrome-da taklifnoma havolasini ochdim (va odatda men har doim Mozilla Firefox-dan foydalanaman). Ajablanarlisi shundaki, veb-sahifa butunlay boshqacha ko'rinishga ega edi - foydalanuvchi ma'lumotlarini kiritish uchun hech qanday shakl yo'q edi va sahifaga kirgandan so'ng darhol biror narsa ochish so'rovi paydo bo'ldi. xdg-ochiq. Faqat o'yin-kulgi uchun men "ha" tugmasini bosing va xato xabari paydo bo'ladi - lync15:confjoin?url=https://meet.company.com/user/confid havolasini ochib bo'lmaydi. Hmm. Bu qanday xdg-open va bunday havolalar ochilishi uchun nima kerak? Hujjatlarni o'limdan so'ng o'qish shuni ko'rsatdiki, u uri sxemasi uchun protokollar yoki muayyan fayl turlari bilan bog'langan ilovalarni ishga tushirishga yordam beradigan GUI ishlov beruvchisi. Uyushmalar mim-tipli xaritalash orqali sozlangan. Shunday qilib, biz uri sxemasi uchun mos keladigan dasturni qidirayotganimizni ko'ramiz lync15 va havola xdg-open ga uzatiladi, bu esa nazariy jihatdan uni ushbu turdagi havola uchun mas'ul bo'lgan ba'zi ilovalarga o'tkazishi kerak. Bu, albatta, bizning tizimimizda yo'q. Agar yo'q bo'lsa, ular ochiq manba dunyosida nima qilishadi? To'g'ri, o'zimiz yozamiz.

Linux dunyosiga yanada chuqurroq kirib borish va ayniqsa grafik qobiq (ish stoli muhiti, DE) qanday ishlashini o'rganish, aytmoqchi, menda Linux Mint-da Xfce bor, ilovalar va u bilan bog'liq mim-turi odatda to'g'ridan-to'g'ri yozilganligini ko'rsatdi. .desktop kengaytmali yorliq fayllari. Xo'sh, nima uchun emas, men oddiy dastur yorlig'ini yarataman, u oddiygina bash skriptini ishga tushiradi va unga uzatilgan argumentni konsolga chiqaradi, men faqat yorliq faylining o'zini taqdim etaman:

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

Men konsoldan xdg-openni ishga tushiraman, brauzerdan kelgan bir xil havolani o'tkazaman va ... bummer. Yana u havolani qayta ishlay olmasligini aytadi.

Ma'lum bo'lishicha, men ilovam bilan bog'langan mime-turlar katalogini yangilamadim. Bu oddiy buyruq bilan amalga oshiriladi:

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

bu shunchaki faylni tahrir qiladi ~/.config/mimeapps.list.

Xdg-ochiq qo'ng'iroq bilan 2-urinish - va yana muvaffaqiyatsiz. Hech narsa, qiyinchiliklar bizni qo'rqitmaydi, balki faqat qiziqishimizni kuchaytiradi. Va barcha bash (ya'ni kuzatish) kuchi bilan qurollangan holda, biz nosozliklarni tuzatishga kirishamiz. Shuni ta'kidlash kerakki, xdg-open shunchaki qobiq skriptidir.

bash -x xdg-open $url

Kuzatishdan so'ng chiqishni tahlil qilish, keyin boshqaruvga o'tkazilishi biroz aniq bo'ladi ekzo ochiq. Va bu allaqachon ikkilik fayl va argumentda unga havolani uzatishda nima uchun muvaffaqiyatsiz qaytish kodini qaytarishini tushunish qiyinroq.

Xdg-open-ning ichki qismlarini ko'rib chiqqach, men u turli xil atrof-muhit parametrlarini tahlil qilishini va boshqaruvni ma'lum bir DE-ga xos fayl havolalarini ochish uchun ba'zi vositalarga o'tkazishini yoki qayta tiklash funktsiyasiga ega ekanligini bilib oldim. ochiq_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
}

Men bu yerga tezda o'tkazilgan argument tahlili bilan kichik hackni joylashtiraman va agar bizning maxsus pastki qatorimiz u erda joylashgan bo'lsa lync15:, keyin biz darhol boshqaruvni funktsiyaga o'tkazamiz ochiq_generic.

3-urinish va u ishladi deb o'ylaysizmi? Ha, endi, albatta. Ammo xato xabari allaqachon o'zgargan, bu allaqachon progress - endi u menga fayl topilmaganini aytdi va fayl ko'rinishida menga xuddi shu havolani argument sifatida yozdi.

Bu safar u funktsiya bo'lib chiqdi is_fayl_url_yoki_path, kirishga uzatilgan fayl havolasini tahlil qiladi: file:// yoki faylga yo'l yoki boshqa narsa. Bizning prefiksimiz (url sxemasi) raqamlarga ega bo'lganligi sababli tekshirish to'g'ri ishlamadi va muntazam ifoda faqat :alpha: nuqta va tirelardan iborat belgilar to'plamini tekshiradi. uchun rfc3986 standarti bilan maslahatlashgandan so'ng yagona resurs identifikatori Bu safar Microsoft hech narsani buzmayotgani aniq bo'ldi (garchi menda bunday versiya bor edi). Faqat belgilar sinfi :alpha: faqat lotin alifbosining harflarini o'z ichiga oladi. Men tezda oddiy chekni alfanumerikga o'zgartiraman. Bajarildi, siz ajoyibsiz, nihoyat hamma narsa boshlanadi, barcha tekshiruvlardan so'ng nazorat bizning skript ilovamizga beriladi, bizning havolamiz konsolda ko'rsatiladi, hamma narsa bo'lishi kerak. Shundan so'ng, men exo-open bilan bog'liq barcha muammolar, shuningdek, sxemadagi raqamlar tufayli havola formatini tekshirish bilan bog'liq deb gumon qila boshlayman. Gipotezani sinab ko'rish uchun men dasturning mim tipidagi ro'yxatdan o'tishini shunchaki sxemaga o'zgartiraman silovsin va voila - hamma narsa open_xfce funksiyasini bekor qilmasdan ishlaydi. Ammo bu bizga hech qanday yordam bermaydi, chunki konferentsiyaga kirish uchun veb-sahifa lync15 bilan havola yaratadi.

Shunday qilib, sayohatning birinchi qismi yakunlandi. Biz havola qo'ng'irog'ini qanday ushlab turishni bilamiz va keyin uni qandaydir tarzda qayta ishlash va Pidgin ichiga o'tkazish kerak. "Konferentsiyaga qo'shilish" menyusidagi havola orqali ma'lumotlarni kiritishda uning qanday ishlashini tushunish uchun men Sipe loyihasining Git omborini klonladim va yana kodga kirishga tayyor bo'ldim. Ammo keyin, xayriyatki, katalogdagi skriptlar meni o'ziga tortdi hissa/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-qo'shilish-konferentsiya-organizer-and-id.pl
  • sipe-call-phone-number.pl
  • SipeHelper.pm

Ma'lum bo'lishicha, Sipe plagini dbus (ish stoli avtobusi) orqali o'zaro aloqada bo'lishi mumkin va skriptlar ichida tashkilotchi nomi va konf-identifikatori orqali havola orqali konferentsiyaga qo'shilish misollari mavjud yoki siz sip orqali qo'ng'iroqni boshlashingiz mumkin. . Aynan shu narsa bizga etishmayotgan edi.

2-qadam. Avtomatik qo'shilish ishlovchisini amalga oshirish

Pearl-da tayyor misollar borligi sababli, men shunchaki foydalanishga qaror qildim sipe-join-conference-with-uri.pl va uni o'zingizga moslashtirish uchun biroz o'zgartiring. Men Pearl-da yozishim mumkin, shuning uchun u hech qanday qiyinchilik tug'dirmadi.

Skriptni alohida sinab ko'rganimdan so'ng, men uning chaqiruvini faylga yozdim lync.desktop. Va bu g'alaba edi! Konferentsiyaga qo'shilish sahifasiga kirganingizda va xdg-open-ni ishga tushirishga ruxsat berilganda, Pidgin-dan konferentsiya qalqib chiquvchi oynasi avtomatik ravishda ochiladi. Qanday xursand bo'ldim.
Muvaffaqiyatdan ruhlanib, men asosiy brauzerim Mozilla Firefox uchun ham shunday qilishga qaror qildim. Tulki orqali tizimga kirganingizda, avtorizatsiya sahifasi ochiladi va eng pastki qismida tugma mavjud ofis kommunikatori yordamida qo'shiling. U mening e'tiborimni tortdi. Brauzerda uni bosganingizda, u quyidagi manzilga o'tadi:

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

u menga mehribonlik bilan uni qanday ochishni bilmasligini aytadi va, ehtimol, menda bunday protokol uchun tegishli ariza yo'q. Xo'sh, biz buni allaqachon boshdan kechirganmiz.

Men tezda uri sxemasi uchun skript ilovamni ro'yxatdan o'tkazaman conf va ... hech narsa sodir bo'lmaydi. Brauzer mening havolalarimni boshqaradigan dastur yo'qligidan shikoyat qiladi. Bunday holda, parametrlar bilan konsoldan xdg-openni chaqirish juda yaxshi ishlaydi.

"Firefox-da maxsus protokol ishlovchisini o'rnatish" - Men ushbu savol bilan onlayn bo'ldim. Stackoverflow bo'yicha bir nechta muhokamalardan o'tgandan so'ng (va usiz qayerda bo'lardik), javob topilganga o'xshaydi. Siz maxsus parametrni yaratishingiz kerak haqida: config (albatta foo o'rniga conf):

network.protocol-handler.expose.foo = false

Biz uni yaratamiz, havolani ochamiz va ... bunday omad yo'q. Brauzer, xuddi hech narsa bo'lmagandek, bizning dasturimizni bilmasligini aytadi.

Men Mozilla-dan protokolni ro'yxatdan o'tkazish bo'yicha rasmiy hujjatlarni o'qiyapman, gnome ish stolining o'zida assotsiatsiyalarni ro'yxatdan o'tkazish imkoniyati mavjud (foo ni conf bilan almashtiring, albatta):

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

Men ro'yxatdan o'tdim, brauzerni ochaman ... va yana soqol.

Hujjatlardan bir qator e'tiborimni tortdi:

Keyingi safar foo protokoli havolasini bosganingizda uni qaysi dastur bilan ochishingiz so'raladi.

- Semyon Semenich
- Ahh

Biz havolani bosmaymiz, lekin veb-sahifa shunchaki javascript orqali window.location-ni o'zgartiradi. Men oddiy html faylni conf protokoliga havola bilan yozaman, uni brauzerda ochaman, havolani bosing - Yos! Qaysi dasturda havolani ochishimiz kerakligini so'rab oyna ochiladi va u erda bizda Lync ilovasi allaqachon ro'yxatda mavjud - biz uni barcha mumkin bo'lgan usullarda ro'yxatdan o'tkazdik. Oynada "tanlovni eslab qoling va har doim ilovamizdagi havolalarni oching" katagiga belgi qo'ying, OK tugmasini bosing. Va bu ikkinchi g'alaba - konferentsiya oynasi ochiladi. Shu bilan birga, konferentsiyalarni ochish nafaqat havolani bosganingizda, balki qo'shilish sahifasidan konferentsiyaga o'tishda ham ishlaydi.

Keyin parametrlarni o'chirib, tekshirdim network.protocol-handler.expose.conf Fox-dagi protokolning ishlashiga hech qanday ta'sir ko'rsatmadi. Ulanishlar ishlashda davom etdi.

xulosa

Men barcha ishlarimni GitHub omboriga yukladim; barcha manbalarga havolalar maqolaning oxirida bo'ladi.
Mening ishimdan foydalanmoqchi bo'lganlarning fikr-mulohazalarini olishga qiziqaman. Darhol shuni ta'kidlashim kerakki, men barcha ishlanmalarni faqat Linux Mint tizimim uchun qildim, shuning uchun boshqa tarqatishlar yoki ish stollari bu versiyada ishlamasligi mumkin. To'g'rirog'i, men bunga deyarli aminman, chunki xdg-open-da faqat DE-ga tegishli 1 ta funktsiyani tuzatdim. Agar siz boshqa tizimlar yoki ish stollari uchun qo'llab-quvvatlashni qo'shmoqchi bo'lsangiz, menga Github-da pull so'rovlarini yozing.

Butun loyihani yakunlash uchun 1 kecha vaqt ketdi.

Manbalar:

Manba: www.habr.com

a Izoh qo'shish