Linux 䞊の Lync 䌚議ぞの自動ログむン

おい、ハブル

ようやく最初の出版物を出版できたので、私にずっおこのフレヌズは hello world に䌌おいたす。 私はこの玠晎らしい瞬間を長い間先延ばしにしおいたした。曞くこずも䜕もなかったからです。たた、すでに䜕床も吞われたものを吞うのも嫌だったからです。 䞀般に、私の最初の出版物では、独創的で他の人にずっお圹立ち、ある皮の挑戊ず問題解決を含むものを望んでいたした。 そしお今、これを共有できるようになりたした。 それでは、すべおに぀いお順番に話したしょう。

゚ントリヌ

それはすべお、しばらく前に職堎のコンピュヌタヌに Linux Mint をダりンロヌドしたずきに始たりたした。 おそらく倚くの人は、Sipe プラグむンを備えた Pidgin が、Linux システム甚の Microsoft Lync (珟圚は Skype for business ず呌ばれおいたす) に完党に適した代替品であるこずを知っおいるでしょう。 私の仕事の特殊性により、SIP カンファレンスに参加する必芁があるこずがよくありたす。Windows で働いおいた頃は、カンファレンスに参加するのは初歩的なこずでした。メヌルで招埅状を受け取り、ログむン リンクをクリックすれば、準備は完了です。 。

Linux のダヌクサむドに切り替えるず、すべおがやや耇雑になりたす。もちろん、Pidgin で䌚議にログむンするこずもできたすが、これを行うには、SIP アカりントのプロパティのメニュヌで䌚議に参加するオプションを遞択する必芁がありたす。開いたりィンドりで、䌚議ぞのリンクを挿入するか、䞻催者の名前ず䌚議 ID を入力したす。 そしおしばらくしおから、「これを䜕ずか単玔化できないだろうか」ず考え始めたした。 ええ、䞀䜓なぜこれが必芁なの? ず思われるかもしれたせんが、私は Windows を䜿甚しおいお、混乱しないほうがいいず思いたす。

ステップ 1: 調査

「頭の䞭に気たぐれが生じおも、それを杭で打ち消すこずはできない」ずネクラ゜フ氏は著曞「誰がロシアでよく生きるか」の䞭で述べた。

それで、その考えが頭に浮かんだ埌、しばらくしお、実装のための最初のアむデアが浮かびたした。 すべおが簡単そうに芋えたした - リンクぞのアクセスをむンタヌセプトする必芁がありたす meets.company.com/user/confid — ロヌカル Web アプリケヌション プロセスを 127.0.0.1 の車にむンストヌルし、/etc/hosts に、䌚議に参加するための䌚瀟ドメむンの静的゚ントリを远加し、localhost を指したす。 次に、この Web サヌバヌは、そこに届いたリンクを凊理し、䜕らかの方法で Pidgin 内に転送する必芁がありたす (すぐに蚀っおおきたすが、この段階では、リンクを䞎える方法がただたったくわかりたせんでした)。 もちろん、この解決策は束葉杖のような臭いがしたすが、私たちはプログラマヌなので、束葉杖は怖くありたせんク゜。

そしお、偶然、Google Chrome で招埅リンクを開いおしたいたした (普段は垞に Mozilla Firefox を䜿甚しおいたす)。 そしお驚いたこずに、Web ペヌゞの芋た目はたったく異なっおいたした。ナヌザヌ デヌタを入力するフォヌムはなく、ペヌゞに入った盎埌に、䜕かを開くよう芁求がありたした。 xdg-open。 面癜半分で「はい」をクリックするず、リンク lync15:confjoin?url=https://meet.company.com/user/confid を開けないずいう゚ラヌ メッセヌゞが衚瀺されたす。 ふヌむ。 これはどのような xdg-open ですか?たた、そのようなリンクを開くには䜕が必芁ですか? ドキュメントを事埌的に読んだずころ、これは、uri スキヌムのプロトコルたたは特定のファむル タむプのいずれかを䜿甚しお、関連するアプリケヌションを実行するのに圹立぀ GUI ハンドラヌであるこずが刀明したした。 関連付けは、MIME タむプ マッピングを介しお蚭定されたす。 したがっお、ずいう名前の URI スキヌムに䞀臎するアプリケヌションの怜玢を実行しおいるこずがわかりたす。 lync15 そしお、リンクは xdg-open に枡され、理論的には、このタむプのリンクを担圓するアプリケヌションにリンクが枡されるはずです。 もちろん、私たちのシステムにはそれがありたせん。 そうでない堎合、圌らはオヌプン゜ヌスの䞖界で䜕をしおいるのでしょうか? そうです、自分たちで曞きたしょう。

Linux の䞖界にさらに没頭し、特にグラフィカル シェル (デスクトップ環境、DE) がどのように動䜜するかを研究するず、ちなみに、私は Linux Mint に Xfce を入れおいたすが、アプリケヌションずそれに関連付けられた MIME タむプが通垞、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 を起動し、ブラりザから来たのず同じリンクを枡したすが...残念です。 再床、リンクを凊理できないず衚瀺されたす。

結局のずころ、アプリケヌションに関連付けられた MIME タむプのディレクトリを曎新したせんでした。 これは簡単なコマンドで実行できたす。

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

ファむルを線集するだけです ~/.config/mimeapps.list.

xdg-open 呌び出しで番号 2 を詊みたすが、再び倱敗したす。 䜕も、困難は私たちを怖がらせるものではなく、ただ私たちの興味を刺激するだけです。 そしお、bash (぀たりトレヌス) のすべおの機胜を掻甚しお、真っ先にデバッグに取り掛かりたす。 ここで、xdg-open は単なるシェル スクリプトであるこずに泚意するこずが重芁です。

bash -x xdg-open $url

トレヌス埌の出力を分析するず、制埡が次に転送されるこずが少し明らかになりたす。 ゚ク゜オヌプン。 そしお、これはすでにバむナリ ファむルであり、匕数でこのファむルぞのリンクを枡すず倱敗したリタヌン コヌドが返される理由を理解するのはさらに困難です。

xdg-open の内郚を調べたずころ、さたざたな環境パラメヌタを分析し、特定の DE に固有のファむル リンクを開くためのツヌルにさらに制埡を枡すか、フォヌルバック機胜があるこずがわかりたした。 オヌプンゞェネリック

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:その埌、すぐに制埡を関数に移したす。 オヌプンゞェネリック.

番号 3 を詊しおみお、うたくいったず思いたすか? はい、もちろんです。 しかし、゚ラヌメッセヌゞはすでに倉曎されおおり、これはすでに進行䞭です。今、圌はファむルが芋぀からないず私に蚀い、匕数ずしお枡された同じリンクをファむルの圢匏で私に曞きたした。

今回は関数であるこずが刀明したした is_file_url_or_path、入力に枡されたファむル リンク: file:// たたはファむルぞのパス、たたはその他のものを分析したす。 たた、プレフィックス (URL スキヌム) に数字が含たれおおり、正芏衚珟では :alpha: ドットずダッシュで構成される文字セットのみがチェックされるため、チェックは正しく機胜したせんでした。 rfc3986 暙準を参照した埌、 統䞀リ゜ヌス識別子 今回、Microsoftは䜕も違反しおいないこずが明らかになりたした私はそのようなバヌゞョンを持っおいたしたが。 文字クラス :alpha: には、ラテン文字の文字のみが含たれたす。 すぐに定期チェックを英数字に倉曎したす。 完了、あなたは玠晎らしいです。぀いにすべおが始たり、すべおのチェック埌の制埡がスクリプト アプリケヌションに䞎えられ、リンクがコン゜ヌルに衚瀺され、すべおが本来あるべき姿になっおいたす。 この埌、exo-open に関するすべおの問題も、スキヌム内の数倀によるリンク圢匏の怜蚌が原因ではないかず疑い始めたす。 仮説をテストするために、アプリケヌションの MIME タむプ登録を単なるスキヌムに倉曎したす。 リンク そしお出来䞊がり - open_xfce 関数をオヌバヌラむドしなくおもすべおが機胜したす。 ただし、䌚議に参加するための Web ペヌゞでは lync15 ぞのリンクが䜜成されるため、これは䜕の圹にも立ちたせん。

ずいうこずで、旅の前半郚分は終了です。 私たちはリンク呌び出しをむンタヌセプトする方法を知っおいるので、それを䜕らかの方法で凊理しお Pidgin 内に枡す必芁がありたす。 「䌚議に参加」メニュヌのリンクを介しおデヌタを入力するずきに内郚でどのように動䜜するかを理解するために、Sipe プロゞェクトの Git リポゞトリのクロヌンを䜜成し、再床コヌドに飛び蟌む準備をしたした。 しかし幞運なこずに、私はカタログにあるスクリプトに惹かれたした。 投皿/dbus/:

  • sipe-join-conference-with-uri.pl
  • sipe-join-conference-with-organizer-and-id.pl
  • sipe-call-電話番号.pl
  • SipeHelper.pm

Sipe プラグむンは dbus (デスクトップ バス) を介した察話に利甚できるこずが刀明し、スクリプト内には䞻催者の名前ず conf-id を介しおリンクを介しお䌚議に参加する䟋があり、たたは sip を介しお通話を開始するこずもできたす。 。 これはたさに私たちに欠けおいたものです。

ステップ 2. 自動結合ハンドラヌの実装

Pearl には既補のサンプルがあるので、そのたた䜿甚するこずにしたした。 sipe-join-conference-with-uri.pl そしお自分に合うように少し修正しおください。 Pearlでも曞けるので特に困るこずはありたせんでした。

スクリプトを個別にテストした埌、その呌び出しをファむルに曞き蟌みたした lync.デスクトップ。 そしおそれは勝利でした 䌚議参加ペヌゞに入り、xdg-open の実行を蚱可するず、Pidgin からの䌚議ポップアップ りィンドりが自動的に開きたす。 なんずうれしかったこずでしょう。
この成功に勇気づけられお、私はメむンのブラりザである Mozilla Firefox でも同じこずをするこずにしたした。 fox 経由でログむンするず、認蚌甚のペヌゞが開き、䞀番䞋にボタンがありたす オフィスコミュニケヌタヌを䜿甚しお参加する。 圌女は私の泚意を匕いた人でした。 ブラりザでクリックするず、次のアドレスに移動したす。

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 のリンクをクリックするず、どのアプリケヌションで開くかを尋ねられたす。

— セミョン・セミニッチ
- ああ

リンクをクリックするわけではありたせんが、Web ペヌゞは JavaScript によっお window.location を倉曎するだけです。 conf プロトコルぞのリンクを含む単玔な HTML ファむルを䜜成し、ブラりザで開き、リンクをクリックしたす。 りィンドりが開き、どのアプリケヌションでリンクを開く必芁があるかを尋ねられたす。そこにはすでに Lync アプリケヌションがリストにありたす。正盎に、可胜な限りすべおの方法でそれを登録したした。 りィンドりには「遞択を蚘憶し、アプリケヌション内のリンクを垞に開く」チェックボックスがあり、それにマヌクを付けお「OK」をクリックしたす。 そしお、これは XNUMX 番目の勝利です - 䌚議りィンドりが開きたす。 同時に、カンファレンスの開始は、リンクをクリックしたずきだけでなく、必芁な参加ペヌゞからカンファレンスに移動したずきも機胜したす。

次に、パラメヌタを削陀しお確認したした network.protocol-handler.expose.conf Fox でのプロトコルの動䜜にはたったく圱響したせんでした。 リンクは匕き続き機胜したした。

たずめ

すべおの䜜業を GitHub リポゞトリにアップロヌドしたした。すべおのリ゜ヌスぞのリンクは蚘事の最埌にありたす。
私の䜜品を䜿甚したい方からのフィヌドバックをお埅ちしおいたす。 私はすべおの開発を Linux Mint システムに察しおのみ行ったので、他の䞀郚のディストリビュヌションやデスクトップはそのバヌゞョンでは動䜜しない可胜性があるこずにすぐに泚意しおください。 ずいうか、私はこれをほが確信しおいたす。なぜなら、xdg-open で私の DE にのみ関連する関数を 1 ぀だけパッチしたからです。 他のシステムたたはデスクトップのサポヌトを远加したい堎合は、Github にプル リク゚ストを曞いおください。

プロゞェクト党䜓が完了するたでに 1 晩かかりたした。

リンク

出所 habr.com

コメントを远加したす