Аутоматско пријављивање на Линц конференције на Линук-у

Хеј Хабр!

За мене је ова фраза слична здравом свету, пошто сам коначно стигао до своје прве публикације. Дуго сам одлагао овај дивни тренутак, јер није било о чему да пишем, а нисам ни желео да сисам нешто што је већ гомилу пута усисано. Генерално, за своју прву публикацију желео сам нешто оригинално, корисно за друге и које садржи неку врсту изазова и решавања проблема. И сада могу да поделим ово. Хајде сада да причамо о свему по реду.

Улазак

Све је почело када сам пре неког времена преузео Линук Минт на свој радни рачунар. Многи људи вероватно знају да је Пидгин са додатком Сипе потпуно погодна замена за Мицрософт Линц (сада се зове Скипе фор бусинесс) за Линук системе. Због специфичности мог посла, често морам да учествујем на СИП конференцијама, а када сам био Виндовс радник, улазак у конференције је био елементаран: добијамо позивницу поштом, кликнемо на линк за пријаву и спремни смо да кренемо. .

Преласком на тамну страну Линук-а, све је постало нешто компликованије: наравно, можете се пријавити и на конференције у Пидгин-у, али да бисте то урадили потребно је да изаберете опцију придружи се конференцији у менију у својствима вашег СИП налога и у прозору који се отвори убаците везу до конференције или унесите име организатора и цонф ид. И након неког времена почео сам да размишљам: "да ли је могуће некако то поједноставити?" Да, могли бисте да кажете, зашто вам је дођавола ово потребно? Радије бих седео на Виндовс-у и не бих се разбијао.

Корак 1: Истраживање

„Ако ти падне на памет неки хир, не можеш га избити колцем“, рекао је Некрасов у свом делу „Ко добро живи у Русији“.

Дакле, када ми је та мисао ушла у главу, након неког времена појавила се прва идеја за имплементацију. Све је изгледало једноставно - потребно је да пресретнете приступ везама меет.цомпани.цом/усер/цонфид — инсталирајте процес локалне веб апликације на свој аутомобил на 127.0.0.1 и у /етц/хостс додајте статички унос за домен компаније преко којег улазите у конференцију, показујући на лоцалхост. Затим, овај веб сервер мора да обради везу која је дошла до њега и да је некако пренесе у Пидгин (одмах ћу рећи да у овој фази још увек нисам имао појма како да му је дам). Решење, наравно, мирише на штаке, али ми смо програмери, штаке нас не плаше (срање).

Онда сам, случајно, некако отворио линк за позивницу у Гоогле Цхроме-у (а обично увек користим Мозила Фајерфокс). И на моје изненађење, веб страница је изгледала потпуно другачије – није постојао образац за унос корисничких података и одмах по уласку на страницу се појавио захтев да се нешто отвори преко кдг-опен. Само из забаве, кликнем на „да“ и појави се порука о грешци – веза линц15:цонфјоин?урл=хттпс://меет.цомпани.цом/усер/цонфид не може да се отвори. Хмм. Какав је ово кдг-опен и шта му је потребно да би се такви линкови отварали? Читање документације након смрти открило је да је то ГУИ руковалац који помаже у покретању повезаних апликација било са протоколима за ури шему или са одређеним типовима датотека. Асоцијације се конфигуришу путем мапирања типа миме. Дакле, видимо да покрећемо претрагу за одговарајућом апликацијом за ури шему под називом линц15 а линк се прослеђује на кдг-опен, који би онда, у теорији, требало да га проследи некој апликацији која је одговорна за ову врсту везе. Које, наравно, немамо у нашем систему. Ако не, шта онда раде у свету отвореног кода? Тако је, сами ћемо написати.

Даље урањање у свет Линука и посебно у проучавање како функционише графичка љуска (десктоп окружење, ДЕ), иначе, имам Ксфце у Линук Минт-у, показало је да се апликације и миме-тип који је повезан са њим обично пишу директно у датотеке пречица са екстензијом .десктоп. Па, зашто да не, направим једноставну пречицу апликације, која једноставно треба да покрене басх скрипту и пренесе аргумент који му је прослеђен у конзолу, пружам само саму датотеку пречице:

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

Покрећем кдг-опен са конзоле, прослеђујући исти линк који долази из претраживача и... срање. Опет каже да не може да обради везу.

Како се испоставило, нисам ажурирао директоријум повезаних миме-типова са својом апликацијом. Ово се ради једноставном командом:

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

који једноставно уређује датотеку ~/.цонфиг/мимеаппс.лист.

Покушај број 2 са позивом кдг-опен - и опет неуспех. Ништа, тешкоће нас не плаше, већ само подстичу наше интересовање. И наоружани свом снагом басх-а (тј. праћења), заронили смо главом у отклањање грешака. Овде је важно напоменути да је кдг-опен само схелл скрипта.

bash -x xdg-open $url

Анализирајући излаз након праћења постаје мало јасно на шта се онда преноси контрола егзо-отворени. А ово је већ бинарна датотека и теже је разумети зашто враћа неуспешан повратни код приликом прослеђивања везе до ње у аргументу.

Прегледавши унутрашње елементе кдг-опен-а, открио сам да он анализира различите параметре окружења и даље преноси контролу било на неке алате за отварање веза датотека специфичних за одређени ДЕ, или има резервну функцију опен_генериц

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
}

Брзо ћу овде уградити мали хак са анализом прослеђеног аргумента и да ли се наш специфични подниз налази тамо линц15:, онда одмах преносимо контролу на функцију опен_генериц.

Покушај број 3 и да ли мислите да је успео? Да, сада, наравно. Али порука о грешци се већ променила, ово је већ напредак - сада ми је говорио да датотека није пронађена и у облику датотеке ми је написао исти линк који је прошао као аргумент.

Овог пута се испоставило да је то била функција ис_филе_урл_ор_патх, који анализира везу датотеке прослеђену на улаз: филе:// или путању до датотеке или нешто друго. А провера није функционисала како треба због чињенице да наш префикс (урл шема) има бројеве, а регуларни израз проверава само скуп знакова који се састоји од :алпха: тачака и цртица. Након консултације са стандардом рфц3986 за јединствени идентификатор ресурса Постало је јасно да овог пута Мицрософт ништа не крши (иако сам имао такву верзију). Само класа знакова :алпха: садржи само слова латинице. Брзо мењам редовну проверу у алфанумеричку. Готово, фантастични сте, коначно све почиње, контрола након свих провера је дата нашој скрипт апликацији, наш линк је приказан на конзоли, све је како треба. После овога почињем да сумњам да су сви проблеми са еко-опен-ом такође последица валидације формата везе због бројева у шеми. Да бих тестирао хипотезу, мењам регистрацију апликације миме типа само у шему Линц и воила - све ради без замене функције опен_кфце. Али то нам никако неће помоћи, јер веб страница за улазак на конференцију креира везу са линц15.

Дакле, први део путовања је завршен. Знамо како да пресретнемо позив везе и онда га треба некако обрадити и проследити унутар Пиџина. Да бих разумео како интерно функционише приликом уноса података преко везе у менију „придружи се конференцији“, клонирао сам Гит репозиторијум пројекта Сипе и спремио се да поново зароним у код. Али онда су ме, на срећу, привукли сценарији у каталогу допринос/дбус/:

  • сипе-јоин-цонференце-витх-ури.пл
  • сипе-јоин-цонференце-витх-организер-анд-ид.пл
  • сипе-цалл-пхоне-нумбер.пл
  • СипеХелпер.пм

Испоставило се да је Сипе додатак доступан за интеракцију преко дбус-а (десктоп магистрале) и унутар скрипти постоје примери придруживања конференцији преко линка, било преко имена организатора и цонф-ид-а, или можете покренути позив преко сип-а . То је управо оно што нам је недостајало.

Корак 2. Имплементација руковаоца аутоматског спајања

Пошто у Пеарл-у постоје готови примери, одлучио сам да само користим сипе-јоин-цонференце-витх-ури.пл и модификујте га мало да вам одговара. Могу писати на Пеарл-у, тако да то није изазвало неке посебне потешкоће.

Након засебног тестирања скрипте, уписао сам њен позив у датотеку линц.десктоп. И то је била победа! Када уђете на страницу за придруживање конференцији и дозволите да се покрене кдг-опен, искачући прозор конференције из Пидгин-а би се аутоматски отворио. Како сам се обрадовао.
Охрабрен успехом, одлучио сам да урадим исто за свој главни претраживач, Мозилла Фирефок. Када се пријавите преко лисице, отвара се страница за ауторизацију и на самом дну се налази дугме придружите се користећи канцеларијски комуникатор. Она је била та која је привукла моју пажњу. Када кликнете на њега у претраживачу, иде на адресу:

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

на шта ми он љубазно каже да не зна како да га отвори и да, можда, немам придружену апликацију за такав протокол. Па, већ смо прошли кроз ово.

Брзо региструјем своју скрипт апликацију и за ури шему цонф и... ништа се не дешава. Прегледач се стално жали да не постоји ниједна апликација која обрађује моје везе. У овом случају, позивање кдг-опен са конзоле са параметрима ради савршено.

„Подесите прилагођени руковалац протокола у фирефок-у“ - отишао сам на интернет са овим питањем. Након што смо прошли кроз неколико дискусија о стацковерфлов-у (и где бисмо били без њега), чини се да је одговор пронађен. Морате да креирате посебан параметар у абоут: цонфиг (наравно замена фоо са цонф):

network.protocol-handler.expose.foo = false

Креирамо га, отварамо линк и... нема среће. Претраживач, као да се ништа није догодило, каже да не познаје нашу апликацију.

Читам званичну документацију о регистрацији протокола из Мозиле, постоји опција регистрације асоцијација на самој радној површини гноме-а (замена фоо са цонф, наравно):

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

Региструјем се, отварам претраживач... и опет брада.

Овде ми упада у очи ред из документације:

Следећи пут када кликнете на везу фоо типа протокола, бићете упитани са којом апликацијом да је отворите.

— Семјон Семенич
- Ахх

Не кликнемо на везу, али веб страница једноставно мења виндов.лоцатион путем јавасцрипт-а. Напишем једноставну хтмл датотеку са везом до цонф протокола, отворим је у претраживачу, кликнем на линк - Иос! Отвара се прозор са питањем у којој апликацији треба да отворимо наш линк и ту већ имамо нашу Линц апликацију на листи – поштено смо је регистровали на све могуће начине. Тамо у прозору постоји поље за потврду „запамти избор и увек отварај везе у нашој апликацији“, означите га, кликните на ок. И ово је друга победа - отвара се прозор конференције. У исто време, отварање конференција функционише не само када кликнете на линк, већ и када пређете са странице за придруживање која нам је потребна на конференцију.

Онда сам проверио, бришући параметре нетворк.протоцол-хандлер.екпосе.цонф ни на који начин није утицало на рад протокола у Фоксу. Везе су наставиле да раде.

Закључак

Отпремио сам сав свој рад у ГитХуб спремиште; везе до свих ресурса ће бити на крају чланка.
Бићу заинтересован да добијем повратне информације од оних који желе да користе мој рад. Одмах треба да приметим да сам сав развој урадио само за свој Линук Минт систем, тако да неке друге дистрибуције или десктоп рачунари можда неће радити у тој верзији. Или боље речено, чак сам скоро сигуран у ово, јер сам закрпио само 1 функцију у кдг-опен која се односи само на мој ДЕ. Ако желите да додате подршку за друге системе или десктопе, напишите ми захтеве за повлачење на Гитхуб-у.

За завршетак целог пројекта требало је 1 вече.

Референце:

Извор: ввв.хабр.цом

Додај коментар