لینکس پر Lync کانفرنسوں میں خودکار لاگ ان

ارے حبر!

میرے لیے، یہ جملہ ہیلو ورلڈ کے مترادف ہے، کیونکہ میں آخر کار اپنی پہلی اشاعت پر پہنچ گیا۔ میں نے اس حیرت انگیز لمحے کو ایک طویل عرصے کے لیے ٹال دیا، کیوں کہ اس کے بارے میں لکھنے کے لیے کچھ نہیں تھا، اور میں اس چیز کو بھی نہیں چوسنا چاہتا تھا جو پہلے ہی کئی بار چوس چکا تھا۔ عام طور پر، میں اپنی پہلی اشاعت کے لیے کچھ اصلی، دوسروں کے لیے مفید اور کسی قسم کے چیلنج اور مسائل کو حل کرنا چاہتا ہوں۔ اور اب میں اسے شیئر کر سکتا ہوں۔ اب ہر چیز کے بارے میں ترتیب سے بات کرتے ہیں۔

داخلہ

یہ سب کچھ اس وقت شروع ہوا جب کچھ عرصہ پہلے میں نے اپنے کام کے کمپیوٹر پر لینکس منٹ ڈاؤن لوڈ کیا۔ بہت سے لوگ شاید جانتے ہیں کہ Sipe پلگ ان کے ساتھ Pidgin Linux سسٹمز کے لیے Microsoft Lync (جسے اب کاروبار کے لیے Skype کہا جاتا ہے) کا مکمل طور پر موزوں متبادل ہے۔ اپنے کام کی تفصیلات کی وجہ سے، مجھے اکثر SIP کانفرنسوں میں حصہ لینا پڑتا ہے، اور جب میں ونڈوز ورکر تھا، کانفرنسوں میں داخل ہونا بنیادی بات تھی: ہمیں بذریعہ ڈاک دعوت نامہ موصول ہوتا ہے، لاگ ان لنک پر کلک کریں، اور ہم جانے کے لیے تیار ہیں۔ .

لینکس کے تاریک پہلو پر سوئچ کرتے وقت، سب کچھ کچھ زیادہ ہی پیچیدہ ہو گیا: یقیناً، آپ پِڈگین میں بھی کانفرنسوں میں لاگ اِن ہو سکتے ہیں، لیکن ایسا کرنے کے لیے آپ کو اپنے ایس آئی پی اکاؤنٹ کی خصوصیات میں مینو میں جوائن کانفرنس کا آپشن منتخب کرنا ہو گا۔ کھلنے والی ونڈو میں کانفرنس کا لنک داخل کریں یا منتظم کا نام اور conf id درج کریں۔ اور کچھ دیر بعد میں نے سوچنا شروع کیا: "کیا کسی طرح اس کو آسان بنانا ممکن ہے؟" ہاں، آپ کہہ سکتے ہیں، آپ کو اس کی ضرورت کیوں ہے؟ میں ونڈوز پر بیٹھنا پسند کروں گا اور اپنا دماغ نہیں اڑا دوں گا۔

مرحلہ 1: تحقیق

نیکراسوف نے اپنے کام میں کہا کہ "اگر آپ کے سر میں کچھ سنک آجائے، تو آپ اسے داؤ پر نہیں لگا سکتے۔"

چنانچہ، ایک بار جب یہ خیال میرے ذہن میں آیا، کچھ عرصے بعد اس پر عمل درآمد کا پہلا خیال آیا۔ سب کچھ آسان لگ رہا تھا - آپ کو لنکس تک رسائی کو روکنے کی ضرورت ہے meet.company.com/user/confid - اپنی کار پر 127.0.0.1 پر ایک مقامی ویب ایپلیکیشن کا عمل انسٹال کریں اور /etc/hosts میں کمپنی کے ڈومین کے لیے ایک جامد اندراج شامل کریں جس کے ذریعے آپ کانفرنس میں داخل ہوتے ہیں، لوکل ہوسٹ کی طرف اشارہ کرتے ہوئے۔ اس کے بعد، اس ویب سرور کو لازمی طور پر اس لنک پر کارروائی کرنی ہوگی اور اسے کسی نہ کسی طرح Pidgin کے اندر منتقل کرنا ہوگا (میں ابھی کہوں گا کہ اس مرحلے پر مجھے ابھی تک کوئی اندازہ نہیں تھا کہ اسے کس طرح دینا ہے)۔ حل، بے شک، بیساکھیوں کی طرح بو آتی ہے، لیکن ہم پروگرامر ہیں، بیساکھی ہمیں نہیں ڈراتی (شٹ)۔

پھر، اتفاق سے، میں نے کسی طرح گوگل کروم میں دعوت کا لنک کھولا (اور عام طور پر میں ہمیشہ موزیلا فائر فاکس استعمال کرتا ہوں)۔ اور میری حیرت کی بات یہ ہے کہ ویب صفحہ بالکل مختلف نظر آیا - صارف کا ڈیٹا داخل کرنے کے لیے کوئی فارم نہیں تھا اور صفحہ داخل کرنے کے فوراً بعد کچھ کھولنے کی درخواست کی گئی تھی۔ XDG کھلے. صرف تفریح ​​کے لیے، میں "ہاں" پر کلک کرتا ہوں اور ایک غلطی کا پیغام ظاہر ہوتا ہے - لنک lync15:confjoin?url=https://meet.company.com/user/confid کو نہیں کھولا جا سکتا۔ ہمم یہ کس قسم کا xdg-open ہے اور اس طرح کے لنکس کو کھولنے کے لیے اس کی کیا ضرورت ہے؟ دستاویزات کے پوسٹ مارٹم پڑھنے سے پتہ چلا کہ یہ ایک GUI ہینڈلر ہے جو متعلقہ ایپلی کیشنز کو یا تو uri اسکیم کے پروٹوکول کے ساتھ یا مخصوص فائل کی اقسام کے ساتھ چلانے میں مدد کرتا ہے۔ ایسوسی ایشنز کو مائم ٹائپ میپنگ کے ذریعے ترتیب دیا گیا ہے۔ تو ہم دیکھتے ہیں کہ ہم یوری اسکیم کے لیے مماثل ایپلی کیشن کی تلاش کر رہے ہیں۔ lync15 اور لنک کو xdg-open پر منتقل کیا جاتا ہے، جس کے بعد، نظریہ میں، اسے کسی ایسی ایپلی کیشن کو منتقل کرنا چاہیے جو اس قسم کے لنک کے لیے ذمہ دار ہے۔ جو یقیناً ہمارے سسٹم میں نہیں ہے۔ اگر نہیں، تو وہ اوپن سورس دنیا میں کیا کرتے ہیں؟ یہ ٹھیک ہے، ہم اسے خود لکھیں گے۔

لینکس کی دنیا میں اور خاص طور پر اس بات کا مطالعہ کرنے میں کہ گرافیکل شیل (ڈیسک ٹاپ ماحول، ڈی ای) کیسے کام کرتا ہے، ویسے، میرے پاس لینکس منٹ میں 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 لانچ کرتا ہوں، وہی لنک پاس کرتا ہوں جو براؤزر سے آتا ہے اور... bummer۔ ایک بار پھر یہ کہتا ہے کہ یہ لنک پر کارروائی نہیں کرسکتا۔

جیسا کہ یہ پتہ چلتا ہے، میں نے اپنی درخواست کے ساتھ منسلک mime-قسم کی ڈائرکٹری کو اپ ڈیٹ نہیں کیا۔ یہ ایک سادہ کمانڈ کے ساتھ کیا جاتا ہے:

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

جو صرف فائل میں ترمیم کرتا ہے۔ ~/.config/mimeapps.list.

xdg-اوپن کال کے ساتھ نمبر 2 کی کوشش - اور دوبارہ ناکامی۔ کچھ نہیں، مشکلات ہمیں خوفزدہ نہیں کرتیں، بلکہ صرف ہماری دلچسپی کو ہوا دیتی ہیں۔ اور باش کی تمام طاقت (یعنی ٹریسنگ) سے لیس ہو کر، ہم سب سے پہلے ڈیبگنگ میں غوطہ لگاتے ہیں۔ یہاں یہ نوٹ کرنا ضروری ہے کہ xdg-open صرف ایک شیل اسکرپٹ ہے۔

bash -x xdg-open $url

ٹریس کرنے کے بعد آؤٹ پٹ کا تجزیہ کرنے سے یہ قدرے واضح ہو جاتا ہے کہ کنٹرول پھر منتقل ہو جاتا ہے۔ exo-کھلا. اور یہ پہلے سے ہی ایک بائنری فائل ہے اور یہ سمجھنا زیادہ مشکل ہے کہ دلیل میں اس کا لنک پاس کرتے وقت یہ ایک ناکام ریٹرن کوڈ کیوں واپس کرتا ہے۔

xdg-open کے اندرونی حصوں کو دیکھنے کے بعد، مجھے پتہ چلا کہ یہ مختلف ماحولیاتی پیرامیٹرز کا تجزیہ کرتا ہے اور یا تو کسی مخصوص DE کے لیے مخصوص فائل لنکس کو کھولنے کے لیے کچھ ٹولز کو کنٹرول کرتا ہے، یا اس میں فال بیک فنکشن ہوتا ہے۔ 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
}

میں پاس شدہ دلیل کے تجزیے کے ساتھ اور اگر ہماری مخصوص ذیلی اسٹرنگ وہاں موجود ہے تو میں جلدی سے یہاں ایک چھوٹا سا ہیک ایمبیڈ کروں گا۔ lync15:، پھر ہم فوری طور پر کنٹرول کو فنکشن میں منتقل کرتے ہیں۔ open_generic.

نمبر 3 کی کوشش اور کیا آپ کو لگتا ہے کہ اس نے کام کیا؟ جی ہاں، اب، بالکل. لیکن ایرر میسج پہلے ہی بدل چکا ہے، یہ پہلے سے ہی پیش رفت ہے- اب وہ مجھے بتا رہا تھا کہ فائل نہیں ملی اور فائل کی شکل میں اس نے مجھے وہی لنک لکھا جو دلیل کے طور پر پاس ہوا۔

اس بار یہ ایک فنکشن نکلا۔ is_file_url_or_path، جو ان پٹ پر بھیجے گئے فائل لنک کا تجزیہ کرتا ہے: file:// یا فائل کا راستہ یا کچھ اور۔ اور چیک نے صحیح طریقے سے کام نہیں کیا اس حقیقت کی وجہ سے کہ ہمارے سابقہ ​​(url اسکیم) میں نمبر ہیں، اور ریگولر ایکسپریشن صرف :alpha: ڈاٹس اور ڈیشز پر مشتمل کریکٹر سیٹ کو چیک کرتا ہے۔ rfc3986 کے معیار سے مشورہ کرنے کے بعد یکساں وسائل کا شناخت کنندہ یہ واضح ہو گیا کہ اس بار مائیکروسافٹ کسی بھی چیز کی خلاف ورزی نہیں کر رہا ہے (حالانکہ میرے پاس ایسا ورژن تھا)۔ صرف کریکٹر کلاس :alpha: صرف لاطینی حروف تہجی کے حروف پر مشتمل ہے۔ میں جلدی سے باقاعدہ چیک کو الفانومریک میں تبدیل کرتا ہوں۔ ہو گیا، آپ حیرت انگیز ہیں، سب کچھ آخرکار شروع ہوتا ہے، تمام جانچ پڑتال کے بعد کنٹرول ہماری اسکرپٹ ایپلیکیشن کو دیا جاتا ہے، ہمارا لنک کنسول پر ظاہر ہوتا ہے، سب کچھ ویسا ہی ہے جیسا ہونا چاہیے۔ اس کے بعد، مجھے شک ہونے لگتا ہے کہ ایکسو اوپن کے تمام مسائل اسکیم میں نمبروں کی وجہ سے لنک فارمیٹ کی توثیق کی وجہ سے بھی ہیں۔ مفروضے کو جانچنے کے لیے، میں درخواست کی مائیم قسم کے رجسٹریشن کو صرف ایک اسکیم میں تبدیل کرتا ہوں۔ lync اور voila - open_xfce فنکشن کو اوور رائیڈ کیے بغیر سب کچھ کام کرتا ہے۔ لیکن یہ ہماری کسی بھی طرح سے مدد نہیں کرے گا، کیونکہ کانفرنس میں داخل ہونے کے لیے ویب صفحہ lync15 کے ساتھ ایک لنک بناتا ہے۔

چنانچہ سفر کا پہلا حصہ مکمل ہو گیا۔ ہم جانتے ہیں کہ کسی لنک کال کو کیسے روکا جائے اور پھر اسے کسی نہ کسی طرح پراسیس کرکے Pidgin کے اندر منتقل کرنے کی ضرورت ہے۔ یہ سمجھنے کے لیے کہ "کانفرنس میں شامل ہوں" مینو میں ایک لنک کے ذریعے ڈیٹا داخل کرتے وقت یہ اندرونی طور پر کیسے کام کرتا ہے، میں نے Sipe پروجیکٹ کے Git ذخیرہ کو کلون کیا اور دوبارہ کوڈ میں غوطہ لگانے کے لیے تیار ہو گیا۔ لیکن پھر، خوش قسمتی سے، میں کیٹلاگ میں موجود اسکرپٹس کی طرف متوجہ ہوا۔ contrib/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 کو کال کرنا بالکل کام کرتا ہے۔

"فائر فاکس میں کسٹم پروٹوکول ہینڈلر سیٹ کریں" - میں اس سوال کے ساتھ آن لائن چلا گیا۔ اسٹیک اوور فلو (اور ہم اس کے بغیر کہاں ہوں گے) پر متعدد مباحثوں سے گزرنے کے بعد ، ایسا لگتا ہے کہ جواب مل گیا ہے۔ میں آپ کو ایک خاص پیرامیٹر بنانے کی ضرورت ہے۔ کے بارے میں: config (یقیناً foo کو conf سے تبدیل کرنا):

network.protocol-handler.expose.foo = false

ہم اسے بناتے ہیں، لنک کھولتے ہیں اور... ایسی قسمت نہیں ہے۔ براؤزر، گویا کچھ ہوا ہی نہیں، کہتا ہے کہ اسے ہماری درخواست کا علم نہیں ہے۔

میں موزیلا سے پروٹوکول کو رجسٹر کرنے کے بارے میں سرکاری دستاویزات پڑھ رہا ہوں، خود 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

میں رجسٹر کرتا ہوں، براؤزر کھولتا ہوں... اور دوبارہ داڑھی۔

یہاں دستاویزات کی ایک سطر میری آنکھ کو پکڑتی ہے:

اگلی بار جب آپ protocol-type foo کے لنک پر کلک کریں گے تو آپ سے پوچھا جائے گا کہ اسے کس ایپلی کیشن کے ساتھ کھولنا ہے۔

- سیمیون سیمینیچ
- آہ

ہم لنک پر کلک نہیں کرتے، لیکن ویب صفحہ جاوا اسکرپٹ کے ذریعے window.location کو صرف تبدیل کرتا ہے۔ میں conf پروٹوکول کے لنک کے ساتھ ایک سادہ HTML فائل لکھتا ہوں، اسے براؤزر میں کھولتا ہوں، لنک پر کلک کرتا ہوں - Yos! ایک ونڈو کھلتی ہے جو پوچھتی ہے کہ ہمیں کس ایپلی کیشن میں اپنا لنک کھولنے کی ضرورت ہے، اور وہاں ہمارے پاس پہلے سے ہی ہماری Lync ایپلیکیشن فہرست میں موجود ہے - ہم ایمانداری کے ساتھ اسے ہر ممکن طریقے سے رجسٹر کر چکے ہیں۔ وہاں ونڈو میں ایک چیک باکس ہے "ہماری درخواست میں انتخاب کو یاد رکھیں اور ہمیشہ لنکس کھولیں"، اسے نشان زد کریں، ٹھیک ہے پر کلک کریں۔ اور یہ دوسری فتح ہے - کانفرنس کی کھڑکی کھلتی ہے۔ ایک ہی وقت میں، کانفرنسیں شروع کرنا نہ صرف اس وقت کام کرتا ہے جب آپ کسی لنک پر کلک کرتے ہیں، بلکہ اس وقت بھی جب جوائننگ پیج سے ہمیں کانفرنس میں جانے کی ضرورت ہوتی ہے۔

پھر میں نے پیرامیٹرز کو حذف کرتے ہوئے چیک کیا۔ network.protocol-handler.expose.conf فاکس میں پروٹوکول کے آپریشن کو کسی بھی طرح متاثر نہیں کیا۔ کڑیاں کام کرتی رہیں۔

حاصل يہ ہوا

میں نے اپنا تمام کام GitHub ذخیرہ میں اپ لوڈ کر دیا ہے؛ تمام وسائل کے لنکس مضمون کے آخر میں ہوں گے۔
میں ان لوگوں سے رائے حاصل کرنے میں دلچسپی رکھوں گا جو میرے کام کو استعمال کرنا چاہتے ہیں۔ مجھے فوری طور پر نوٹ کرنا چاہئے کہ میں نے تمام ترقی صرف اپنے لینکس منٹ سسٹم کے لئے کی ہے، لہذا اس ورژن میں کچھ دوسری تقسیم یا ڈیسک ٹاپس کام نہیں کرسکتے ہیں۔ یا اس کے بجائے، مجھے اس کا بھی تقریباً یقین ہے، کیونکہ میں نے xdg-open میں صرف 1 فنکشن پیچ کیا ہے جو صرف میرے DE سے متعلق ہے۔ اگر آپ دوسرے سسٹمز یا ڈیسک ٹاپس کے لیے سپورٹ شامل کرنا چاہتے ہیں تو مجھے Github پر پل کی درخواستیں لکھیں۔

پورے پروجیکٹ کو مکمل ہونے میں 1 شام کا وقت لگا۔

حوالہ جات:

ماخذ: www.habr.com

نیا تبصرہ شامل کریں