لينڪس تي Lync ڪانفرنسن ۾ خودڪار لاگ ان

اي حبر!

منهنجي لاءِ، هي جملو هيلو ورلڊ جي برابر آهي، ڇاڪاڻ ته مان آخرڪار منهنجي پهرين اشاعت تي پهتس. مون هن شاندار لمحي کي گهڻي وقت لاءِ روڪي ڇڏيو، ڇاڪاڻ ته لکڻ لاءِ ڪجهه به نه هو، ۽ مان پڻ اهڙي شيءِ کي چوسڻ نه ٿي چاهيان، جيڪا اڳي ئي ڪافي ڀيرا چوسي چڪي هئي. عام طور تي، منهنجي پهرين اشاعت لاءِ مون چاهيو پئي ته ڪجهه اصل، ٻين لاءِ مفيد ۽ ڪنهن قسم جي چيلنج ۽ مسئلن جي حل تي مشتمل هجي. ۽ هاڻي مان هن کي حصيداري ڪري سگهان ٿو. هاڻي اچو ته ترتيب ۾ هر شيء بابت ڳالهايون.

جائز آهي

اهو سڀ شروع ٿيو جڏهن ڪجهه وقت اڳ مون ڊائون لوڊ ڪيو لينڪس مائيٽ منهنجي ڪم ڪمپيوٽر تي. ڪيترائي ماڻهو شايد ڄاڻن ٿا ته Pidgin سان Sipe پلگ ان هڪ مڪمل طور تي مناسب متبادل آهي Microsoft Lync (هاڻي ڪاروبار لاء Skype سڏيو ويندو آهي) لينڪس سسٽم لاء. منهنجي ڪم جي خاصيتن جي ڪري، مون کي اڪثر SIP ڪانفرنسن ۾ حصو وٺڻو پوندو آهي، ۽ جڏهن مان ونڊوز ورڪر هئس، ڪانفرنسن ۾ داخلا ابتدائي هئي: اسان کي ميل ذريعي دعوت ملي ٿي، لاگ ان لنڪ تي ڪلڪ ڪريو، ۽ اسان وڃڻ لاءِ تيار آهيون. .

جڏهن لينڪس جي اونداهي پاسي کي تبديل ڪندي، هر شيء ڪجهه وڌيڪ پيچيده ٿي وئي: يقينا، توهان Pidgin ۾ ڪانفرنس ۾ پڻ لاگ ان ڪري سگهو ٿا، پر اهو ڪرڻ لاء توهان کي چونڊڻ جي ضرورت آهي ڪانفرنس ۾ شامل ٿيڻ جو اختيار مينيو ۾ توهان جي SIP اڪائونٽ جي ملڪيت ۽. کليل ونڊو ۾، ڪانفرنس جي لنڪ داخل ڪريو يا آرگنائيزر جو نالو ۽ conf id داخل ڪريو. ۽ ڪجهه وقت کان پوء مون سوچڻ شروع ڪيو: "ڇا اهو ممڪن آهي ته ڪنهن به طريقي سان هن کي آسان بڻائي؟" ها، توهان شايد چئو، ڇو ته توهان کي هن جي ضرورت آهي؟ مان ونڊوز تي ويهڻ ۽ منهنجي ذهن کي نه ڌڪڻ چاهيندس.

قدم 1: تحقيق

”جيڪڏهن توهان کي پنهنجي سر ۾ ڪجهه به محسوس ٿئي ٿو ته توهان ان کي داغ سان هٽائي نه ٿا سگهو،“ نيڪروسوف پنهنجي ڪم ۾ چيو آهي ته ”روس ۾ ڪير سٺو رهندو آهي.

سو، هڪ دفعو منهنجي ذهن ۾ اهو خيال آيو، ته ڪجهه وقت کان پوءِ ان تي عمل ڪرڻ جو پهريون خيال آيو. سڀ ڪجھ سادو لڳي رهيو آهي - توهان کي لنڪس تائين رسائي کي روڪڻ جي ضرورت آهي meet.company.com/user/confid 127.0.0.1 تي توهان جي ڪار تي هڪ مقامي ويب ايپليڪيشن پروسيس کي انسٽال ڪريو ۽ /etc/hosts ۾ ڪمپني ڊومين لاءِ هڪ مستحڪم داخلا شامل ڪريو جنهن ذريعي توهان ڪانفرنس ۾ داخل ٿيو، لوڪل هوسٽ ڏانهن اشارو ڪندي. اڳيون، هن ويب سرور کي لازمي طور تي لنڪ تي عمل ڪرڻ گهرجي جيڪو ان وٽ آيو آهي ۽ ڪنهن به طريقي سان ان کي Pidgin جي اندر منتقل ڪرڻ گهرجي (مان فوري طور تي چوندس ته هن اسٽيج تي مون کي اڃا تائين ڪا به خبر نه هئي ته ان کي ڪيئن ڏيو). حل، يقينا، بڇڙي وانگر، پر اسان پروگرامر آهيون، بيچيني اسان کي خوفزده نه ڪندا آهن (شٽ).

پوءِ، اتفاق سان، مون ڪنهن نه ڪنهن طرح گوگل ڪروم ۾ دعوت جي لنڪ کوليو (۽ عام طور تي آئون هميشه Mozilla Firefox استعمال ڪندو آهيان). ۽ منهنجي تعجب ۾، ويب پيج مڪمل طور تي مختلف نظر آيو - صارف جي ڊيٽا داخل ڪرڻ لاء ڪو به فارم نه هو ۽ صفحي ۾ داخل ٿيڻ کان پوء فوري طور تي ڪجهه کولڻ جي درخواست هئي. xdg-open. بس مزي لاءِ، مان ڪلڪ ڪريان ٿو ”ها“ ۽ هڪ نقص پيغام ظاهر ٿئي ٿو - لنڪ lync15:confjoin?url=https://meet.company.com/user/confid کولي نٿو سگهجي. هوم. هي ڪهڙي قسم جو xdg-open آهي ۽ اهڙيون لنڪ کولڻ لاءِ ان کي ڪهڙي ضرورت آهي؟ دستاويزن جي پوسٽ مارٽم پڙهڻ مان ظاهر ٿيو ته اهو هڪ GUI هينڊلر آهي جيڪو لاڳاپيل ايپليڪيشنن کي هلائڻ ۾ مدد ڪري ٿو يا ته يوري اسڪيم لاءِ پروٽوڪول سان يا مخصوص فائلن جي قسمن سان. تنظيمون mime-type mapping جي ذريعي ترتيب ڏنل آهن. تنهنڪري اسان ڏسون ٿا ته اسان هڪ uri اسڪيم جي نالي سان ملندڙ ايپليڪيشن جي ڳولا ڪري رهيا آهيون lync15 ۽ لنڪ کي xdg-open ڏانهن منتقل ڪيو ويو آهي، جيڪو پوء، نظريي ۾، ان کي ڪجهه ايپليڪيشن ڏانهن منتقل ڪرڻ گهرجي جيڪا هن قسم جي لنڪ لاء ذميوار آهي. جيڪو، يقينا، اسان جي سسٽم ۾ ناهي. جيڪڏهن نه، ته پوءِ اهي اوپن سورس دنيا ۾ ڇا ڪندا؟ اهو صحيح آهي، اسان اهو پاڻ لکنداسين.

لينڪس جي دنيا ۾ وڌيڪ وسعت ۽ خاص طور تي مطالعي ۾ ته ڪيئن گرافڪ شيل (ڊيسڪ ٽاپ ماحول، DE) ڪم ڪندو آهي، رستي جي ذريعي، مون وٽ لينڪس مائيٽ ۾ Xfce آهي، اهو ڏيکاري ٿو ته ايپليڪيشنون ۽ ان سان لاڳاپيل mime-قسم عام طور تي سڌو سنئون لکندا آهن. ايڪسٽينشن سان شارٽ ڪٽ فائلون .desktop. خير، ڇو نه، مان هڪ سادي ايپليڪيشن شارٽ ڪٽ ٺاهيان ٿو، جنهن کي صرف هڪ بش اسڪرپٽ لانچ ڪرڻ گهرجي ۽ ان کي کنسول ڏانهن منتقل ٿيل دليل کي آئوٽ ڪرڻ گهرجي، مان صرف شارٽ ڪٽ فائل پاڻ مهيا ڪريان ٿو:

[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.

ڪوشش نمبر 2 سان xdg-اوپن ڪال - ۽ ٻيهر ناڪامي. ڪجھ به نه، مشڪلاتون اسان کي خوفزده نه ڪنديون آهن، پر صرف اسان جي دلچسپي کي وڌايو. ۽ بيش جي سموري طاقت سان هٿياربند (يعني ٽريسنگ)، اسان سڀ کان پهرين ڊيبگنگ ۾ ڊيوٽي ڪندا آهيون. هتي اهو نوٽ ڪرڻ ضروري آهي ته 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: صرف لاطيني الفابيٽ جا اکر شامل آهن. آئون جلدي تبديل ڪريان ٿو باقاعده چيڪ کي الفانومريڪ ۾. ٿي ويو، توهان حيرت انگيز آهيو، سڀ ڪجهه آخرڪار شروع ٿئي ٿو، سڀني چيڪن کان پوء ڪنٽرول اسان جي اسڪرپٽ ايپليڪيشن کي ڏنو ويو آهي، اسان جي لنڪ ڪنسول تي ڏيکاريل آهي، هر شيء ائين آهي جيئن اهو هجڻ گهرجي. ان کان پوء، مون کي شڪ ڪرڻ شروع ڪيو ته ايڪسو-اوپن سان گڏ سڀ مسئلا پڻ اسڪيم ۾ نمبرن جي ڪري لنڪ فارميٽ جي تصديق جي سبب آهن. مفروضي کي جانچڻ لاءِ، آئون ايپليڪيشن جي مائيم قسم جي رجسٽريشن کي صرف هڪ اسڪيم ۾ تبديل ڪريان ٿو lync ۽ voila - سڀڪنھن شيء کي اوور رائيڊ ڪرڻ کان سواء ڪم ڪري ٿو open_xfce فنڪشن. پر اهو اسان جي ڪنهن به طرح سان مدد نه ڪندو، ڇاڪاڻ ته ڪانفرنس ۾ داخل ٿيڻ لاءِ ويب پيج lync15 سان هڪ لنڪ ٺاهي ٿو.

سو، سفر جو پهريون حصو مڪمل ٿي چڪو آهي. اسان ڄاڻون ٿا ته هڪ لنڪ ڪال کي ڪيئن روڪيو وڃي ۽ پوء ان کي ڪنهن به طريقي سان پروسيس ڪيو وڃي ۽ Pidgin اندر گذريو وڃي. "ڪانفرنس ۾ شامل ٿيو" مينيو ۾ لنڪ ذريعي ڊيٽا داخل ڪرڻ وقت اهو اندروني طور تي ڪيئن ڪم ڪري ٿو، اهو سمجهڻ لاءِ، مون سائپ پروجيڪٽ جي گيٽ ريپوزٽري کي ڪلون ڪيو ۽ ٻيهر ڪوڊ ۾ غوطا هڻڻ لاءِ تيار ٿي ويس. پر پوءِ، خوشقسمتيءَ سان، مون کي ڪيٽلاگ ۾ لکيل اسڪرپٽ جي طرف راغب ڪيو ويو حصو/dbus/:

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

اهو ظاهر ٿئي ٿو ته Sipe پلگ ان dbus (ڊيسڪ ٽاپ بس) ذريعي رابطي لاءِ موجود آهي ۽ اسڪرپٽس جي اندر هڪ لنڪ ذريعي ڪانفرنس ۾ شامل ٿيڻ جا مثال آهن، يا ته آرگنائيزر جي نالي ۽ conf-id ذريعي، يا توهان sip ذريعي ڪال شروع ڪري سگهو ٿا. . اهو ئي آهي جيڪو اسان وڃائي رهيا هئاسين.

مرحلا 2. هڪ آٽو جوائن هينڊلر کي لاڳو ڪرڻ

جيئن ته پرل ۾ تيار ڪيل مثال آهن، مون صرف استعمال ڪرڻ جو فيصلو ڪيو sipe-join-conference-with-uri.pl ۽ ان کي ٿورڙو تبديل ڪريو پنھنجي لاءِ. مان پرل ۾ لکي سگهان ٿو، تنهنڪري ان ۾ ڪا خاص مشڪلات نه آئي.

رسم الخط کي الڳ جانچڻ کان پوءِ، مون ان جي ڪال فائل ۾ لکي ڏني lync.desktop. ۽ اها فتح هئي! جڏهن ڪانفرنس ۾ شامل ٿيڻ واري صفحي ۾ داخل ٿي ۽ xdg-open کي هلائڻ جي اجازت ڏئي ٿي، ڪانفرنس پاپ اپ ونڊو Pidgin کان خودڪار طريقي سان کليل هوندي. مون کي ڪيئن خوشي ٿي.
ڪاميابيءَ کان حوصلا افزائي ٿي، مون فيصلو ڪيو ته ساڳيو ڪم منهنجي مکيه برائوزر، Mozilla Firefox لاءِ. جڏهن توهان فاکس ذريعي لاگ ان ٿيندا آهيو، اختيار لاءِ هڪ صفحو کوليندو آهي ۽ بلڪل هيٺان هڪ بٽڻ هوندو آهي آفيس ڪميونيڪٽر استعمال ڪندي شامل ٿيو. هوءَ اها هئي جنهن منهنجو ڌيان ڇڪايو. جڏهن توهان برائوزر ۾ ان تي ڪلڪ ڪريو ٿا، اهو ايڊريس ڏانهن وڃي ٿو:

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

جنهن تي هو مهربانيءَ سان مون کي ٻڌائي ٿو ته هن کي خبر ناهي ته ان کي ڪيئن کوليو ۽، شايد، مون وٽ اهڙي پروٽوڪول لاءِ لاڳاپيل ايپليڪيشن ناهي. خير، اسان اڳ ۾ ئي هن جي ذريعي ڪيو ويو آهي.

مان جلدي رجسٽر ڪريان ٿو منهنجي اسڪرپٽ جي درخواست پڻ يوري اسڪيم لاءِ conf ۽ ... ڪجھ به نه ٿيندو. برائوزر شڪايت ڪندو رهي ٿو ته ڪا به ايپليڪيشن ناهي جيڪا منهنجي لنڪس کي سنڀالي. انهي حالت ۾، ڪال ڪرڻ xdg-open کان ڪنسول سان پيراگراف سان مڪمل طور تي ڪم ڪري ٿو.

“فائر فاڪس ۾ ڪسٽم پروٽوڪول هينڊلر سيٽ ڪريو” - مان هن سوال سان آن لائن ٿيس. اسٽيڪ اوور فلو تي ڪيترن ئي بحثن جي ذريعي وڃڻ کان پوء (۽ اسان ان کان سواء ڪٿي هونداسين)، اهو لڳي ٿو ته جواب مليو هو. توهان کي هڪ خاص پيٽرولر ٺاهڻ جي ضرورت آهي اٽڪل: ترتيب (يقيناً 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 کي تبديل ڪري ٿو. مان conf پروٽوڪول جي لنڪ سان هڪ سادي html فائل لکان ٿو، ان کي برائوزر ۾ کوليو، لنڪ تي ڪلڪ ڪريو - Yos! هڪ ونڊو کلي ٿي پڇي ٿي ته ڪهڙي ايپليڪيشن ۾ اسان کي پنهنجي لنڪ کولڻ جي ضرورت آهي، ۽ اتي اسان وٽ اڳ ۾ ئي اسان جي Lync ايپليڪيشن لسٽ ۾ آهي - اسان ايمانداري سان ان کي هر ممڪن طريقي سان رجسٽرڊ ڪيو آهي. اتي ونڊو ۾ هڪ چيڪ بڪس آهي "چونڊ ياد رکو ۽ هميشه اسان جي ايپليڪيشن ۾ لنڪ کوليو"، ان کي نشان لڳايو، ٺيڪ تي ڪلڪ ڪريو. ۽ اها ٻي فتح آهي - ڪانفرنس ونڊو کلي ٿي. ساڳئي وقت، افتتاحي ڪانفرنسون ڪم ڪنديون آهن نه رڳو جڏهن توهان هڪ لنڪ تي ڪلڪ ڪندا آهيو، پر پڻ جڏهن شامل ٿيڻ واري صفحي مان منتقل ٿيڻ جي ضرورت آهي ڪانفرنس ۾.

ان کان پوء مون چڪاس ڪيو، پيرا ميٽرز کي ختم ڪندي network.protocol-handler.expose.conf فاکس ۾ پروٽوڪول جي آپريشن کي ڪنهن به طريقي سان متاثر نه ڪيو. ڳنڍيون ڪم ڪنديون رهيون.

ٿڪل

مون پنھنجو سمورو ڪم GitHub مخزن تي اپلوڊ ڪيو آھي؛ سڀني وسيلن جا لنڪ آرٽيڪل جي آخر ۾ ھوندا.
مان انهن کان موٽ حاصل ڪرڻ ۾ دلچسپي وٺندس جيڪي منهنجي ڪم کي استعمال ڪرڻ چاهيندا آهن. مون کي فوري طور تي نوٽ ڪرڻ گهرجي ته مون سڀ ترقي ڪئي صرف منهنجي لينڪس مائيٽ سسٽم لاءِ، تنهن ڪري ڪجهه ٻيون تقسيم يا ڊيسڪ ٽاپ شايد انهي نسخي ۾ ڪم نه ڪري سگھن. يا بلڪه، مان ان جي باري ۾ پڻ پڪ سان پڪ آهيان، ڇاڪاڻ ته مون xdg-open ۾ صرف 1 فنڪشن پيچ ڪيو آهي جيڪو صرف منهنجي DE سان تعلق رکي ٿو. جيڪڏهن توهان ٻين سسٽم يا ڊيسڪ ٽاپ لاءِ سپورٽ شامل ڪرڻ چاهيو ٿا، مون کي لکو پل درخواستون Github تي.

سڄو پروجيڪٽ مڪمل ٿيڻ ۾ شام جو 1 لڳي ويو.

حوالا:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو