Automatesch Login op Lync Konferenzen op Linux

Hey Habr!

Fir mech ass dëse Saz ähnlech wéi Hallo Welt, well ech endlech op meng éischt Verëffentlechung komm sinn. Ech hunn dee wonnerbare Moment fir eng laang Zäit ofgesot, well et näischt ze schreiwen war, an ech wollt och net op eppes suckelen, wat schonn eng ganz Rëtsch gesuckelt gouf. Am Allgemengen, fir meng éischt Verëffentlechung wollt ech eppes Original, nëtzlech fir anerer an enthält eng Zort Erausfuerderung a Problemléisung. An elo kann ech dat deelen. Elo schwätze mer iwwer alles an der Rei.

Element

Et huet alles ugefaang wéi virun enger Zäit ech Linux Mint op mengem Aarbechtscomputer erofgelueden hunn. Vill Leit wësse wahrscheinlech datt Pidgin mam Sipe Plugin e komplett passenden Ersatz fir Microsoft Lync (elo Skype fir Business genannt gëtt) fir Linux Systemer ass. Wéinst de Spezifizitéite vu menger Aarbecht muss ech dacks un SIP Konferenzen deelhuelen, a wann ech Windows Aarbechter war, war d'Konferenzen anzeginn elementar: mir kréien eng Invitatioun per Mail, klickt op de Login Link, a mir si prett fir ze goen .

Wann Dir op déi däischter Säit vu Linux wiesselt, gouf alles e bësse méi komplizéiert: natierlech kënnt Dir och op Konferenzen a Pidgin aloggen, awer fir dëst ze maachen, musst Dir d'Konferenzoptioun am Menü an den Eegeschafte vun Ärem SIP Kont auswielen an an der Fënster déi opmaacht, setzt e Link op d'Konferenz un oder gitt den Numm vum Organisateur a Conf id. An no enger Zäit hunn ech ugefaang ze denken: "ass et méiglech dëst iergendwéi ze vereinfachen?" Jo, Dir kéint soen, firwat d'Häll braucht Dir dat?

Schrëtt 1: Fuerschung

"Wann Dir e Geck an Ärem Kapp kritt, kënnt Dir et net mat engem Spill schloen", sot den Nekrasov a sengem Wierk "Who Lives Well in Rus".

Also, eemol de Gedanken an de Kapp koum, no enger Zäit déi éischt Iddi fir Ëmsetzung opgestan. Alles schéngt einfach ze sinn - Dir musst Zougang zu Linken ofbriechen meet.company.com/user/confid - Installéiert e lokale Webapplikatiounsprozess op Ärem Auto op 127.0.0.1 an an /etc/hosts füügt eng statesch Entrée fir d'Firma Domain duerch déi Dir an d'Konferenz gitt, weist op localhost. Als nächst muss dëse Webserver de Link veraarbecht deen dorop komm ass an iergendwéi bannen Pidgin transferéieren (ech soen direkt datt ech op dëser Etapp nach ëmmer keng Ahnung hat wéi ech et iwwerhaapt ginn soll). D'Léisung richt selbstverständlech no Krutzen, awer mir sinn Programméierer, Krutchen erschrecken eis net (Schäiss).

Dunn hunn ech per Zoufall iergendwéi den Invitatiounslink am Google Chrome opgemaach (an normalerweis benotzen ech ëmmer Mozilla Firefox). An zu menger Iwwerraschung huet d'Websäit komplett anescht ausgesinn - et gouf kee Formulaire fir d'Benotzerdaten anzegoen an direkt nom Agank op d'Säit gouf et eng Demande fir eppes opzemaachen duerch xdg-op. Just for fun, Ech klickt "Jo" an eng Fehlermeldung schéngt - de Link lync15:confjoin?url=https://meet.company.com/user/confid kann net opgemaach ginn. Hmm. Wéi eng xdg-open ass dëst a wat brauch et fir datt sou Linken opmaachen? Eng Post-mortem Liesung vun der Dokumentatioun huet verroden datt et e GUI Handler ass deen hëlleft assoziéiert Uwendungen ze lafen entweder mat Protokoller fir den Uri Schema oder mat spezifesche Dateitypen. Associatiounen ginn iwwer Mime-Typ Mapping konfiguréiert. Also gesi mir datt mir eng Sich no enger passend Uwendung fir en Uri Schema mam Numm lafen lync 15 an de Link gëtt op xdg-open weiderginn, déi dann, an der Theorie, et un eng Applikatioun weiderginn, déi fir dës Zort vu Link verantwortlech ass. Wat mir natierlech net an eisem System hunn. Wann net, wat maache se dann an der Open Source Welt? Dat ass richteg, mir schreiwen et selwer.

Weider Tauche an der Welt vu Linux a besonnesch beim Studium wéi déi grafesch Shell (Desktop-Ëmfeld, DE) funktionnéiert, iwwregens, ech hunn Xfce am Linux Mint, huet gewisen datt Uwendungen an de Mime-Typ, deen domat verbonnen ass, normalerweis direkt an Ofkierzungsdateien mat der Erweiderung .desktop. Gutt, firwat net, ech erstellen eng einfach Applikatioun Ofkiirzung, déi einfach e Bash Skript lancéiere soll an d'Argument erausginn, déi et op d'Konsole passéiert, ech bidden nëmmen d'Ofkiirzungsdatei selwer:

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

Ech lancéiere xdg-open vun der Konsole, laanscht dee selwechte Link deen aus dem Browser kënnt an ... Bummer. Nach eng Kéier seet et datt et de Link net kann veraarbechten.

Wéi et sech erausstellt, hunn ech de Verzeechnes vun assoziéierten Mime-Typen net mat menger Applikatioun aktualiséiert. Dëst gëtt mat engem einfachen Kommando gemaach:

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

déi einfach d'Datei ännert ~/.config/mimeapps.list.

Versuch Nummer 2 mam xdg-open Opruff - an erëm Echec. Näischt, Schwieregkeeten erschrecken eis net, awer fërderen nëmmen eisen Interessi. A bewaffnet mat all der Kraaft vum Bash (dh Tracing), dauche mir als éischt an Debugging. Et ass wichteg hei ze notéieren datt xdg-open just e Shell-Skript ass.

bash -x xdg-open $url

D'Analyse vum Ausgang nom Tracing gëtt e bësse kloer datt d'Kontroll dann op transferéiert gëtt exo-oppen. An dëst ass schonn eng binär Datei an et ass méi schwéier ze verstoen firwat et en net erfollegräiche Retourcode gëtt wann Dir e Link dohinner an engem Argument weiderginn.

Nodeems ech d'Innere vu xdg-open gekuckt hunn, hunn ech erausfonnt datt et verschidden Ëmweltparameter analyséiert an d'Kontroll weider passt entweder op e puer Tools fir Dateilinks spezifesch fir e bestëmmten DE opzemaachen, oder et huet eng Réckfallfunktioun 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
}

Ech wäert hei séier e klengen Hack mat Analyse vum passéierten Argument embeden a wann eise spezifesche Substring do läit lync15:, da transferéiere mir direkt d'Kontroll op d'Funktioun open_generic.

Versuch Nummer 3 an mengt Dir et geklappt? Jo, elo, natierlech. Awer d'Fehlermeldung ass scho geännert, dëst ass scho Fortschrëtter - elo huet hien mir gesot datt d'Datei net fonnt gouf an a Form vun enger Datei huet hien mir dee selwechte Link geschriwwen, deen als Argument passéiert ass.

Dës Kéier gouf et eng Funktioun is_file_url_or_path, déi den Dateilink analyséiert, deen un den Input: Datei:// oder de Wee op d'Datei oder soss eppes ass. An de Scheck huet net richteg funktionéiert wéinst der Tatsaach, datt eise Präfix (URL Schema) Zuelen huet, an de regulären Ausdrock kontrolléiert nëmmen d'Zeechenset besteet aus :alpha: Punkten a Bindestrecken. No Consultatioun vun der rfc3986 Norm fir eenheetlech Ressource Identifizéierer Et gouf kloer datt dës Kéier Microsoft näischt verletzt (och wann ech esou eng Versioun hat). Just d'Zeechenklass :alpha: enthält nëmmen Buschtawen vum laténgesche Alphabet. Ech änneren séier de reguläre Scheck op alphanumeresch. Gemaach, Dir sidd erstaunlech, alles fänkt endlech un, d'Kontroll no all Kontrollen gëtt eis Skriptapplikatioun kritt, eise Link gëtt op der Konsole ugewisen, alles ass wéi et soll sinn. Duerno fänken ech un ze verdächtegen datt all d'Problemer mat Exo-Open och wéinst der Validatioun vum Linkformat wéinst den Zuelen am Schema sinn. Fir d'Hypothese ze testen, änneren ech d'Mime-Typ Aschreiwung vun der Applikatioun op just e Schema lynx a voila - alles funktionnéiert ouni d'Open_xfce Funktioun ze iwwerschreiden. Awer dëst wäert eis op kee Fall hëllefen, well d'Websäit fir d'Konferenz anzeginn e Link mat lync15 erstellt.

Also ass den éischten Deel vun der Rees ofgeschloss. Mir wësse wéi een e Link Uruff offänkt an da muss et iergendwéi veraarbecht ginn a bannent Pidgin passéiert ginn. Fir ze verstoen wéi et intern funktionnéiert wann Dir Daten iwwer e Link am Menu "join a conference" aginn, hunn ech de Git-Repository vum Sipe-Projet gekloont a si prett fir erëm an de Code ze tauchen. Awer dunn, glécklecherweis, gouf ech vun de Scripten am Katalog ugezunn Contributioun/dbus/:

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

Et stellt sech eraus datt de Sipe Plugin fir Interaktioun iwwer dbus (Desktop Bus) verfügbar ass a bannent de Skripte ginn et Beispiller fir eng Konferenz iwwer e Link matzemaachen, entweder duerch den Numm vum Organisateur an d'Conf-ID, oder Dir kënnt en Uruff iwwer Sip initiéieren . Genee dat hu mir gefeelt.

Schrëtt 2. Ëmsetzung vun engem Autojoin Handler

Well et fäerdeg Beispiller an Pearl sinn, hunn ech decidéiert just ze benotzen sipe-join-conference-with-uri.pl an änneren et e bëssen fir Iech selwer ze passen. Ech kann an Pearl schreiwen, also huet et keng speziell Schwieregkeeten verursaacht.

Nodeems ech de Skript getrennt getest hunn, hunn ech säin Uruff an d'Datei geschriwwen lync.desktop. An et war eng Victoire! Wann Dir op d'Konferenz-Joint-Säit gitt an xdg-open erlaabt ze lafen, wäert d'Konferenz Popup-Fënster vu Pidgin automatesch opmaachen. Wéi ech gefreet hunn.
Encouragéiert vum Erfolleg hunn ech beschloss datselwecht fir mäin Haaptbrowser, Mozilla Firefox, ze maachen. Wann Dir Iech duerch de Fuuss aloggen, mécht eng Säit fir d'Autorisatioun op an ganz ënnen ass e Knäppchen bäitrieden Office communicator benotzt. Si war déi, déi meng Opmierksamkeet gefaangen huet. Wann Dir op et am Browser klickt, geet et op d'Adress:

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

zu deem hie seet mir frëndlech, datt hien net weess wéi et opzemaachen an, vläicht, ech hu keng verbonne Applikatioun fir esou e Protokoll. Gutt, mir sinn schonn duerch dëst.

Ech registréiere séier meng Skriptapplikatioun och fir den Uri Schema conf an ... näischt geschitt. De Browser beschwéiert ëmmer erëm datt et keng Applikatioun gëtt déi meng Links handhabt. An dësem Fall, ruffen xdg-open vun der Konsole mat Parameteren funktionnéiert perfekt.

"Set personaliséiert Protokoll Handler am Firefox" - Ech sinn online mat dëser Fro gaang. Nodeems Dir e puer Diskussiounen iwwer Stackoverflow duerchgaang ass (a wou si mir ouni et), schéngt et wéi wann d'Äntwert fonnt gouf. Dir musst e spezielle Parameter erstellen an iwwer: config (natierlech ersetzt foo duerch conf):

network.protocol-handler.expose.foo = false

Mir kreéieren et, öffnen de Link an ... kee Gléck. De Browser, wéi wann näischt geschitt wier, seet datt hien eis Applikatioun net kennt.

Ech liesen déi offiziell Dokumentatioun iwwer d'Aschreiwung vun engem Protokoll vu Mozilla, et gëtt eng Optioun fir Associatiounen am Gnom-Desktop selwer ze registréieren (natierlech foo mat conf ersetzen):

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

Ech registréieren, maachen de Browser op ... an erëm de Baart.

Hei ass eng Zeil aus der Dokumentatioun opfälleg:

D'nächst Kéier wann Dir op e Link vum Protokolltyp foo klickt, gitt Dir gefrot wéi eng Applikatioun et opmaacht.

— Semyon Semenych
- Ahh

Mir klickt net op de Link, mee d'Websäit ännert einfach Fënster.Lokatioun iwwer Javascript. Ech schreiwen eng einfach HTML-Datei mat engem Link op de Conf-Protokoll, öffnen se am Browser, klickt op de Link - Yos! Eng Fënster mécht op a freet a wéi enger Applikatioun mir eise Link opmaachen mussen, an do hu mir schonn eis Lync Applikatioun an der Lëscht - mir hunn et éierlech op all méiglech Manéier registréiert. Do an der Fënster gëtt et e Checkbox "Erënnert un d'Wiel an oppen ëmmer Linken an eiser Applikatioun", markéiert et, klickt ok. An dëst ass déi zweet Victoire - d'Konferenzfenster mécht op. Zur selwechter Zäit funktionnéiert d'Ouverture vun Konferenzen net nëmmen wann Dir op e Link klickt, awer och wann Dir vun der Bäitrëttssäit bewegt, déi mir op d'Konferenz brauchen.

Dunn hunn ech gepréift, Parameteren läschen network.protocol-handler.expose.conf huet op kee Fall d'Operatioun vum Protokoll zu Fox beaflosst. D'Links hunn weider geschafft.

Konklusioun

Ech hunn all meng Aarbecht op de GitHub Repository eropgelueden; Linken op all Ressourcen wäerten um Enn vum Artikel sinn.
Ech wäert interesséiert sinn fir Feedback vun deenen ze kréien déi meng Aarbecht benotze wëllen. Ech sollt direkt bemierken datt ech all Entwécklung nëmme fir mäi Linux Mint System gemaach hunn, sou datt e puer aner Distributiounen oder Desktops vläicht net an där Versioun funktionnéieren. Oder éischter, ech si souguer bal sécher dovun, well ech nëmmen 1 Funktioun am xdg-open patchéiert hunn, déi nëmmen op meng DE bezitt. Wann Dir Ënnerstëtzung fir aner Systemer oder Desktops wëllt addéieren, schreift mir Pull Ufroen op Github.

De ganze Projet huet 1 Owend gedauert fir fäerdeg ze sinn.

Referenzen:

Source: will.com

Setzt e Commentaire