Linux жүйесіндегі Lync конференцияларына автоматты түрде кіру

Эй Хабр!

Мен үшін бұл сөз тіркесі сәлем әлеміне ұқсайды, өйткені мен бірінші басылымыма жеттім. Мен бұл керемет сәтті ұзақ уақытқа қалдырдым, өйткені бұл туралы жазатын ештеңе жоқ, сонымен қатар бірнеше рет сорып алған нәрсені сорғым келмеді. Тұтастай алғанда, менің бірінші жарияланым үшін мен басқаларға пайдалы және қандай да бір қиындықтар мен проблемаларды шешуді қамтитын түпнұсқалық нәрсені қаладым. Енді мен мұны бөлісе аламын. Енді барлығын ретімен айтайық.

кіру

Мұның бәрі біраз уақыт бұрын жұмыс компьютеріме Linux Mint жүктеп алған кезде басталды. Көптеген адамдар Sipe плагині бар Pidgin Linux жүйелері үшін Microsoft Lync (қазір бизнеске арналған Skype деп аталады) үшін толығымен қолайлы алмастырғыш екенін білуі мүмкін. Жұмысымның ерекшелігіне байланысты мен жиі SIP конференцияларына қатысуға тура келеді, мен Windows жұмысшысы болған кезде конференцияларға қатысу қарапайым болды: біз пошта арқылы шақыру аламыз, кіру сілтемесін басыңыз және біз баруға дайынбыз. .

Linux-тың қараңғы жағына ауысқанда, бәрі біршама күрделене түсті: әрине, сіз Pidgin-де конференцияларға да кіре аласыз, бірақ бұл үшін SIP тіркелгіңіздің сипаттарындағы мәзірден конференцияға қосылу опциясын таңдауыңыз керек және ашылған терезеде конференцияға сілтеме енгізіңіз немесе ұйымдастырушының атын және конф. идентификаторын енгізіңіз. Біраз уақыттан кейін мен ойлай бастадым: «Мұны қандай да бір жолмен жеңілдету мүмкін бе?» Иә, сіз бұл не үшін керек деп айта аласыз, мен Windows жүйесінде отырып, ойымды қалдырмаймын.

1-қадам: Зерттеу

Некрасов өзінің «Ресейде кім жақсы өмір сүреді» атты еңбегінде: «Егер сіздің басыңызда қандай да бір қыңырлық пайда болса, оны қазықпен жеңе алмайсыз», - деді.

Сонымен, бір ой менің басыма түскенде, біраз уақыттан кейін іске асырудың алғашқы идеясы пайда болды. Барлығы қарапайым болып көрінді - сілтемелерге қол жеткізуді тоқтату керек meet.company.com/user/confid — 127.0.0.1 мекенжайында көлігіңізге жергілікті веб-бағдарлама процесін орнатыңыз және /etc/hosts ішінде жергілікті хостты көрсете отырып, конференцияға кіретін компания доменіне статикалық жазба қосыңыз. Әрі қарай, бұл веб-сервер оған келген сілтемені өңдеп, оны қандай да бір жолмен Pidgin ішіне жіберуі керек (бірден айтамын, бұл кезеңде мен оны қалай беру керектігін білмедім). Шешім, әрине, балдақтың иісі бар, бірақ біз программистпіз, балдақтар бізді қорқытпайды (боқ).

Содан кейін, кездейсоқ, мен Google Chrome-да шақыру сілтемесін аштым (және мен әдетте Mozilla Firefox-ты қолданамын). Мені таң қалдырғаным, веб-бет мүлдем басқаша көрінді - пайдаланушы деректерін енгізуге арналған пішін жоқ және бетке кіргеннен кейін бірден бірдеңені ашу туралы сұрау болды. xdg-ашық. Тек көңіл көтеру үшін мен «иә» түймесін басыңыз және қате туралы хабар пайда болады - lync15:confjoin?url=https://meet.company.com/user/confid сілтемесін ашу мүмкін емес. Хмм. Бұл қандай xdg-open және мұндай сілтемелер ашылуы үшін оған не қажет? Құжаттаманы өлгеннен кейін оқу оның uri схемасына арналған хаттамалармен немесе белгілі бір файл түрлерімен байланысты қолданбаларды іске қосуға көмектесетін GUI өңдегіші екенін көрсетті. Ассоциациялар мим түріндегі салыстыру арқылы конфигурацияланады. Осылайша, біз uri схемасы үшін сәйкес қолданбаны іздеуді жүргізіп жатқанымызды көреміз lync15 және сілтеме xdg-open-ге жіберіледі, содан кейін ол теориялық түрде оны сілтеменің осы түріне жауапты кейбір қолданбаға беруі керек. Бұл, әрине, біздің жүйеде жоқ. Егер жоқ болса, олар ашық бастапқы әлемде не істейді? Дұрыс, өзіміз жазамыз.

Linux әлеміне әрі қарай ену және әсіресе графикалық қабықтың (жұмыс үстелі ортасы, DE) қалай жұмыс істейтінін зерттеу, айтпақшы, менде Linux Mint-те Xfce бар, қолданбалар мен онымен байланысты мим-түрі әдетте тікелей жазылғанын көрсетті. .desktop кеңейтімі бар таңбаша файлдары. Неге болмасқа, мен қарапайым қолданба таңбашасын жасаймын, ол жай ғана bash сценарийін іске қосып, консольге жіберілген аргументті шығаруы керек, мен тек төте жол файлының өзін қамтамасыз етемін:

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

Мен консольден xdg-open іске қосамын, браузерден келетін сол сілтемені жіберемін және... bummer. Тағы да ол сілтемені өңдей алмайтынын айтады.

Белгілі болғандай, мен қосымшамен байланысты mime-түрлерінің каталогын жаңартпадым. Бұл қарапайым пәрмен арқылы жасалады:

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

ол жай ғана файлды өңдейді ~/.config/mimeapps.list.

xdg-open қоңырауымен №2 әрекет - және қайтадан сәтсіздікке ұшырады. Ештеңе, қиындықтар бізді қорқытпайды, тек біздің қызығушылығымызды арттырады. Біз барлық bash күшімен (яғни, іздеу) қаруланып, қателерді түзетуге кірісеміз. Мұнда xdg-open тек қабық сценарийі екенін ескеру маңызды.

bash -x xdg-open $url

Бақылаудан кейін шығысты талдай отырып, басқарудың содан кейін ауысатыны аздап анық болады экзо-ашық. Және бұл қазірдің өзінде екілік файл және оған сілтемені дәлелде беру кезінде сәтсіз қайтару кодын неліктен қайтаратынын түсіну қиынырақ.

xdg-open ішкі бөліктерін қарап шығып, мен оның қоршаған ортаның әртүрлі параметрлерін талдайтынын және басқаруды белгілі бір DE-ге тән файл сілтемелерін ашуға арналған кейбір құралдарға беретінін немесе оның қалпына келтіру функциясы бар екенін білдім. ашық_жалпы

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
}

Мен осында берілген аргументтің талдауымен және егер біздің арнайы ішкі жолымыз сонда орналасқан болса, шағын бұзуды тез енгіземін. lync15:, содан кейін біз басқаруды бірден функцияға береміз ашық_жалпы.

№3 әрекет және ол жұмыс істеді деп ойлайсыз ба? Иә, қазір, әрине. Бірақ қате туралы хабарлама әлдеқашан өзгерді, бұл қазірдің өзінде прогресс - қазір ол маған файлдың табылмағанын айтты және файл түрінде маған дәлел ретінде берілген сілтемені жазды.

Бұл жолы функция болып шықты файл_url_немесе_жол, ол кіріске жіберілген файл сілтемесін талдайды: file:// немесе файлға жол немесе басқа нәрсе. Ал тексеру дұрыс жұмыс істемеді, себебі біздің префиксте (url схемасы) сандар бар, ал тұрақты өрнек тек :alpha: нүктелер мен сызықшалардан тұратын таңбалар жиынын тексереді. үшін rfc3986 стандартымен кеңескеннен кейін біркелкі ресурс идентификаторы Бұл жолы Майкрософт ештеңені бұзбайтыны белгілі болды (менде мұндай нұсқа болғанымен). Тек таңбалар класы :alpha: латын әліпбиінің әріптерін ғана қамтиды. Мен әдеттегі тексеруді әріптік-цифрға тез өзгертемін. Дайын, сіз таңқаларлықсыз, бәрі ақырында басталады, барлық тексерулерден кейін бақылау біздің сценарий қосымшамызға беріледі, біздің сілтеме консольде көрсетіледі, бәрі қажет болғандай. Осыдан кейін мен exo-open-дің барлық проблемалары схемадағы сандарға байланысты сілтеме пішімін тексеруге байланысты деп күдіктене бастадым. Гипотезаны тексеру үшін мен қосымшаның мим түріндегі тіркеуін жай схемаға өзгертемін сілеусін және voila - барлығы open_xfce функциясын жоққа шығармай жұмыс істейді. Бірақ бұл бізге ешқандай көмектеспейді, өйткені конференцияға кіруге арналған веб-бет lync15 арқылы сілтеме жасайды.

Сонымен, саяхаттың бірінші бөлігі аяқталды. Біз сілтеме қоңырауын қалай ұстау керектігін білеміз, содан кейін оны қандай да бір жолмен өңдеп, Pidgin ішіне жіберу керек. «Конференцияға қосылу» мәзіріндегі сілтеме арқылы деректерді енгізу кезінде оның ішкі қалай жұмыс істейтінін түсіну үшін мен Sipe жобасының Git репозиторийін клондадым және кодты қайтадан енгізуге дайындалдым. Бірақ содан кейін, бақытымызға орай, каталогтағы сценарийлер мені қызықтырды үлес/dbus/:

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

Sipe плагині dbus (жұмыс үстелі шинасы) арқылы өзара әрекеттесу үшін қол жетімді екені белгілі болды және сценарийлердің ішінде ұйымдастырушының аты және conf-id арқылы сілтеме арқылы конференцияға қосылу мысалдары бар немесе sip арқылы қоңырау шалуға болады. . Дәл осы нәрсе бізге жетіспеді.

2-қадам. Автоматты қосылу өңдегішін енгізу

Pearl-де дайын мысалдар бар болғандықтан, мен жай ғана пайдалануды шештім sipe-join-conference-with-uri.pl және өзіңізге ыңғайлы болу үшін оны аздап өзгертіңіз. Мен Pearl тілінде жаза аламын, сондықтан ол ешқандай қиындық тудырмады.

Сценарийді бөлек тексергеннен кейін мен оның шақыруын файлға жаздым lync.desktop. Және бұл жеңіс болды! Конференцияға қосылу бетіне кіріп, xdg-open іске қосуға рұқсат бергенде, Pidgin қолданбасынан конференцияның қалқымалы терезесі автоматты түрде ашылады. Мен қалай қуандым.
Жетістікке жігерленіп, мен негізгі браузерім Mozilla Firefox үшін де солай істеуді шештім. Түлкі арқылы жүйеге кірген кезде авторизация парағы ашылады және ең төменгі жағында түйме бар кеңсе коммуникаторын пайдаланып қосылыңыз. Ол менің назарымды аударған адам болды. Браузерде оны басқан кезде ол мына мекенжайға өтеді:

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

оған ол маған оны қалай ашу керектігін білмейтінін және, мүмкін, менде мұндай хаттамаға байланысты өтініш жоқ екенін айтады. Біз мұны әлдеқашан бастан өткердік.

Мен сценарий қосымшасын uri схемасы үшін де тез тіркеймін конференция және... ештеңе болмайды. Браузер менің сілтемелерімді өңдейтін қолданба жоқ деп шағымданады. Бұл жағдайда параметрлері бар консольден xdg-open шақыру тамаша жұмыс істейді.

«Firefox-та теңшелетін протокол өңдегішін орнату» - Мен осы сұрақпен желіге кірдім. stackoverflow бойынша бірнеше талқылаулардан өткеннен кейін (және онсыз біз қайда болар едік), жауап табылған сияқты. ішінде арнайы параметр жасау керек туралы: config (әрине foo-ны conf-мен ауыстыру):

network.protocol-handler.expose.foo = false

Біз оны жасаймыз, сілтемені ашамыз және ... мұндай сәттілік жоқ. Браузер, ештеңе болмағандай, біздің қолданбаны білмейтінін айтады.

Мен Mozilla протоколын тіркеу туралы ресми құжаттаманы оқып жатырмын, gnome жұмыс үстелінің өзінде қауымдастықтарды тіркеу мүмкіндігі бар (әрине foo-ны conf-мен ауыстыру):

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

Тіркелемін, браузерді ашамын... тағы да сақал.

Міне, құжаттаманың сызығы менің көзіме түседі:

Келесі жолы foo протокол түріндегі сілтемені басқаныңызда оны қай қолданба арқылы ашу керектігі сұралады.

— Семен Семеныч
- Ахх

Біз сілтемені баспаймыз, бірақ веб-бет жәй ғана JavaScript арқылы window.location өзгертеді. Мен conf протоколына сілтемесі бар қарапайым html файлын жазамын, оны браузерде ашамын, сілтемені басыңыз - Yos! Сілтемемізді қай қолданбада ашу керектігін сұрайтын терезе ашылады және тізімде Lync қолданбасы әлдеқашан бар - біз оны барлық ықтимал жолдармен шынайы түрде тіркедік. Терезеде «таңдауды есте сақтаңыз және әрқашан біздің қолданбадағы сілтемелерді ашыңыз» құсбелгісі бар, оны белгілеңіз, OK түймесін басыңыз. Ал бұл екінші жеңіс – конференция терезесі ашылады. Сонымен қатар, конференцияларды ашу тек сілтемені басқанда ғана емес, сонымен қатар қосылу бетінен конференцияға өту кезінде де жұмыс істейді.

Содан кейін мен параметрлерді жойып, тексердім network.protocol-handler.expose.conf Фокстағы хаттаманың жұмысына ешқандай әсер етпеді. Сілтемелер жұмысын жалғастырды.

қорытынды

Мен барлық жұмысымды GitHub репозиторийіне жүктеп салдым; барлық ресурстарға сілтемелер мақаланың соңында болады.
Менің жұмысымды пайдаланғысы келетіндерден кері байланыс алуға мүдделі боламын. Мен барлық әзірлеуді тек Linux Mint жүйесі үшін жасағанымды бірден атап өтуім керек, сондықтан кейбір басқа дистрибутивтер немесе жұмыс үстелдері бұл нұсқада жұмыс істемеуі мүмкін. Дәлірек айтсақ, мен бұған сенімдімін, өйткені мен xdg-open-де тек DE-ге қатысты тек 1 функцияны түзетіп қойдым. Басқа жүйелерге немесе жұмыс үстелдеріне қолдау қосқыңыз келсе, Github сайтында маған тарту сұрауларын жазыңыз.

Барлық жобаны аяқтауға 1 кеш кетті.

сілтемелер:

Ақпарат көзі: www.habr.com

пікір қалдыру