Ավտոմատ մուտք գործել Lync կոնֆերանսներ Linux-ում

Հե՜յ Հաբր։

Ինձ համար այս արտահայտությունը նման է բարև աշխարհ, քանի որ վերջապես հասա իմ առաջին հրապարակմանը: Ես երկար ժամանակ հետաձգեցի այս հիանալի պահը, քանի որ գրելու ոչինչ չկար, և ես նույնպես չէի ուզում ծծել մի բան, որը արդեն մի քանի անգամ ծծվել էր: Ընդհանրապես, իմ առաջին հրապարակման համար ես ուզում էի ինչ-որ օրիգինալ բան, օգտակար ուրիշների համար և պարունակող ինչ-որ մարտահրավերներ և խնդիրների լուծում: Եվ հիմա ես կարող եմ կիսվել սա: Հիմա եկեք ամեն ինչի մասին խոսենք հերթականությամբ։

Մուտք

Ամեն ինչ սկսվեց նրանից, որ որոշ ժամանակ առաջ ես ներբեռնեցի Linux Mint-ը իմ աշխատանքային համակարգչով: Շատերը հավանաբար գիտեն, որ Pidgin-ը Sipe հավելվածով լիովին հարմար փոխարինում է Microsoft Lync-ին (այժմ կոչվում է Skype բիզնեսի համար) Linux համակարգերի համար: Իմ աշխատանքի առանձնահատկություններից ելնելով, ես հաճախ ստիպված եմ լինում մասնակցել SIP կոնֆերանսներին, և երբ ես Windows-ի աշխատող էի, կոնֆերանսների մուտքը տարրական էր. փոստով հրավեր ենք ստանում, սեղմում ենք մուտքի հղման վրա և պատրաստ ենք գնալու։ .

Linux-ի մութ կողմին անցնելիս ամեն ինչ մի փոքր ավելի բարդացավ. իհարկե, դուք կարող եք նաև մուտք գործել կոնֆերանսներ Pidgin-ում, բայց դա անելու համար հարկավոր է ընտրացանկից ընտրել միանալու կոնֆերանսի տարբերակը ձեր SIP հաշվի հատկությունների մեջ և բացվող պատուհանում տեղադրեք կոնֆերանսի հղումը կամ մուտքագրեք կազմակերպչի անունը և կոնֆերանսը: Եվ որոշ ժամանակ անց ես սկսեցի մտածել. «Հնարավո՞ր է ինչ-որ կերպ պարզեցնել սա»: Այո, դուք կարող եք ասել, ինչի՞ համար է ձեզ դա անհրաժեշտ: Ես կնախընտրեի նստել Windows-ի վրա և խելքս չփչել:

Քայլ 1. Հետազոտություն

«Եթե ձեր գլխում ինչ-որ քմահաճույք է առաջանում, դուք չեք կարող ցցի միջոցով նոկաուտի ենթարկել այն», - ասաց Նեկրասովը իր «Ով լավ է ապրում Ռուսաստանում» աշխատության մեջ:

Այսպիսով, երբ միտքը մտավ գլխումս, որոշ ժամանակ անց առաջացավ իրականացման առաջին գաղափարը։ Ամեն ինչ պարզ էր թվում, դուք պետք է ընդհատեք մուտքը հղումներ meet.company.com/user/confid — տեղադրեք տեղական վեբ հավելվածի գործընթաց ձեր մեքենայի վրա 127.0.0.1 հասցեով և /etc/hosts-ում ավելացրեք ստատիկ գրառում ընկերության տիրույթի համար, որի միջոցով դուք մուտք եք գործում կոնֆերանս՝ մատնանշելով localhost-ը: Հաջորդը, այս վեբ սերվերը պետք է մշակի իրեն հասած հղումը և ինչ-որ կերպ փոխանցի այն Pidgin-ի ներսում (ես անմիջապես կասեմ, որ այս փուլում ես դեռ գաղափար չունեի, թե ինչպես դա տալ դրան): Լուծումը, իհարկե, հենակների հոտ է գալիս, բայց մենք ծրագրավորողներ ենք, հենակները մեզ չեն վախեցնում (շիթ):

Հետո, պատահաբար, Google Chrome-ում մի կերպ բացեցի հրավերի հղումը (և սովորաբար միշտ օգտագործում եմ Mozilla Firefox): Եվ ի զարմանս ինձ, վեբ էջը բոլորովին այլ տեսք ուներ. օգտատիրոջ տվյալները մուտքագրելու ձև չկար, և էջ մուտք գործելուց անմիջապես հետո խնդրանք է եղել բացել որևէ բան: xdg-open. Պարզապես զվարճանալու համար ես սեղմում եմ «այո» և հայտնվում է սխալի հաղորդագրություն. lync15:confjoin?url=https://meet.company.com/user/confid հղումը չի կարող բացվել: Հմմ Ինչպիսի՞ xdg-open է սա և ի՞նչ է պետք, որպեսզի բացվեն նման հղումներ։ Փաստաթղթերի հետմահու ընթերցումը ցույց տվեց, որ դա GUI մշակող է, որն օգնում է գործարկել առնչվող հավելվածները կամ uri սխեմայի արձանագրություններով կամ ֆայլերի հատուկ տեսակներով: Ասոցիացիաները կազմաձևվում են մնջախաղի տիպի քարտեզագրման միջոցով: Այսպիսով, մենք տեսնում ենք, որ մենք որոնում ենք համապատասխան հավելված՝ անվանված uri սխեմայի համար lync15 և հղումը փոխանցվում է xdg-open-ին, որն այնուհետև, տեսականորեն, այն պետք է փոխանցի որևէ հավելվածի, որը պատասխանատու է այս տեսակի հղումների համար: Ինչը, իհարկե, մենք չունենք մեր համակարգում։ Եթե ​​ոչ, ապա ի՞նչ են անում նրանք բաց կոդով աշխարհում: Ճիշտ է, մենք ինքներս կգրենք:

Հետագա ընկղմումը Linux-ի աշխարհում և հատկապես ուսումնասիրելով, թե ինչպես է աշխատում գրաֆիկական կեղևը (սեղանի միջավայր, DE), ի դեպ, ես ունեմ Xfce Linux Mint-ում, ցույց տվեց, որ հավելվածները և դրա հետ կապված մնջախաղը սովորաբար գրվում են ուղղակիորեն. դյուրանցման ֆայլեր .desktop ընդլայնմամբ: Դե, ինչու ոչ, ես ստեղծում եմ հավելվածի պարզ դյուրանցում, որը պարզապես պետք է գործարկի bash script և դուրս բերի դրան փոխանցված փաստարկը կոնսոլ, ես տրամադրում եմ միայն դյուրանցման ֆայլը ինքնին.

[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-ը վահանակից՝ անցնելով նույն հղումը, որը գալիս է բրաուզերից և... Կրկին ասում է, որ այն չի կարող մշակել հղումը:

Ինչպես պարզվեց, ես չեմ թարմացրել իմ հավելվածի հետ կապված mime-types գրացուցակը: Դա արվում է պարզ հրամանով.

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

որը պարզապես խմբագրում է ֆայլը ~/.config/mimeapps.list.

Փորձ թիվ 2 xdg-բաց զանգով - և կրկին ձախողում: Ոչինչ, դժվարությունները մեզ չեն վախեցնում, այլ միայն խթանում են մեր հետաքրքրությունը։ Եվ զինված լինելով բաշի ողջ ուժով (այսինքն՝ հետագծում), մենք առաջին հերթին սուզվում ենք վրիպազերծման մեջ: Այստեղ կարևոր է նշել, որ xdg-open-ը պարզապես shell script է:

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 scheme) ունի թվեր, իսկ կանոնավոր արտահայտությունը ստուգում է միայն :alpha: կետերից և գծիկներից բաղկացած նիշերի հավաքածուն։ Համար rfc3986 ստանդարտի հետ խորհրդակցելուց հետո միատեսակ ռեսուրսի նույնացուցիչ Պարզ դարձավ, որ այս անգամ Microsoft-ը ոչինչ չի խախտում (չնայած ես նման տարբերակ ունեի)։ Պարզապես նիշերի դասը :alpha: պարունակում է միայն լատինական այբուբենի տառեր: Ես արագորեն փոխում եմ սովորական ստուգումը այբբենականի: Կատարված, դուք զարմանալի եք, վերջապես ամեն ինչ սկսվում է, բոլոր ստուգումներից հետո վերահսկումը տրվում է մեր սցենարային հավելվածին, մեր հղումը ցուցադրվում է վահանակի վրա, ամեն ինչ այնպես է, ինչպես պետք է լինի: Սրանից հետո ես սկսում եմ կասկածել, որ exo-open-ի հետ կապված բոլոր խնդիրները պայմանավորված են նաև հղումի ձևաչափի վավերացմամբ՝ կապված սխեմայի թվերի հետ: Հիպոթեզը ստուգելու համար ես դիմումի միմի տիպի գրանցումը փոխում եմ ընդամենը սխեմայի lync և 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 plugin-ը հասանելի է dbus-ի միջոցով փոխազդելու համար (desktop bus) և սկրիպտների ներսում կան կոնֆերանսին միանալու օրինակներ հղումով, կա՛մ կազմակերպչի անվան և 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 սխեմայի համար CONF ու... ոչինչ չի լինում։ Բրաուզերը շարունակում է բողոքել, որ չկա որևէ ծրագիր, որը կարգավորում է իմ հղումները։ Այս դեպքում պարամետրերով վահանակից xdg-open կանչելը հիանալի է աշխատում։

«Set custom protocol handler in 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-ի հղումը, ձեզ կհարցնեն, թե որ հավելվածով այն բացել:

- Սեմյոն Սեմենիչ
-Ահհ

Մենք չենք սեղմում հղման վրա, այլ վեբ էջը պարզապես փոխում է window.location-ը Javascript-ի միջոցով: Ես գրում եմ պարզ html ֆայլ՝ հղումով conf արձանագրությանը, բացում եմ այն ​​բրաուզերում, սեղմում հղման վրա՝ Yos! Բացվում է պատուհան, որում հարցնում ենք, թե որ հավելվածում պետք է բացենք մեր հղումը, և այնտեղ մենք արդեն ունենք մեր Lync հավելվածը ցուցակում. մենք ազնվորեն գրանցել ենք այն բոլոր հնարավոր ձևերով: Այնտեղ պատուհանում կա վանդակ «հիշիր ընտրությունը և միշտ բացիր հղումները մեր հավելվածում», նշիր այն, սեղմիր OK: Եվ սա երկրորդ հաղթանակն է՝ բացվում է կոնֆերանսի պատուհանը։ Միևնույն ժամանակ, կոնֆերանսների բացումը գործում է ոչ միայն հղման վրա սեղմելիս, այլ նաև մեզ անհրաժեշտ միանալու էջից կոնֆերանսի անցնելիս:

Հետո ստուգեցի՝ ջնջելով պարամետրերը network.protocol-handler.expose.conf ոչ մի կերպ չի ազդել Fox-ում արձանագրության գործարկման վրա: Հղումները շարունակեցին աշխատել։

Ամփոփում

Ես վերբեռնել եմ իմ ամբողջ աշխատանքը GitHub պահեստում, բոլոր ռեսուրսների հղումները կլինեն հոդվածի վերջում:
Ինձ հետաքրքիր կլինի արձագանքներ ստանալ նրանցից, ովքեր ցանկանում են օգտվել իմ աշխատանքից: Անմիջապես պետք է նշեմ, որ ես ամբողջ զարգացումն արել եմ միայն իմ Linux Mint համակարգի համար, ուստի որոշ այլ բաշխումներ կամ աշխատասեղաններ կարող են չաշխատել այդ տարբերակում։ Ավելի ճիշտ, ես նույնիսկ գրեթե համոզված եմ դրանում, քանի որ ես կարկատել եմ միայն 1 ֆունկցիա xdg-open-ում, որը վերաբերում է միայն իմ DE-ին: Եթե ​​ցանկանում եք ավելացնել աջակցություն այլ համակարգերի կամ աշխատասեղանների համար, գրեք ինձ pull հարցումներ Github-ում:

Ամբողջ նախագիծը տեւեց 1 երեկո:

Հղումներ.

Source: www.habr.com

Добавить комментарий