پروتکل چت اینترنت و اسکرین

من دوست دارم که در کانال‌های IRC پروژه‌های اینترنتی مورد علاقه‌ام حاضر شوم و از برنامه‌نویسان و کاربران آن پروژه‌ها برای شروع کار و رفع مشکلاتم کمک بگیرم. این نوشته در مورد ابزار انجام اینکار است.

ماجرا از اتاق گفتگوی اینترنتی ‏تهلاگ شروع شد. گهگاه به این کانال سر می‌زدم اما با خاموش کردن کامپیوترم تاریخچه چت را از دست می‌دادم. (البته اگر اصلا چتی وجود داشت…) از طرفی باز نگه داشتن پنجره چت هم کار ساده‌ای نبود. در ضمن هرچه بیشتر با پروژه‌های آزاد اینترنتی آشنا می‌شدم می‌دیدم که بسیاری از کاربران قدیمی‌تر و هکرها و حرفه‌ای‌ها از پروتکل چت اینترنت (irc) استفاده می‌کنند و می‌توان با آنها از این طریق گفتگو کرد. پروژه‌های مورد علاقه‌ام همچون فایرفاکس و نوم (گنوم) هم هر کدام تعداد زیادی کانال دارند که هر یک به یک موضوع خاص اختصاص دارد. برای اینکه بتوانم در این کانال‌ها حاضر باشم ابزارهای مختلفی را امتحان کردم. اول با برنامه‌های گرافیکی شروع کردم: smuxi و xchat و chatzilla (که یک پلاگین فایرفاکس است) و در آخر هم سراغ یکی از برنامه‌های نوم رفتم بنام polari. اما هیچ‌کدام از اینها راضی‌ام نکرد. دست آخر راه حل دلخواهم را پیدا کردم: استفاده همزمان از screen و irssi.

دست آخر راه حل دلخواهم را پیدا کردم: استفاده همزمان از screen و irssi روی یک سرور همیشه روشن مثلا رازبری‌پای.

GNU Screen

جدا از نیازهای بالا من می‌خواهم به همان کانال‌هایی که سر کارم وصل هستم در منزل هم دسترسی داشته باشم، آنهم با حداقل دردسر. مدتها بود که می‌دیدم عده‌ای در چت همیشه حضور دارند، برایم سوال بود که چطور؟ با جستجو در اینترنت فهمیدم که ابزاری وجود دارد به نام GNU Screen. این برنامه به ما امکان می‌دهد که یک shell روی سرور باز کنیم که وابسته به اتصال SSH ما نیست. یعنی با قطع شدن اتصال برنامه از بین نمی‌رود. این را می‌توان روی کامپیوتر شخصی هم اجرا کرد. یعنی به حال لینوکس که فرقی نمی‌کند. مثال رایج در سایت خود برنامه دانلود فایل است. مثلا فایلی حجیم در حال دانلود است (فرضا با wget) ولی ما می‌خواهیم اتصال SSH را قطع کنیم. در حالت عادی قطع این اتصال منجر به کشته شدن پروسه‌هایی خواهد شد که تحت آن در حال اجرا بوده‌اند و بنابراین دانلود ما هم نیمه‌ کاره قطع خواهد شد. راه حل رایج اجرا کردن screen بلافاصله بعد از اجرای شل است:

    mehdi@debian:~$ ssh mehdix.org
    mehdi@mehdix.org:~$ screen
    mehdi@mehdix.org:~$

ظاهرا هیچ اتفاق خاصی نمی‌افتد. اما در حقیقت ما دیگر داخل screen هستیم. مثلا با اجرا فرمان زیر می‌توانیم این وضع را ببینیم:

mehdi@mehdix:~$ screen -ls
There are screens on:
        16746.pts-4.mehdix      (01/26/2016 05:48:49 PM)        (Attached)
        13084.pts-0.mehdix      (01/25/2016 05:35:56 AM)        (Detached)
2 Sockets in /var/run/screen/S-mehdi.

در مثال بالا مشخص است که من دو پروسه‌ی اسکرین دارم (یکی قبل از نوشتن این مطلب باز بود). کلمه Attached یعنی که آن پروسه‌ی اسکرین در یک پنجره باز و فعال است. ما می‌توانیم با فشردن کلید Ctrl + A و بعد کلید d از اسکرین خارج بشویم. اگر اینکار را بکنید و بعد دستور screen -ls را اجرا کنید می‌بینید که بجای Attached نوشته می‌شود Detached. همانطور که در بالا می‌بینید من یک اسکرین detach شده هم از قبل دارم. اسکرین چند فرمان مهم دارد. یکی Ctrl و A است. همیشه برای اینکه اسکرین گوش به فرمان شود باید این ترکیب را فشار بدهیم. بعد به ترتیب:

  1. w: پنجره‌‌های مجازی داخل اسکرین را لیست می‌کند
  2. d: بدون کشتن پروسه اسکرین فقط از آن جدا می‌شود
  3. A: اجازه می‌دهد یک نام برای آن پنجره مجازی اسکرین انتخاب کنیم
  4. w: پنجره‌ها را لیست می‌کند
  5. 0-9: آن پنجره را در صورت وجود نمایش می‌دهد
  6. ?: لیست دستورات اسکرین را نمایش می‌دهد
  7. c: یک پنجره جدید می‌سازد

دستورات بالا داخل اسکرین بکار می‌روند. موقع اجرا اگر می‌خواهید به یک اسکرین موجود وصل بشوید کافیست دستور زیر را بزنید:

screen -r -d

irssi

اسکرین قطعه اول پازل بود. قطعه‌ی بعدی یک برنامه‌ی چت زیبای تحت کنسول است. بله، تحت ترمینال! irssi بهترین برنامه‌ای چتی است که تابحال استفاده کرده‌ام. هیچ کدام از برنامه‌های گرافیکی قبلی برای من لذت کار با irssi را فراهم نکرده بودند. حالا کافیست بعد از اجرای اسکرین irssi را اجرا کنم:

Irssi v0.8.17 - http://www.irssi.org                                           
00:07 -!-  ___           _
00:07 -!- |_ _|_ _ _____(_)
00:07 -!-  | || '_(_-<_-< |
00:07 -!- |___|_| /__/__/_|
00:07 -!- Irssi v0.8.17 - http://www.irssi.org

 [00:07] [] [1]                                                                 
[(status)] 

دستورات مهم:

/connect SERVER # مثلا irc.freenode.net
/server # لیست سرورهایی که به آنها وصلیم
/join #channel # مثلا /join #tehlug
/nick NICKNAME # برای انتخاب نیک
/window close # بستن یک پنجره
/help # نمایش داستورات موجود برنامه
/help COMMAND_NAME # نمایش راهنمای دستور

اگر به چند سرور وصل باشید با فشردن Ctrl + X می‌توان بین آنها حرکت کرد (سرور فعال عوض می‌شود). اگر چند پنجره باز کرده‌باشد (مثلا به چندین کانال وصل باشید) می‌توان با ترکیب کلید Alt و یک عدد از صفر تا نه بین پنجره‌های مجازی برنامه حرکت کرد. اگر می‌خواهید پیام‌های قدیمی‌تر را ببینید یا به اصطلاح backscroll کنید کلید Page Up/Down را بکار ببرید. در ضمن اگر دستوری تایپ کردید اما هیچ خروجی‌ای ندیدید گیچ نشوید، حتما خروجی در پنجره مجازی جداگانه‌ای درج شده است. کافیت با کلید Alt و اعداد بین پنجره‌ها حرکت کنید.

ترمینال معلّق

من دوست دارم پنجره چت همیشه باز باشد از طرفی جلوی دست و پا نباشد! راه حلش هم یک ترمینال کشویی ساده است که هر وقت من کلید میانبر را فشار می‌دهم از بالای دسکتاپم سُر بخورد و بیاید پایین. من Gnome Drop Down Terminal را نصب کردم و irssi را همیشه آنجا باز می‌گذارم. شما هر چه دوست دارید نصب کنید!

image

نتیجه کلام

مطمئن باشید تکنیک‌های زیادی هست که من اینجا نگفتم و کلی چیز هم هست که اصلا نمی‌دانم. (چون قرار نیست همه چیز را یاد بگیرم، یاد گرفتن به قدر نیاز خودم کافی است.) به باور من استفاده موثر از irc دریچه‌ایست به سوی همکاری با هکرهایی که در گوشه و کنار دنیا مشغول کد زدن هستند. از طرف دیگر مهم است که تاریخچه چت را از دست نداد (پروتکل irc آنرا پشتیبانی نمی‌کند). بنابراین ترکیب irssi و اسکرین راه حلی است که می‌تواند هر دو این نیازها را برآورده کند.