Воридшавӣ ба таври худкор ба конфронсҳои Lync дар Linux

Эй Ҳабр!

Барои ман, ин ибора ба салом ҷаҳон монанд аст, зеро ман ниҳоят ба нашри аввалини худ расидам. Ман ин лаҳзаи олиҷанобро барои муддати тӯлонӣ ба таъхир гузоштам, зеро чизе барои навиштан набуд ва ман ҳам намехостам чизеро, ки аллакай борҳо ҷаббида шуда буд, бихӯрам. Умуман, барои нашри аввалини худ ман мехостам чизи аслӣ, барои дигарон муфид ва дорои як навъ мушкилот ва ҳалли мушкилот бошад. Ва ҳоло ман метавонам инро мубодила кунам. Акнун биёед дар бораи ҳама чиз бо тартиб гап занем.

даромад

Ҳамааш вақте оғоз шуд, ки чанде пеш ман Linux Mint-ро дар компютери кории худ зеркашӣ кардам. Бисёр одамон эҳтимол медонанд, ки Pidgin бо плагини Sipe ивазкунандаи комилан мувофиқ барои Microsoft Lync (ҳоло Skype барои тиҷорат номида мешавад) барои системаҳои Linux мебошад. Бо назардошти вижагиҳои кори ман, ман аксар вақт маҷбур мешавам дар конфронсҳои SIP иштирок кунам ва вақте ки ман коргари Windows будам, ворид шудан ба конфронсҳо оддӣ буд: мо тавассути почта даъватнома мегирем, истиноди воридшавиро клик кунед ва мо барои рафтан омодаем. .

Ҳангоми гузаштан ба паҳлӯи торикии Linux, ҳама чиз то андозае мураккабтар шуд: албатта, шумо инчунин метавонед ба конфронсҳо дар Pidgin ворид шавед, аммо барои ин ба шумо лозим аст, ки дар меню дар хосиятҳои ҳисоби SIP ва дар равзанаи кушодашуда, истиноди конфронсро ворид кунед ё номи ташкилкунандаро ворид кунед ва ID-ро ворид кунед. Ва пас аз чанд вақт ман фикр карданро сар кардам: "Оё ин корро бо ягон роҳ содда кардан мумкин аст?" Бале, шумо метавонед бигӯед, ки чаро ин ба шумо лозим аст?

Қадами 1: Тадқиқот

Некрасов дар асари худ «Кй дар Рус нагз зиндагй мекунад» гуфта буд: «Агар шумо дар сари худ ягон майнае пайдо шавад, онро бо сутун барканор карда наметавонед».

Ҳамин тавр, вақте ки ин фикр ба сарам даромад, пас аз чанд вақт идеяи аввалини амалӣ пайдо шуд. Ҳама чиз оддӣ менамуд - ба шумо лозим аст, ки дастрасӣ ба истинодҳоро боздоред meet.company.com/user/confid — раванди веб-барномаҳои маҳаллиро дар мошини худ дар 127.0.0.1 насб кунед ва дар /etc/hosts вуруди статикиро барои домени ширкат илова кунед, ки тавассути он шумо ба конфронс ворид мешавед, бо ишора ба localhost. Баъдан, ин веб-сервер бояд истиноди ба он воридшударо коркард кунад ва онро дар дохили Пидгин интиқол диҳад (дарҳол мегӯям, ки дар ин марҳила ман то ҳол намедонистам, ки чӣ гуна онро ба он бидиҳам). Ҳалли, албатта, бӯи асобағол аст, аммо мо барномасозем, асобаҳо моро наметарсонанд (шит).

Пас, тасодуфан, ман ба таври возеҳ истиноди даъватро дар Google Chrome кушодам (ва одатан ман ҳамеша Mozilla Firefox-ро истифода мебарам). Ва тааҷҷубовар аст, ки веб-саҳифа тамоман дигар хел менамуд - шакл барои ворид кардани маълумоти корбар вуҷуд надошт ва дарҳол пас аз ворид шудан ба саҳифа дархост барои кушодани чизе ба воситаи xdg-кушода. Танҳо барои фароғат, ман "ҳа" -ро пахш мекунам ва паёми хатогӣ пайдо мешавад - истиноди lync15:confjoin?url=https://meet.company.com/user/confid кушода намешавад. Хмм. Ин чӣ гуна xdg-open аст ва барои кушодани чунин истинодҳо ба он чӣ лозим аст? Хониши пас аз марги ҳуҷҷатҳо нишон дод, ки он як коркардкунандаи GUI аст, ки барои иҷро кардани барномаҳои алоқаманд ё бо протоколҳо барои схемаи uri ё бо намудҳои мушаххаси файл кӯмак мекунад. Ассотсиатсияҳо тавассути харитасозии навъи mime танзим карда мешаванд. Ҳамин тавр, мо мебинем, ки мо ҷустуҷӯи барномаи мувофиқро барои схемаи uri бо номи иҷро карда истодаем lync15 ва истинод ба xdg-open интиқол дода мешавад, ки он гоҳ, дар назария, бояд онро ба ягон барномае, ки барои ин навъи пайванд масъул аст, гузаронад. Ки, албатта, мо дар системаи мо надорем. Агар не, пас онҳо дар ҷаҳони кушодаасос чӣ кор мекунанд? Дуруст, худамон менависем.

Гирифтани минбаъда дар ҷаҳони Linux ва махсусан дар омӯхтани он, ки чӣ гуна қабати графикӣ (муҳити мизи корӣ, DE) кор мекунад, дар омади гап, ман дар Linux Mint Xfce дорам, нишон дод, ки барномаҳо ва навъи mime-и бо он алоқаманд одатан мустақиман дар файлҳои миёнабур бо васеъшавии .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.

Кӯшиши рақами 2 бо занги xdg-open - ва боз нокомӣ. Ҳеҷ чиз, душвориҳо моро наметарсонанд, балки фақат таваҷҷӯҳи моро афзун мекунанд. Ва бо тамоми қудрати bash (яъне пайгирӣ) мусаллаҳ шуда, мо сараввал ба хатогиҳо ғарқ мешавем. Дар ин ҷо қайд кардан муҳим аст, ки xdg-open танҳо як скрипти ниҳонӣ аст.

bash -x xdg-open $url

Таҳлили натиҷа пас аз пайгирӣ каме равшан мешавад, ки назорат пас аз он ба интиқол дода мешавад exo кушода. Ва ин аллакай як файли дуӣ аст ва фаҳмидани он душвортар аст, ки чаро он ҳангоми интиқоли истинод ба он дар аргумент рамзи бозгашти номуваффақро бармегардонад.

Пас аз азназаргузаронии дохилии xdg-open, ман фаҳмидам, ки он параметрҳои гуногуни муҳити зистро таҳлил мекунад ва назоратро минбаъд ё ба баъзе абзорҳо барои кушодани истинодҳои файлии мушаххаси DE месупорад ё он функсияи бозгашт дорад. 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
}

Ман ба зудӣ дар ин ҷо як хаки хурдеро бо таҳлили далели гузашта ҷойгир мекунам ва агар зер сатри мушаххаси мо дар он ҷо ҷойгир бошад lync15:, пас мо фавран назоратро ба функсия мегузорем open_generic.

Кӯшиши рақами 3 ва шумо фикр мекунед, ки он кор кард? Ҳа, ҳозир, албатта. Аммо хабари хато аллакай тағир ёфтааст, ин аллакай пешрафт аст - ҳоло ӯ ба ман мегуфт, ки файл ёфт нашуд ва дар шакли файл ба ман ҳамон истинодро навишт, ки ҳамчун далел гузашт.

Ин дафъа он як функсия буд is_file_url_or_path, ки истиноди файли ба вуруди интиқолшударо таҳлил мекунад: file:// ё роҳи файл ё чизи дигар. Ва чек аз сабаби он, ки префикси мо (схемаи url) рақамҳо дорад, дуруст кор накард ва ифодаи муқаррарӣ танҳо маҷмӯи аломатҳои иборат аз :alpha: нуқтаҳо ва тиреҳоро тафтиш мекунад. Пас аз машварат бо стандарти rfc3986 барои идентификатори ягонаи захираҳо Маълум шуд, ки ин дафъа Microsoft ҳеҷ чизро вайрон намекунад (гарчанде ки ман чунин версия доштам). Танҳо синфи аломат :alpha: дорои танҳо ҳарфҳои алифбои лотинӣ мебошад. Ман зуд чеки муқаррариро ба алифбои рақамӣ иваз мекунам. Ба анҷом расид, шумо аҷиб ҳастед, ҳама чиз ниҳоят оғоз меёбад, назорат пас аз ҳама санҷишҳо ба замимаи скрипти мо дода мешавад, истиноди мо дар консол нишон дода мешавад, ҳама чиз тавре ки бояд бошад. Пас аз ин, ман гумон мекунам, ки ҳама мушкилот бо exo-open низ аз сабаби тасдиқи формати истинод аз ҳисоби рақамҳо дар схема мебошанд. Барои санҷидани гипотеза, ман бақайдгирии навъи mime-и барномаро танҳо ба нақша иваз мекунам линк ва voila - ҳама чиз бе бекор кардани функсияи open_xfce кор мекунад. Аммо ин ба ҳеҷ ваҷҳ ба мо кӯмак намекунад, зеро саҳифаи веб барои ворид шудан ба конфронс бо lync15 пайванд эҷод мекунад.

Инак, кисми якуми сафар ба охир расид. Мо медонем, ки чӣ гуна занги истинодро боздошта метавонем ва он гоҳ он бояд бо ягон роҳ коркард ва дар дохили Pidgin интиқол дода шавад. Барои фаҳмидани он, ки он дар дохили он ҳангоми ворид кардани маълумот тавассути истиноди менюи "ҳамроҳ шудан ба конфронс" чӣ гуна кор мекунад, ман анбори Git-и лоиҳаи Sipe-ро клон кардам ва омода шудам, ки дубора ба код ворид шавам. Аммо баъд, хушбахтона, скриптҳои дар каталог буда маро ба худ ҷалб карданд саҳм/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-ҳамроҳ-конфронс-бо-ташкилкунанда-ва-id.pl
  • sipe-call-phone-number.pl
  • SipeHelper.pm

Маълум мешавад, ки плагини Sipe барои ҳамкорӣ тавассути dbus (автобуси мизи корӣ) дастрас аст ва дар дохили скриптҳо намунаҳои пайвастан ба конфронс тавассути истинод мавҷуданд, ё тавассути номи ташкилкунанда ва conf-id, ё шумо метавонед зангро тавассути sip оғоз кунед. . Ин маҳз он чизест, ки мо намерасидем.

Қадами 2. Амалисозии коркарди худкор

Азбаски дар Pearl намунаҳои тайёр мавҷуданд, ман қарор додам, ки танҳо истифода барам sipe-join-conference-with-uri.pl ва онро каме тағир диҳед, то ба худатон мувофиқат кунед. Ман метавонам бо Перл нависам, аз ин рӯ он ҳеҷ мушкилиеро ба вуҷуд наовард.

Пас аз санҷиши скрипт дар алоҳидагӣ, ман занги онро ба файл навиштам lync.desktop. Ва ин ғалаба буд! Ҳангоми ворид шудан ба саҳифаи пайвастшавӣ ба конфронс ва иҷозати xdg-open кор кардан, равзанаи поп-ап конфронс аз Pidgin ба таври худкор кушода мешавад. Чи хел шод шудам.
Аз муваффақият рӯҳбаланд шуда, ман қарор додам, ки барои браузери асосии худ, Mozilla Firefox ҳамин корро кунам. Вақте ки шумо тавассути рӯбоҳ ворид мешавед, саҳифа барои иҷозат кушода мешавад ва дар поёни он тугма мавҷуд аст бо истифода аз коммуникатори офисӣ ҳамроҳ шавед. Вай ҳамон касе буд, ки диққати маро ба худ ҷалб кард. Вақте ки шумо онро дар браузер пахш мекунед, он ба суроғаи зерин меравад:

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

ки ба он ӯ бо меҳрубонӣ ба ман мегӯяд, ки ӯ намедонад, ки онро чӣ гуна кушояд ва шояд ман барои чунин протокол аризаи алоқаманд надорам. Хуб, мо аз ин аллакай гузаштаем.

Ман зуд аризаи скрипти худро низ барои схемаи uri сабти ном мекунам conf ва... ҳеҷ чиз рӯй намедиҳад. Браузер шикоят мекунад, ки ягон барномае вуҷуд надорад, ки истинодҳои маро идора кунад. Дар ин ҳолат занги 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-ро иваз мекунад. Ман файли оддии html-ро бо истинод ба протоколи conf менависам, онро дар браузер кушоед, истинодро пахш кунед - Yos! Равзана кушода мешавад, ки дар он дархост мекунад, ки дар кадом барнома мо бояд истиноди худро кушоем ва дар он ҷо мо аллакай барномаи Lync-и худро дар рӯйхат дорем - мо онро бо тамоми роҳҳо ростқавлона сабти ном кардем. Он ҷо дар тиреза қуттии қайд мавҷуд аст "интихобро дар хотир нигоҳ доред ва ҳамеша истинодҳоро дар замимаи мо кушоед", онро қайд кунед, OK-ро пахш кунед. Ва ин галабаи дуйум аст — равзанаи конференция кушода мешавад. Ҳамзамон, кушодани конфронсҳо на танҳо ҳангоми пахш кардани истинод, балки ҳангоми гузаштан аз саҳифаи пайвастшавӣ ба конфронс кор мекунанд.

Баъд ман санҷида, параметрҳоро нест кардам network.protocol-handler.expose.conf ба ҳеҷ ваҷҳ ба кори протокол дар Фокс таъсир нарасонд. Звенохо кори худро давом доданд.

хулоса

Ман тамоми кори худро ба анбори GitHub бор кардам; истинодҳо ба ҳама захираҳо дар охири мақола хоҳанд буд.
Ман ба гирифтани фикру мулоҳизаҳо аз онҳое, ки мехоҳанд аз кори ман истифода баранд, шавқ дорам. Ман бояд фавран қайд кунам, ки ман тамоми таҳияро танҳо барои системаи Linux Mint-и худ кардам, аз ин рӯ баъзе дистрибюторҳо ё мизи кории дигар дар ин версия кор накунанд. Дурусттараш, ман ҳатто тақрибан ба ин боварӣ дорам, зеро ман танҳо 1 функсияро дар xdg-open часпондам, ки танҳо ба DE ман дахл дорад. Агар шумо хоҳед, ки барои дигар системаҳо ё мизи корӣ дастгирӣ илова кунед, ба ман дар Github дархостҳои ҷалбро нависед.

Барои анҷом додани тамоми лоиҳа 1 шаб лозим шуд.

Истинодҳо:

Манбаъ: will.com

Илова Эзоҳ