Linux боюнча Lync конференцияларына автоматтык түрдө кирүү

Эй Хабр!

Мен үчүн бул фраза салам дүйнөсүнө окшош, анткени мен акыры биринчи басылмага жеттим. Мен бул кереметтүү учурду көпкө калтырдым, анткени ал жөнүндө жаза турган эч нерсе жок болчу, жана мен дагы бир топ жолу соруп алган нерсени соруп алгым келген жок. Жалпысынан алганда, биринчи жарыялоо үчүн мен оригиналдуу, башкаларга пайдалуу жана кандайдыр бир чакырыктарды жана көйгөйлөрдү чечүүнү камтыган нерсени кааладым. Эми мен муну бөлүшө алам. Эми баарын ирети менен сүйлөшөлү.

кирүү

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

Linuxтун караңгы тарабына өткөндө баары бир аз татаалдашып кетти: албетте, сиз Pidginде конференцияларга да кирсеңиз болот, бирок бул үчүн SIP каттоо эсебиңиздин касиеттериндеги менюдан конференцияга кошулуу опциясын тандоо керек. ачылган терезеде конференцияга шилтемени киргизиңиз же уюштуруучунун атын киргизиңиз жана конф. Анан бир нече убакыт өткөндөн кийин мен ойлоно баштадым: "Муну кандайдыр бир жол менен жөнөкөйлөтүү мүмкүн эмеспи?" Ооба, сиз айтсаңыз, бул эмне үчүн сизге керек?

1-кадам: Изилдөө

Некрасов «Орусияда ким жакшы жашайт» деген эмгегинде: «Эгер башыңда кандайдыр бир каприз пайда болсо, аны коюм менен жок кыла албайсың», - дейт.

Ошентип, бир ой менин башыма киргенден кийин, бир нече убакыттан кийин ишке ашыруу үчүн биринчи идея пайда болду. Баары жөнөкөй көрүндү - шилтемелерге кирүү мүмкүнчүлүгүн токтотуу керек meet.company.com/user/confid — 127.0.0.1 жана /etc/hosts ичинде локалдык веб-тиркеме процессин унааңызга орнотуп, жергиликтүү хостту көрсөтүп, конференцияга кире турган компаниянын доменине статикалык жазууну кошуңуз. Андан кийин, бул веб-сервер ага келген шилтемени иштеп чыгып, кандайдыр бир жол менен аны Пиджиндин ичине өткөрүп бериши керек (мен дароо айтам, бул этапта мен аны кантип берүү керек экенин билбейм). Чечим, албетте, балдак жыттанат, бирок биз программисттербиз, балдак бизди коркутпайт (бок).

Анан, кокустан, мен кандайдыр бир жол менен Google Chrome'до чакыруу шилтемесин ачтым (жана мен ар дайым Mozilla Firefox колдоном). Жана менин таң калганым, веб-баракча таптакыр башкача көрүндү - колдонуучунун маалыматтарын киргизүү үчүн форма жок болчу жана баракчага киргенден кийин дароо бир нерсени ачуу өтүнүчү келип түштү. xdg-ачык. Жөн гана көңүл ачуу үчүн мен "ооба" дегенди чыкылдатып, ката билдирүүсү пайда болот - lync15:confjoin?url=https://meet.company.com/user/confid шилтемесин ачуу мүмкүн эмес. Хмм. Бул кандай xdg-ачык жана мындай шилтемелердин ачылышы үчүн эмне керек? Документтерди өлгөндөн кийин окуу бул GUI иштеткич экенин көрсөттү, ал байланышкан тиркемелерди же uri схемасы үчүн протоколдор менен же белгилүү бир файл түрлөрү менен иштетүүгө жардам берет. Ассоциациялар мим түрүндөгү карта аркылуу конфигурацияланат. Ошентип, биз 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-ачык чалуу менен №2 аракет - кайра ийгиликсиз. Эч нерсе, кыйынчылыктар бизди чочутпайт, тескерисинче, кызыгуубузду гана арттырат. Жана бардык bash күчү менен куралданган (б.а. из) биз мүчүлүштүктөрдү оңдоого киришебиз. Бул жерде белгилей кетүүчү нерсе, xdg-open жөн гана кабык сценарийи.

bash -x xdg-open $url

Издөөдөн кийин чыгууну талдоо, башкаруу андан кийин өткөрүлүп берилгени бир аз айкын болот экзо-ачык. Жана бул мурунтан эле бинардык файл жана ага шилтемени аргументте өткөрүп жатканда, эмне үчүн ийгиликсиз кайтаруу кодун кайтарып жатканын түшүнүү кыйыныраак.

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 стандарты менен кеңешкенден кийин бирдиктүү ресурс идентификатору Бул жолу Майкрософт эч нерсени бузбай жатканы белгилүү болду (бирок менде мындай версия бар). Болгону :alpha: тамга классы латын алфавитинин тамгаларын гана камтыйт. Кадимки текшерүүнү тез эле алфавиттик санга алмаштырам. Бүттү, сиз укмуштуудай болдуңуз, акыры баары башталат, бардык текшерүүлөр биздин скрипт колдонмосуна берилгенден кийин, биздин шилтеме консолдо көрсөтүлөт, баары болушу керек. Ушундан кийин, мен экзо-ачык менен байланышкан бардык көйгөйлөр схемадагы сандардан улам шилтеме форматын текшерүүгө байланыштуу деп шектенип баштадым. Гипотезаны текшерүү үчүн мен колдонмонун мим түрүндөгү каттоосун жөн гана схемага өзгөртөм lync жана voila - бардыгы open_xfce функциясын жокко чыгарбастан иштейт. Бирок бул бизге эч кандай жардам бербейт, анткени конференцияга кирүү үчүн веб-баракча lync15 менен шилтеме жаратат.

Ошентип, жолдун биринчи бөлүгү аяктады. Биз шилтеме чалууга кантип тоскоол болоорун билебиз, анан аны кандайдыр бир жол менен иштетип, Пиджиндин ичине өткөрүп берүү керек. "Конференцияга кошулуу" менюсундагы шилтеме аркылуу берилиштерди киргизүүдө анын ички кантип иштээрин түшүнүү үчүн, мен Sipe долбоорунун Git репозиторийин клондоштум жана кодго кайра сүңгүүгө даяр болдум. Бирок, бактыга жараша, мени каталогдогу сценарийлер кызыктырды салым/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 боюнча бир нече талкуулардан өткөндөн кийин (жана ансыз биз кайда болмокпуз), жооп табылды окшойт. Сиз атайын параметрди түзүү керек жөнүндө: тарам (албетте 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 кечке убакыт кетти.

шилтеме:

Source: www.habr.com

Комментарий кошуу