Mewngofnodi awtomatig i gynadleddau Lync ar Linux

Hei Habr!

I mi, mae'r ymadrodd hwn yn debyg i helo fyd, ers i mi gyrraedd fy nghyhoeddiad cyntaf o'r diwedd. Gohiriais y foment wych hon am amser hir, gan nad oedd dim i ysgrifennu amdano, a hefyd nid oeddwn am sugno ar rywbeth a oedd eisoes wedi cael ei sugno droeon. Yn gyffredinol, ar gyfer fy nghyhoeddiad cyntaf roeddwn i eisiau rhywbeth gwreiddiol, defnyddiol i eraill ac yn cynnwys rhyw fath o her a datrys problemau. A nawr gallaf rannu hwn. Nawr gadewch i ni siarad am bopeth mewn trefn.

Mynediad

Dechreuodd y cyfan pan wnes i lawrlwytho Linux Mint ar fy nghyfrifiadur gwaith beth amser yn ôl. Mae'n debyg bod llawer o bobl yn gwybod bod Pidgin gyda'r ategyn Sipe yn lle cwbl addas ar gyfer Microsoft Lync (a elwir bellach yn Skype for business) ar gyfer systemau Linux. Oherwydd manylion fy ngwaith, mae'n rhaid i mi gymryd rhan mewn cynadleddau SIP yn aml, a phan oeddwn yn weithiwr Windows, roedd mynd i gynadleddau yn elfennol: rydym yn derbyn gwahoddiad trwy'r post, cliciwch ar y ddolen mewngofnodi, ac rydym yn barod i fynd .

Wrth newid i ochr dywyll Linux, daeth popeth ychydig yn fwy cymhleth: wrth gwrs, gallwch chi hefyd fynd i mewn i gynadleddau yn Pidgin, ond i wneud hyn mae angen i chi ddewis yr opsiwn ymuno â chynhadledd yn y ddewislen ym mhhriodweddau eich cyfrif SIP ac i mewn y ffenestr sy'n agor, rhowch ddolen i'r gynhadledd neu rhowch enw'r trefnydd a conf id. Ac ar ôl peth amser dechreuais feddwl: “a oes modd symleiddio hyn rywsut?” Ie, efallai y byddwch chi'n dweud, pam yr uffern mae angen hyn arnoch chi byddai'n well gen i eistedd ar Windows a pheidio â chwythu fy meddwl.

Cam 1: Ymchwil

“Os cewch chi fympwy yn eich pen, ni allwch ei fwrw allan â stanc,” meddai Nekrasov yn ei waith “Who Lives Well in Rus’.”

Felly, unwaith y daeth y meddwl i fy mhen, ar ôl peth amser cododd y syniad cyntaf ar gyfer gweithredu. Roedd popeth yn ymddangos yn syml - mae angen i chi ryng-gipio mynediad i ddolenni meet.company.com/user/confid — gosodwch broses ymgeisio gwe leol ar eich car yn 127.0.0.1 ac yn /etc/hosts ychwanegwch gofnod statig ar gyfer parth y cwmni rydych chi'n mynd i mewn i'r gynhadledd trwyddo, gan bwyntio at localhost. Nesaf, rhaid i'r gweinydd gwe hwn brosesu'r ddolen a ddaeth ato a'i drosglwyddo rywsut y tu mewn i Pidgin (byddaf yn dweud ar unwaith nad oedd gennyf unrhyw syniad ar hyn o bryd sut i'w roi iddo o gwbl). Mae'r ateb, wrth gwrs, yn arogli fel baglau, ond rydym yn rhaglenwyr, nid yw baglau yn ein dychryn (cachu).

Yna, trwy hap a damwain, fe wnes i rywsut agor y ddolen wahoddiad yn Google Chrome (ac fel arfer rydw i bob amser yn defnyddio Mozilla Firefox). Ac er mawr syndod i mi, roedd y dudalen we yn edrych yn hollol wahanol - doedd dim ffurflen ar gyfer mewnbynnu data defnyddwyr ac yn syth ar ôl mynd i mewn i'r dudalen roedd cais i agor rhywbeth drwodd xdg-agored. Er mwyn cael hwyl, rwy'n clicio "ie" ac mae neges gwall yn ymddangos - ni ellir agor y ddolen lync15:confjoin?url=https://meet.company.com/user/confid. Hmm. Pa fath o xdg-open yw hwn a beth sydd ei angen arno er mwyn agor dolenni o'r fath? Datgelodd darlleniad post-mortem o'r ddogfennaeth ei fod yn driniwr GUI sy'n helpu i redeg rhaglenni cysylltiedig naill ai gyda phrotocolau ar gyfer y cynllun uri neu gyda rhai mathau o ffeiliau. Mae cymdeithasau yn cael eu ffurfweddu trwy fapio math meim. Felly gwelwn ein bod yn cynnal chwiliad am gais cyfatebol ar gyfer cynllun uri a enwir lync15 ac mae'r cyswllt yn cael ei drosglwyddo i xdg-open, a ddylai wedyn, mewn egwyddor, ei drosglwyddo i ryw gymhwysiad sy'n gyfrifol am y math hwn o ddolen. Sydd, wrth gwrs, nad oes gennym ni yn ein system. Os na, beth maen nhw'n ei wneud yn y byd ffynhonnell agored? Mae hynny'n iawn, byddwn yn ei ysgrifennu ein hunain.

Dangosodd trochi pellach ym myd Linux ac yn enwedig wrth astudio sut mae'r cragen graffigol (amgylchedd bwrdd gwaith, DE) yn gweithio, gyda llaw, mae gen i Xfce yn Linux Mint, fod cymwysiadau a'r math meim sy'n gysylltiedig ag ef fel arfer yn cael eu hysgrifennu'n uniongyrchol yn ffeiliau llwybr byr gyda'r estyniad .desktop. Wel, pam lai, rwy'n creu llwybr byr cymhwysiad syml, a ddylai lansio sgript bash ac allbynnu'r ddadl a drosglwyddwyd iddi i'r consol, dim ond y ffeil llwybr byr ei hun yr wyf yn ei darparu:

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

Rwy'n lansio xdg-open o'r consol, gan basio'r un ddolen a ddaw o'r porwr a ... bummer. Unwaith eto mae'n dweud na all brosesu'r ddolen.

Fel mae'n digwydd, ni wnes i ddiweddaru'r cyfeiriadur o fathau meim cysylltiedig gyda fy nghais. Gwneir hyn gyda gorchymyn syml:

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

sy'n golygu'r ffeil yn syml ~/.config/mimeapps.list.

Rhowch gynnig ar rif 2 gyda'r alwad xdg-open - a methiant eto. Dim byd, nid yw anawsterau yn ein dychryn, ond dim ond yn tanio ein diddordeb. Ac wedi'n harfogi â holl rym bash (h.y. olrhain), rydyn ni'n plymio'n gyntaf i ddadfygio. Mae'n bwysig nodi yma mai dim ond sgript cragen yw xdg-open.

bash -x xdg-open $url

Wrth ddadansoddi'r allbwn ar ôl olrhain daw ychydig yn amlwg bod rheolaeth yn cael ei drosglwyddo i exo-agored. Ac mae hwn eisoes yn ffeil ddeuaidd ac mae'n anoddach deall pam ei fod yn dychwelyd cod dychwelyd aflwyddiannus wrth basio dolen iddo mewn dadl.

Ar ôl edrych trwy fewnolion xdg-open, darganfyddais ei fod yn dadansoddi paramedrau amgylcheddol amrywiol ac yn trosglwyddo rheolaeth ymhellach naill ai i rai offer ar gyfer agor dolenni ffeiliau sy'n benodol i DE penodol, neu fod ganddo swyddogaeth wrth gefn agored_generig

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
}

Byddaf yn sefydlu darn bach yma yn gyflym gyda dadansoddiad o'r ddadl a basiwyd ac a yw ein his-linyn penodol wedi'i leoli yno lync15:, yna byddwn yn trosglwyddo rheolaeth ar unwaith i'r swyddogaeth agored_generig.

Rhowch gynnig ar rif 3 ac ydych chi'n meddwl ei fod wedi gweithio? Ie, nawr, wrth gwrs. Ond mae'r neges gwall eisoes wedi newid, mae hyn eisoes yn gynnydd - nawr roedd yn dweud wrthyf na ddaethpwyd o hyd i'r ffeil ac ar ffurf ffeil ysgrifennodd yr un ddolen ataf a basiwyd fel dadl.

Y tro hwn trodd allan i fod yn swyddogaeth yn_file_url_or_path, sy'n dadansoddi'r ddolen ffeil a basiwyd i'r mewnbwn: ffeil: // neu'r llwybr i'r ffeil neu rywbeth arall. Ac ni weithiodd y siec yn gywir oherwydd bod gan ein rhagddodiad (cynllun url) rifau, ac mae'r mynegiad rheolaidd yn gwirio'r set nodau sy'n cynnwys :alpha: dotiau a dashes yn unig. Ar ôl ymgynghori â safon rfc3986 ar gyfer dynodwr adnoddau unffurf Daeth yn amlwg nad yw Microsoft y tro hwn yn torri unrhyw beth (er bod gen i fersiwn o'r fath). Dim ond y dosbarth nodau :alpha: sy'n cynnwys llythrennau'r wyddor Ladin yn unig. Rwy'n newid y siec rheolaidd yn gyflym i alffaniwmerig. Wedi'i wneud, rydych chi'n anhygoel, mae popeth yn dechrau o'r diwedd, rheolaeth ar ôl i'r holl wiriadau gael eu rhoi i'n cymhwysiad sgript, mae ein cyswllt yn cael ei arddangos ar y consol, mae popeth fel y dylai fod. Ar ôl hyn, rwy'n dechrau amau ​​​​bod yr holl broblemau gydag exo-open hefyd oherwydd dilysu'r fformat cyswllt oherwydd y niferoedd yn y cynllun. I brofi'r ddamcaniaeth, rwy'n newid cofrestriad math meim y cais i gynllun yn unig lync a voila - mae popeth yn gweithio heb ddiystyru'r swyddogaeth open_xfce. Ond ni fydd hyn yn ein helpu mewn unrhyw ffordd, oherwydd mae'r dudalen we ar gyfer mynd i mewn i'r gynhadledd yn creu cyswllt â lync15.

Felly, mae rhan gyntaf y daith wedi’i chwblhau. Rydyn ni'n gwybod sut i ryng-gipio galwad cyswllt ac yna mae angen ei brosesu a'i basio rywsut y tu mewn i Pidgin. Er mwyn deall sut mae'n gweithio'n fewnol wrth fewnbynnu data trwy ddolen yn y ddewislen “join a conference”, fe wnes i glonio storfa Git y prosiect Sipe a pharatoi i blymio i'r cod eto. Ond wedyn, yn ffodus, cefais fy nenu gan y sgriptiau yn y catalog cyfrannu/dbus/:

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

Mae'n ymddangos bod yr ategyn Sipe ar gael ar gyfer rhyngweithio trwy dbus (bws bwrdd gwaith) ac y tu mewn i'r sgriptiau mae enghreifftiau o ymuno â chynhadledd trwy ddolen, naill ai trwy enw'r trefnydd a conf-id, neu gallwch chi gychwyn galwad trwy sip . Dyma'n union yr oeddem ar goll.

Cam 2. Gweithredu triniwr autojoin

Gan fod enghreifftiau parod yn Pearl, penderfynais eu defnyddio sipe-join-conference-with-uri.pl a'i addasu ychydig i weddu i chi'ch hun. Gallaf ysgrifennu yn Pearl, felly nid oedd yn achosi unrhyw anawsterau penodol.

Ar ôl profi'r sgript ar wahân, ysgrifennais ei alwad i mewn i'r ffeil lync.desktop. Ac roedd yn fuddugoliaeth! Wrth fynd i mewn i dudalen ymuno'r gynhadledd a chaniatáu i xdg-open redeg, byddai ffenestr naid y gynhadledd o Pidgin yn agor yn awtomatig. Sut roeddwn i'n llawenhau.
Wedi fy nghalonogi gan y llwyddiant, penderfynais wneud yr un peth ar gyfer fy mhrif borwr, Mozilla Firefox. Pan fyddwch yn mewngofnodi drwy'r llwynog, mae tudalen awdurdodi yn agor ac ar y gwaelod mae botwm ymuno gan ddefnyddio cyfathrebwr swyddfa. Hi oedd yr un a ddaliodd fy sylw. Pan gliciwch arno yn y porwr, mae'n mynd i'r cyfeiriad:

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

y mae'n dweud wrthyf yn garedig nad yw'n gwybod sut i'w agor ac, efallai, nid oes gennyf gais cysylltiedig am brotocol o'r fath. Wel, rydyn ni wedi bod trwy hyn yn barod.

Rwy'n cofrestru fy nghais sgript yn gyflym hefyd ar gyfer y cynllun uri conf a... dim byd yn digwydd. Mae'r porwr yn cwyno o hyd nad oes unrhyw raglen sy'n trin fy nghysylltiadau. Yn yr achos hwn, mae galw xdg-open o'r consol gyda pharamedrau yn gweithio'n berffaith.

“Gosod triniwr protocol arfer yn firefox” - Es i ar-lein gyda'r cwestiwn hwn. Ar ôl mynd trwy sawl trafodaeth ar stackoverflow (a ble fydden ni hebddo), mae'n ymddangos bod yr ateb wedi'i ddarganfod. Mae angen i chi greu paramedr arbennig yn am: ffurfweddu (wrth gwrs yn lle foo gyda conf):

network.protocol-handler.expose.foo = false

Rydyn ni'n ei greu, yn agor y ddolen a ... dim lwc o'r fath. Mae'r porwr, fel pe na bai dim wedi digwydd, yn dweud nad yw'n gwybod ein cais.

Rwy'n darllen y ddogfennaeth swyddogol ar gofrestru protocol gan Mozilla, mae opsiwn i gofrestru cymdeithasau yn y bwrdd gwaith gnome ei hun (gan ddisodli foo gyda conf, wrth gwrs):

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

Rwy'n cofrestru, yn agor y porwr ... ac eto y barf.

Dyma linell o'r ddogfennaeth yn dal fy llygad:

Y tro nesaf y byddwch yn clicio ar ddolen foo math o brotocol, gofynnir i chi pa raglen i'w hagor.

— Semyon Semenych
- Ahh

Nid ydym yn clicio ar y ddolen, ond mae'r dudalen we yn newid window.location trwy javascript. Rwy'n ysgrifennu ffeil html syml gyda dolen i'r protocol conf, ei agor yn y porwr, cliciwch ar y ddolen - Yos! Mae ffenestr yn agor yn gofyn ym mha gais y mae angen i ni agor ein dolen, ac yno mae ein cais Lync eisoes yn y rhestr - fe wnaethom ei gofrestru'n onest ym mhob ffordd bosibl. Mae yna hefyd flwch gwirio yn y ffenestr “cofiwch y dewis a agorwch ddolenni yn ein cais bob amser”, gwiriwch ef a chliciwch yn iawn. A dyma'r ail fuddugoliaeth - ffenestr y gynhadledd yn agor. Ar yr un pryd, mae agor cynadleddau yn gweithio nid yn unig pan fyddwch chi'n clicio ar ddolen, ond hefyd wrth symud o'r dudalen ymuno sydd ei hangen arnom i'r gynhadledd.

Yna gwiriais, gan ddileu paramedrau network.protocol-handler.expose.conf ni effeithiodd mewn unrhyw ffordd ar weithrediad y protocol yn Fox. Parhaodd y cysylltiadau i weithio.

Casgliad

Rwyf wedi uwchlwytho fy holl waith i ystorfa GitHub; bydd dolenni i'r holl adnoddau ar ddiwedd yr erthygl.
Bydd gennyf ddiddordeb mewn derbyn adborth gan y rhai sydd am ddefnyddio fy ngwaith. Dylwn nodi ar unwaith mai dim ond ar gyfer fy system Linux Mint y gwnes yr holl ddatblygiad, felly efallai na fydd rhai dosbarthiadau neu fyrddau gwaith eraill yn gweithio yn y fersiwn honno. Neu yn hytrach, rydw i hyd yn oed bron yn siŵr o hyn, oherwydd fe wnes i glytio dim ond 1 swyddogaeth yn xdg-open sy'n ymwneud â fy DE yn unig. Os ydych chi am ychwanegu cefnogaeth ar gyfer systemau neu fyrddau gwaith eraill, ysgrifennwch geisiadau tynnu ataf ar Github.

Cymerodd y prosiect cyfan 1 noson i'w gwblhau.

Cyfeiriadau:

Ffynhonnell: hab.com

Ychwanegu sylw