Линукс дээрх Lync хурал руу автоматаар нэвтрэх

Хөөе Хабр!

Миний хувьд энэ хэллэг нь "Сайн байна уу ертөнц"-тэй төстэй юм, учир нь би анхны хэвлэлээ олж авсан. Би энэ гайхалтай мөчийг удаан хугацаагаар хойшлуулсан, учир нь бичих зүйл байхгүй, мөн олон удаа сорж байсан зүйлийг хөхөхийг хүсээгүй. Ерөнхийдөө би анхны нийтлэлээ гаргахдаа бусдад хэрэгтэй, ямар нэгэн сорилт, асуудлыг шийдвэрлэх арга замыг агуулсан анхны зүйлийг хүсч байсан. Одоо би үүнийг хуваалцаж болно. Одоо бүх зүйлийг дарааллаар нь яръя.

нэвтрэх

Хэсэг хугацааны өмнө би ажлын компьютер дээрээ Linux Mint татаж авснаар бүх зүйл эхэлсэн. Sipe залгаастай Pidgin нь Линукс системүүдийн Microsoft Lync (одоо бизнесийн Skype гэж нэрлэгддэг)-ийг орлуулахад тохиромжтой гэдгийг олон хүмүүс мэддэг байх. Ажлын онцлогоос шалтгаалан би SIP бага хуралд оролцох шаардлагатай болдог бөгөөд Windows-ийн ажилтан байхдаа бага хуралд орох нь энгийн зүйл байсан: бид шуудангаар урилга хүлээн авч, нэвтрэх холбоос дээр дарж, бид явахад бэлэн байна. .

Линуксийн харанхуй тал руу шилжих үед бүх зүйл илүү төвөгтэй болсон: мэдээжийн хэрэг та Pidgin дээрх бага хуралд нэвтэрч болно, гэхдээ үүнийг хийхийн тулд та SIP дансныхаа шинж чанаруудын цэснээс бага хуралд нэгдэх сонголтыг сонгох хэрэгтэй. нээгдэх цонхонд хурлын холбоосыг оруулах эсвэл зохион байгуулагчийн нэр болон conf id-г оруулна уу. Хэсэг хугацааны дараа би "Үүнийг ямар нэгэн байдлаар хялбарчлах боломжтой юу?" гэж бодож эхлэв. Тийм ээ, чи яагаад чамд энэ хэрэгтэй байна гэж хэлэх байх?

Алхам 1: Судалгаа

"Хэрэв таны толгойд ямар нэгэн таагүй мэдрэмж төрвөл та үүнийг гадасаар цохиж чадахгүй" гэж Некрасов "Орос улсад хэн сайн амьдардаг вэ" бүтээлдээ дурджээ.

Ингээд нэг л бодол толгойд орж иртэл хэсэг хугацааны дараа хэрэгжүүлэх анхны санаа гарч ирэв. Бүх зүйл энгийн мэт санагдсан - та холбоос руу хандах хандалтыг зогсоох хэрэгтэй meet.company.com/user/confid — 127.0.0.1-д локал вэб програмын процессыг машиндаа суулгаж, /etc/hosts-д localhost руу чиглэн конференцид орох компанийн домэйнд статик оруулга нэмнэ үү. Дараа нь энэ вэб сервер өөрт ирсэн холбоосыг боловсруулж, ямар нэгэн байдлаар Pidgin дотор шилжүүлэх ёстой (энэ үе шатанд би үүнийг яаж өгөх талаар огт мэдэхгүй байсан гэдгийг би шууд хэлье). Мэдээжийн хэрэг, шийдэл нь таяг шиг үнэртэй, гэхдээ бид програмистууд, суга таяг биднийг айлгахгүй (новш).

Дараа нь санамсаргүй байдлаар би Google Chrome дээр урилгын холбоосыг нээсэн (мөн ихэвчлэн би Mozilla Firefox ашигладаг). Миний гайхсан нь вэб хуудас огт өөр харагдаж байсан - хэрэглэгчийн мэдээллийг оруулах хэлбэр байхгүй байсан бөгөөд хуудас руу орсны дараа шууд ямар нэгэн зүйл нээх хүсэлт ирсэн. xdg-нээлттэй. Зүгээр л хөгжилтэй байхын тулд би "тийм" дээр дарахад алдааны мэдэгдэл гарч ирнэ - lync15:confjoin?url=https://meet.company.com/user/confid холбоосыг нээх боломжгүй. Хмм. Энэ ямар төрлийн xdg-нээлттэй вэ, ийм холбоосыг нээхэд юу хэрэгтэй вэ? Баримт бичгийг үхсэний дараа уншихад энэ нь uri схемийн протокол эсвэл тодорхой файлын төрлүүдтэй холбоотой програмуудыг ажиллуулахад тусалдаг GUI зохицуулагч болохыг олж мэдсэн. Холбоосуудыг mime төрлийн зураглалаар тохируулдаг. Тиймээс бид нэрлэсэн uri схемд тохирох програмыг хайж байгааг харж байна lync15 мөн холбоосыг xdg-open руу дамжуулдаг бөгөөд энэ нь онолын хувьд энэ төрлийн холбоосыг хариуцдаг зарим аппликешн рүү дамжуулах ёстой. Энэ нь мэдээж манай системд байхгүй. Хэрэв тийм биш бол тэд нээлттэй эхийн ертөнцөд юу хийдэг вэ? Тийм ээ, бид өөрсдөө бичнэ.

Цаашид Линуксийн ертөнцөд нэвтрэн орж, ялангуяа график бүрхүүл (ширээний орчин, DE) хэрхэн ажилладаг талаар судлахад, дашрамд хэлэхэд, би Linux Mint-д Xfce-тэй байгаа нь програмууд болон түүнтэй холбоотой mime-төрлийг ихэвчлэн шууд бичдэг болохыг харуулсан. .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-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-р оролдлого, энэ нь үр дүнд хүрсэн гэж та бодож байна уу? Тийм ээ, одоо мэдээж. Гэхдээ алдааны мэдэгдэл аль хэдийн өөрчлөгдсөн, энэ нь аль хэдийн ахиц дэвшил болсон - одоо тэр надад файл олдсонгүй гэж хэлээд файл хэлбэрээр надад ижил холбоосыг аргумент болгон бичсэн.

Энэ удаад функц болж хувирав файлын_url_эсвэл_зам, оролт руу дамжуулсан файлын холбоосыг шинжилдэг: file:// эсвэл файлын зам эсвэл өөр зүйл. Мөн бидний угтвар (url схем) нь тоотой, ердийн илэрхийлэл нь зөвхөн :alpha: цэг, зурааснаас бүрдэх тэмдэгтийн багцыг шалгадаг тул шалгалт зөв ажиллаагүй. rfc3986 стандарттай зөвлөлдсөний дараа нэгдсэн нөөцийн тодорхойлогч Энэ удаад Майкрософт юу ч зөрчөөгүй нь тодорхой болсон (гэхдээ надад ийм хувилбар байсан). Зөвхөн тэмдэгтийн ангилал :alpha: нь зөвхөн латин цагаан толгойн үсгийг агуулдаг. Би ердийн чекийг үсгэн тоогоор хурдан солино. Дууслаа, та гайхалтай байна, бүх зүйл эцэст нь эхэлж, бүх шалгалтын дараа хяналтыг манай скрипт аппликейшн дээр өгсөн, бидний холбоос консол дээр гарч ирсэн, бүх зүйл байх ёстой шиг байна. Үүний дараа би exo-open-тэй холбоотой бүх асуудал нь схем дээрх тоонуудын улмаас холбоосын форматыг баталгаажуулсантай холбоотой гэж сэжиглэж эхлэв. Таамаглалыг шалгахын тулд би програмын mime төрлийн бүртгэлийг зүгээр л схем болгон өөрчилдөг линк болон voila - бүх зүйл open_xfce функцийг дарахгүйгээр ажилладаг. Гэхдээ энэ нь бидэнд ямар ч байдлаар тус болохгүй, учир нь чуулганд орох вэб хуудас нь lync15-тай холбоос үүсгэдэг.

Ингээд аялалын эхний хэсэг дууслаа. Бид холбоосын дуудлагыг хэрхэн таслан зогсоохыг мэддэг бөгөөд дараа нь үүнийг ямар нэгэн байдлаар боловсруулж, Pidgin дотор дамжуулах хэрэгтэй. "Чуулганд нэгдэх" цэсэн дэх линкээр өгөгдөл оруулахдаа дотооддоо хэрхэн ажилладагийг ойлгохын тулд би Sipe төслийн Git репозиторыг хувилаад код руу дахин ороход бэлэн боллоо. Харин дараа нь аз болоход каталог дээрх скриптүүд намайг татсан хувь нэмэр/dbus/:

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

Sipe залгаасыг dbus (ширээний автобус)-аар дамжуулан ашиглах боломжтой бөгөөд скрипт дотор зохион байгуулагчийн нэр болон 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 гэж дуудах нь төгс ажилладаг.

"Firefox-д захиалгат протокол зохицуулагчийг тохируулах" - Би энэ асуултын дагуу онлайн болсон. Stackoverflow-ийн талаар хэд хэдэн хэлэлцүүлгийг хийсний дараа (мөн үүнгүйгээр бид хаана байх байсан бэ) хариулт олдсон юм шиг санагдаж байна. Та тусгай параметр үүсгэх хэрэгтэй тухай: config (мэдээж foo-г conf-ээр солих):

network.protocol-handler.expose.foo = false

Бид үүнийг үүсгэж, холбоосыг нээгээд ... тийм азгүй. Хөтөч нь юу ч болоогүй юм шиг манай програмыг мэдэхгүй гэж хэлдэг.

Би Mozilla-аас протокол бүртгүүлэх тухай албан ёсны баримт бичгийг уншиж байна, gnome desktop дээр өөрөө холбоог бүртгэх сонголт байгаа (мэдээж 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-ээр цонхны байршлыг өөрчилдөг. Би энгийн html файлыг conf протоколын линкээр бичиж, хөтөч дээр нээж, холбоос дээр дарна уу - Yos! Бид ямар аппликешн дээр линкээ нээх хэрэгтэйг асуух цонх нээгдэх бөгөөд тэнд бидний Lync програм аль хэдийн жагсаалтад байгаа - бид үүнийг бүх боломжит хэлбэрээр бүртгүүлсэн. Цонхонд "сонголтыг санаж, манай програмын холбоосыг үргэлж нээ" гэсэн хайрцаг байгаа бөгөөд үүнийг тэмдэглээд "OK" дээр дарна уу. Энэ бол хоёр дахь ялалт юм - хурлын цонх нээгдэнэ. Үүний зэрэгцээ, чуулганыг нээх нь зөвхөн холбоос дээр дарахад төдийгүй нэгдэх хуудаснаас чуулган руу шилжих үед ч ажилладаг.

Дараа нь би шалгаж, параметрүүдийг устгасан network.protocol-handler.expose.conf Фокс дахь протоколын үйл ажиллагаанд ямар ч байдлаар нөлөөлөөгүй. Холбоосууд үргэлжлүүлэн ажиллав.

дүгнэлт

Би бүх ажлаа GitHub репозиторт байршуулсан; бүх эх сурвалжийн холбоосыг нийтлэлийн төгсгөлд өгөх болно.
Миний бүтээлийг ашиглахыг хүссэн хүмүүсээс санал хүсэлтийг нь авах сонирхолтой байх болно. Би бүх хөгжүүлэлтийг зөвхөн өөрийн Linux Mint системд зориулж хийсэн тул бусад түгээлтүүд эсвэл ширээний компьютерууд энэ хувилбарт ажиллахгүй байж магадгүй гэдгийг би нэн даруй тэмдэглэх хэрэгтэй. Өөрөөр хэлбэл, би үүнд бараг итгэлтэй байна, учир нь би xdg-open дээр зөвхөн миний DE-тэй холбоотой 1 функцийг засварласан. Хэрэв та бусад систем эсвэл ширээний компьютерт дэмжлэг үзүүлэхийг хүсвэл Github дээр надад татах хүсэлт бичээрэй.

Төслийг бүхэлд нь дуусгахад 1 орой зарцуулсан.

Ашигласан материал:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх